Cum să scăpați de șirurile citate pentru instrucțiunea SQL utilizată în baza de date prin Excel VBA

Distribuie acum:

SQL Server folosește perechi de ghilimele simple pentru a identifica start și capătul unui șir. Introducerea „Mrs Brown’s Boys” într-un tabel al bazei de date va eșua, deoarece cele trei ghilimele simple implică două șiruri, dintre care unul este incomplet. Este necesar un caracter de escape pentru apostrophe după Brown. Acest articol explorează utilizarea unei funcții VBA personalizate pentru a rezolva această anomalie.

Acest articol presupune că cititorul are afișată panglica pentru dezvoltatori și este familiarizat cu Editorul VBA. Dacă nu, vă rugăm să Google „Fila Dezvoltator Excel” sau „Fereastra Cod Excel”.

Termenul „bază de date” aici se aplică bazelor de date „industriale”, cum ar fi SQL Server și Oracle.

Un exemplu de registru de lucru folosit în acest exercițiu poate fi găsit aici.

Șirul SQL

Includerea apostrofe (sau ghilimele simple) din interiorul unei instrucțiuni SQL furnizează următoarea eroare returnată de managerul bazei de date (pentru numele O'Dowd în acest caz):Eroare returnată din Managerul bazei de date

Este nevoie de un caracter de escape, fiind un ap dubluostrophe în loc de unul singur. Astfel, O”Dowd este acceptabil pentru baza de date. O'Dowd nu este.

Functia

Acolo unde câmpurile de captură ar putea conține un apostrophe, o funcție personalizată poate fi creată pentru a se declanșa înainte de actualizare, înlocuind ghilimelele simple cu una dublă.

  1. Deschideți un nou registru de lucru;
  1. Denumiți prima foaie „Actualizare” și completați după cum urmează, folosind propriul nume de bază de date etc. Aceste câmpuri vor fi folosite pentru a construi un șir de conexiune la SQL Server.Numiți prima foaie „Actualizare” și completați astfel
  2. Deschideți fereastra de cod și introduceți un modul. Utilizați elementele de meniu > Instrumente > Referințe pentru a face referire la ADO librare.Deschideți fereastra de cod și introduceți un modul

Copiați codul de mai jos în modul. Aceasta se conectează la baza de date.

Public connDB ca nou ADODB.Connection Public rs ca nou ADODB.Recordset Public strSQL ca șir Public strCriteria ca șir Sub ConnectDatabase() Dacă connDB.State = 1 Atunci connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD strServer = Foi(„Actualizare”).Range(„B2”) strDBase = Foi(„Actualizare”).Range(„B3”) strUser = Foi(„Actualizare”).Range(„B4”) strPWD = Foi(„ Update").Range("B5") Dacă strPWD > "" Atunci strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Autentificare Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Ieșire Sub ErrConnect: MsgBox Err.Description End Sub
  1. Adăugați funcția în modul:
Funcția fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 Pentru n = 0 La 100 x = InStr(x + 2, strWord, "'") 'Găsiți poziția apostrophes If x = 0 Then Exit For If x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Ignorați funcția.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Inserați în tblCrewMember (LastName) valori ('" & strCriteria & "')" MsgBox strSQL & ". Această intrare SQL va eșuează; observați cele trei apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Utilizați funcția
Sub UseFunction() Apelați ConnectDatabase strCriteria = Sheets("Actualizare").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Inserați în tblCrewMember (LastName) valori ('" & strCriteria & "')" MsgBox strSQL & ". Această intrare SQL va avea succes și va apărea în tabelul de date ca O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Completați Actualizează fișă de lucru după cum urmează, starting la celulă A8:Completați Foaia de lucru de actualizare
  1. Atribuiți butoanele macrocomenzilor IgnoreFunction și UseFunction respectiv

Rezultatele

O casetă de mesaj va afișa rezultatele; nicio bază de date nu este actualizată fizic în acest exercițiu, dar, dacă doriți să faceți acest lucru, asigurați-vă că numele câmpurilor sunt compatibile cu baza dvs. de date și adăugați folosiți instrucțiunea VBA conndb.execute(strSQL)

Recuperarea din Excel se blochează

Excel este predispus să se blocheze atunci când computerul rămâne fără resurse. În timpul scrierii acestui exercițiu, foaia de calcul Excel, încă nesalvată, a înghețat. Fereastra Cod a fost parțial receptivă, permițând închiderea registrului de lucru ca întreg. După cum sa dovedit, registrul de lucru s-a redeschis în mod normal, cu conținutul și codul complet. Avea ritmulrary și fișierele sursă au fost (prea frecvent) deteriorate, lucrarea ar fi trebuit să fie refăcută în absența unui instrument de rezolvare daune xlsx. A fost de puțină importanță în acest caz, dar ar putea fi un potențial dezastru pentru registrele de lucru mai mari.

Introducerea autorului:

Felix Hooker este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv recupera rar și produse software de recuperare sql. Pentru mai multe informații vizitați www.datanumen.com

Distribuie acum:

Comentariile sunt închise.