SQL Server använder par av enkla citattecken för att identifiera början och slutet av en sträng. Att infoga 'Mrs Brown's Boys' i en databastabell kommer att misslyckas eftersom de tre enkla citattecken antyder två strängar, varav en är ofullständig. Ett escape-tecken krävs för apostrofen efter Brown. Den här artikeln utforskar användningen av en anpassad VBA-funktion för att lösa detta fel.
Den här artikeln förutsätter att läsaren har utvecklarbandet och är bekant med VBA Editor. Om inte, vänligen Google "Excel-fliken för utvecklare" eller "Excel-kodfönstret".
Termen "databas" här gäller "industristyrka" databaser som SQL Server och Oracle.
Ett exempel på arbetsboken som används i denna övning kan hittas här..
SQL-strängen
Inkludering av apostrofer (eller enkla citattecken) i ett SQL-uttryck ger följande felmeddelande som returneras från databashanteraren (i det här fallet för namnet O'Dowd):
Ett escape-tecken behövs, det vill säga en dubbel apostrof istället för en enkel. Därför är O”Dowd acceptabelt för databasen. O'Dowd är inte det.
Funktionen
Där infångningsfält kan innehålla en apostrof kan en anpassad funktion byggas för att aktiveras före uppdatering, och ersätta det enkla citattecken med ett dubbelt.
- Öppna en ny arbetsbok;
- Namnge det första arket "Uppdatera" och slutföra på följande sätt med ditt eget databasnamn etc. Dessa fält kommer att användas för att skapa en anslutningssträng till SQL Server.
- Öppna kodfönstret och infoga en modul. Använd menyalternativen > Verktyg > Referenser för att referera till ADO-bibliotek.
Kopiera koden nedan till modulen. Detta ansluter till databasen.
Offentlig anslutning Som ny ADODB.Anslutning Offentlig rs Som ny ADODB.Recordset Offentlig strSQL som sträng Offentlig strCriteria som sträng Sub ConnectDatabase () Om connDB.State = 1 Då 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 (" Uppdatering "). Område (" B5 ") Om strPWD>" "Då strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Databas = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Timeout för anslutning = 30; "Annars strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = ja; DATABASE = "& strDBase 'Windows-autentisering Slut om connDB.ConnectionTimeout = 30 connDB. Öppna strConnectionstring Avsluta Sub ErrConnect: MsgBox Err. Beskrivning End Sub Sub
- Lägg till funktionen i modulen:
Funktion fRemoveApostrophe(strWord Som String) Dim n Som Integer Dim x Som Integer x = 0 För n = 0 Till 100 x = InStr(x + 2, strWord, "'") 'Hitta apostrofers position Om x = 0 Sedan Avsluta För Om x > 0 Sedan strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End Om Nästa n fRemoveApostrophe = strWord End Funktion
- Ignorera funktionen.
Sub IgnoreFunction() Anropa ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ('" & strCriteria & "')" MsgBox strSQL & ". Den här SQL-posten kommer att misslyckas; notera de tre apostroferna." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Använd funktionen
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insert into tblCrewMember (LastName) values ('" & strCriteria & "')" MsgBox strSQL & ". Denna SQL-post kommer att lyckas och visas i datatabellen som O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Slutför Uppdatering kalkylblad enligt följande, med början i cell A8:
- Tilldela knapparna till makron Ignorera funktion och UseFunction repektivt
Resultatet
En meddelanderuta visar resultaten; ingen databas uppdateras fysiskt i den här övningen, men om du vill göra det, se till att fältnamnen är kompatibla med din databas och lägg till använd VBA-uttalandet conndb.execute (strSQL)
Återställa från Excel kraschar
Excel kraschar ofta när datorn får slut på resurser. Under skrivandet av den här övningen frös Excels kalkylblad, som ännu inte sparats. Kodfönstret svarade delvis, vilket gjorde att arbetsboken kunde stängas som helhet. Det visade sig att arbetsboken öppnades normalt igen med innehåll och kod kompletta. Om de temporära filerna och källfilerna (alltför ofta) hade skadats, skulle arbetet ha varit tvunget att göras om i avsaknad av ett verktyg för att lösa problemet. xlsx skada. Det var av liten betydelse i det här fallet, men det kan vara en potentiell katastrof för större arbetsböcker.
Författarintroduktion:
Felix Hooker är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive återställa rar-filer och mjukvaruprodukter för SQL-återställning. För mer information besök www.datanumen.com


