Hvordan unnslippe siterte strenger for SQL-setning brukt i databasen via Excel VBA

SQL Server bruker par med enkle anførselstegn for å identifisere starten og slutten av en streng. Innsetting av «Mrs Brown's Boys» i en databasetabell vil mislykkes siden de tre enkle anførselstegnene impliserer to strenger, hvorav den ene er ufullstendig. Et escape-tegn er nødvendig for apostrofen etter Brown. Denne artikkelen utforsker bruken av en tilpasset VBA-funksjon for å løse dette avviket.

Denne artikkelen forutsetter at leseren har utviklerbåndet vist og er kjent med VBA Editor. Hvis ikke, vennligst Google "Excel Developer Tab" eller "Excel Code Window".

Begrepet "database" her gjelder for "industriell styrke" databaser som SQL Server og Orakel.

Du finner et eksempel på arbeidsboken brukt i denne øvelsen her..

SQL-strengen

Inkludering av apostrofer (eller enkle anførselstegn) i en SQL-setning gir følgende feilmelding fra databasebehandleren (for navnet O'Dowd i dette tilfellet):Feil returnert fra databasebehandleren

Et escape-tegn er nødvendig, som er en dobbel apostrof i stedet for en enkelt. Dermed er O”Dowd akseptabelt for databasen. O'Dowd er ikke det.

Funksjonen

Der opptaksfelt muligens kan inneholde en apostrof, kan en tilpasset funksjon bygges for å utløses før oppdatering, og erstatte det enkle anførselstegn med et dobbelt anførselstegn.

  1. Åpne en ny arbeidsbok;
  1. Navngi det første arket "Oppdater" og fullfør som følger, bruk ditt eget databasenavn osv. Disse feltene vil bli brukt til å bygge en tilkoblingsstreng til SQL Server.Navngi det første arket "Oppdater" og fullfør som dette
  2. Åpne kodevinduet og sett inn en modul. Bruk menyelementene > Verktøy > Referanser for å referere til ADO-biblioteker.Åpne kodevinduet og sett inn en modul

Kopier koden nedenfor inn i modulen. Denne kobles til databasen.

Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase() If connDB.State = 1 Then connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Sheets("Update").Range("B2") strDBase = Sheets("Update").Range("B3") strUser = Sheets("Update").Range("B4") strPWD = Sheets(" Update").Range("B5") Hvis strPWD > "" Da strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Tidsavbrudd for tilkobling=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows-autentiseringsslutt If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
  1. Legg til funksjonen i modulen:
Funksjon fRemoveApostrophe(strWord Som String) Dim n Som Heltall Dim x Som Heltall x = 0 For n = 0 Til 100 x = InStr(x + 2, strWord, "'") 'Finn posisjonen til apostrofer Hvis x = 0 Then Exit For Hvis x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Funksjon
  1. Ignorer funksjonen.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Sett inn i tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Denne SQL-oppføringen vil mislykkes; merk de tre apostroffene." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Bruk funksjonen
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Sett inn i tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Denne SQL-oppføringen vil lykkes og vises i datatabellen som O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Fullfør Oppdater regnearket som følger, med start i celle A8:Fullfør oppdateringsarket
  1. Tilordne knappene til makroer Ignorer funksjon og Bruk funksjon henholdsvis

Resultatene

En meldingsboks vil vise resultatene; ingen database er fysisk oppdatert i denne øvelsen, men hvis du ønsker å gjøre det, sørg for at feltnavnene er kompatible med databasen din, og legg til bruk VBA-setningen conndb.execute(strSQL)

Gjenopprette fra Excel-krasj

Excel er utsatt for å krasje når datamaskinen går tom for ressurser. Under skrivingen av denne øvelsen frøs Excels regneark, som ennå ikke var lagret, opp. Kodevinduet var delvis responsivt, slik at arbeidsboken kunne lukkes som helhet. Det viste seg at arbeidsboken åpnet seg normalt igjen med innhold og kode komplett. Hadde de midlertidige filene og kildefilene blitt (altfor ofte) skadet, måtte arbeidet ha blitt gjort på nytt i mangel av et verktøy for å løse problemet. xlsx skade. Det var av liten betydning i dette tilfellet, men kan være en potensiell katastrofe for større arbeidsbøker.

Forfatterintroduksjon:

Felix Hooker er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert gjenopprette rar og sql-programvareprodukter. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.