SQL Server bruger par enkelt anførselstegn til at identificere start og slutningen af en streng. Indsættelse af 'Mrs Brown's Boys' i en databasetabel mislykkes, da de tre enkelte citater indebærer to strenge, hvoraf den ene er ufuldstændig. En flugtkarakter kræves til apostrophe efter Brown. Denne artikel udforsker brugen af en tilpasset VBA-funktion til at løse denne uregelmæssighed.
Denne artikel antager, at læseren har udviklerbåndet vist og er fortrolig med VBA Editor. Hvis ikke, bedes du Google “fanen Excel-udvikler” eller “vinduet Excel-kode”.
Udtrykket "database" her gælder for "industristyrke" databaser som f.eks SQL Server og Oracle.
Et eksempel på den projektmappe, der bruges i denne øvelse, kan findes link..
SQL-strengen
Inkludering af apostrophes (eller enkelt anførselstegn) inde i en SQL-sætning giver følgende fejl returneret fra databasesystemet (for navnet O'Dowd i dette tilfælde):
En flugtkarakter er nødvendig, idet det er en dobbelt apostrophe i stedet for en enkelt. Således er O ”Dowd acceptabel for databasen. O'Dowd er ikke.
Funktionen
Hvor fangstfelter muligvis kan indeholde en apostrophe, en brugerdefineret funktion kan bygges til at affyre før opdatering og erstatter det enkelte tilbud med et dobbelt.
- Åbn en ny projektmappe;
- Navngiv det første ark "Opdater", og udfyld som følger ved hjælp af dit eget databasenavn osv. Disse felter vil blive brugt til at oprette en forbindelsesstreng til SQL Server.
- Åbn kodevinduet, og indsæt et modul. Brug menupunkterne> Værktøjer> Referencer til reference ADO librarerne.
Kopiér nedenstående kode i modulet. Dette opretter forbindelse til databasen.
Offentlig konnDB Som Ny ADODB.Tilslutning Offentlige rs Som Ny ADODB.Recordset Offentlige strSQL Som String Offentlige strCriteria Som String Sub ConnectDatabase () Hvis connDB.State = 1 Derefter connDB.Close On Error Gå til ErrConnect Dim strServer, strDBase, strUser, strPWD Som String strServer = Sheets ("Update"). Range ("B2") strDBase = Sheets ("Update"). Range ("B3") strUser = Sheets ("Update"). Range ("B4") strPWD = Sheets (" Opdatering "). Område (" B5 ") Hvis strPWD>" "Så strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Forbindelsestimeout = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = ja; DATABASE = "& strDBase 'Windows-godkendelse Afslut Hvis connDB.ConnectionTimeout = 30 connDB. Åbn strConnectionstring Afslut Sub ErrConnect: MsgBox Err. Beskrivelse End Sub Sub
- Tilføj funktionen i modulet:
Funktion fRemoveApostrophe (strWord As String) Dim n Som Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr (x + 2, strWord, "'")' Find position for apostrophes Hvis x = 0 Afslut derefter for Hvis x> 0 Så strWord = Venstre (strWord, x - 1) & Chr (39) & Chr (39) & Højre (strWord, Len (strWord) - (x)) Afslut hvis næste n fRemApostrophe = strWord End-funktion
- Ignorer funktionen.
Sub IgnoreFunction () Ring ConnectDatabase strCriteria = Ark ("Opdater"). Område ("B10") strSQL = "Indsæt i tblCrewMember (LastName) værdier ('" & strCriteria & "')" MsgBox strSQL & ". Denne SQL-post vil mislykkes; bemærk de tre apostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Brug funktionen
Sub UseFunction () Ring til ConnectDatabase strCriteria = Ark ("Opdater"). Område ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Indsæt i tblCrewMember (LastName) værdier ('" & strCriteria & "')" MsgBox strSQL & ". Denne SQL-post vil lykkes og vises i datatabellen som O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Gennemfør Opdatering regneark som følger, starting ved celle A8:
- Tildel knapperne til makroer Ignorer funktion og Brug funktion gentagne gange
Resultaterne
En meddelelsesboks viser resultaterne; ingen database opdateres fysisk i denne øvelse, men hvis du ønsker at gøre det, skal du sikre dig, at feltnavne er kompatible med din database, og tilføj brug VBA-sætningen conndb.execute (strSQL)
Gendannelse fra Excel går ned
Excel er tilbøjelig til at gå ned, når din computer løber tør for ressourcer. Under skrivningen af denne øvelse frøs Excel-regneark, som endnu ikke er gemt. Kodevinduet var delvist responsivt, hvilket tillod lukning af projektmappen som helhed. Som det viste sig, åbnede projektmappen igen normalt med indholdet og koden komplet. Havde tempoetrary- og kildefiler blev beskadiget (alt for ofte), ville arbejdet have været gjort om i mangel af et værktøj til løsning af xlsx skader. Det var af ringe betydning i dette tilfælde, men kunne være en potentiel katastrofe for større projektbøger.
Forfatter Introduktion:
Felix Hooker er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder genvinde rar og SQL-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com


