SQL Server idézőjelpárokat használ az s azonosításáratart és egy karakterlánc vége. A „Mrs Brown's Boys” beillesztése egy adatbázistáblába sikertelen lesz, mivel a három idézőjel két karakterláncot jelent, amelyek közül az egyik hiányos. Egy escape karakter szükséges az ap-hozostrophe Brown után. Ez a cikk egy testreszabott VBA-függvény használatát mutatja be ennek az anomáliának a megoldására.
Ez a cikk feltételezi, hogy az olvasó megjeleníti a Fejlesztői szalagot, és ismeri a VBA-szerkesztőt. Ha nem, használja a Google „Excel Developer Tab” vagy az „Excel Code Window” szolgáltatását.
Az „adatbázis” kifejezés itt az „ipari erősségű” adatbázisokra vonatkozik, mint pl SQL Server és a Oracle.
Példa a gyakorlatban használt munkafüzetre található itt .
Az SQL karakterlánc
Az apostrophes (vagy szimpla idézőjelek) egy SQL utasításban a következő hibát adja vissza az adatbázis-kezelőtől (ebben az esetben az O'Dowd névhez):
Szükség van egy escape karakterre, mivel egy dupla apostrophe egyetlen helyett. Így az O”Dowd elfogadható az adatbázis számára. O'Dowd nem.
A funkció
Ahol a rögzítési mezők elképzelhető, hogy apostrophe, egy egyéni függvény építhető úgy, hogy a frissítés előtt aktiválódjon, és az egyetlen idézetet dupla idézőjelre cserélje.
- Nyisson meg egy új munkafüzetet;
- Nevezze el az első lapot „Frissítés”-nek, és fejezze be az alábbiak szerint, a saját adatbázisnévvel stb. SQL Server.
- Nyissa meg a kód ablakot, és helyezzen be egy modult. Használja a >Tools >References to reference ADO lib menüpontotrares években.
Másolja be az alábbi kódot a modulba. Ez csatlakozik az adatbázishoz.
Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase() Ha connDB.State = 1 Akkor connDB.Close Error GoTo ErrConnect Dim strServer, strDBase, strUser, string strServer = Sheets("Frissítés").Tartomány("B2") strDBase = Sheets("Frissítés").Tartomány("B3") strUser = Sheets("Frissítés").Tartomány("B4") strPWD = Sheets(" Frissítés").Tartomány("B5") Ha strPWD > "" Then strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Kapcsolat időtúllépése=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows hitelesítés vége If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
- Adja hozzá a függvényt a modulhoz:
Funkció fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 - 100 x = InStr(x + 2, strWord, "'") 'Ap pozíciójának kereséseostrophes Ha x = 0, akkor kilép, ha x > 0, akkor strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End függvény
- Figyelmen kívül hagyja a függvényt.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Beszúrás a tblCrewMember (LastName) értékekbe ('" & strCriteria & "')" MsgBox strSQL & ". Ez az SQL bejegyzés sikertelen; vegye figyelembe a három apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Használja a funkciót
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Tartomány("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Beszúrás a tblCrewMember (LastName) értékekbe ('" & strCriteria & "')" MsgBox strSQL & ". Ez az SQL-bejegyzés sikeres lesz, és O'Dowd néven jelenik meg az adattáblázatban." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Végezze el a Frissítések feladatlap az alábbiak szerint, starting a sejtben A8:
- Rendelje hozzá a gombokat makrókhoz IgnoreFunction és a UseFunction rendre
Az eredmények
Egy üzenetablak mutatja az eredményeket; ebben a gyakorlatban egyetlen adatbázis sem frissül fizikailag, de ha szeretné, győződjön meg arról, hogy a mezőnevek kompatibilisek az adatbázisával, és használja a VBA utasítást conndb.execute(strSQL)
Helyreállítás az Excel összeomlásaiból
Az Excel hajlamos összeomlani, ha a számítógép kifogy az erőforrásokból. A gyakorlat írása során az Excel még nem mentett táblázata lefagyott. A kódablak részben reszponzív volt, lehetővé téve a munkafüzet egészének bezárását. Mint kiderült, a munkafüzet normál módon, a tartalom és a kód elkészültével újra megnyílt. Megvolt a tempórary és a forrásfájlok (túl gyakran) megsérültek, a munkát újra kellett volna végezni a megoldáshoz szükséges eszköz hiányában. xlsx kár. Ebben az esetben ennek csekély jelentősége volt, de nagyobb munkafüzetek esetén potenciális katasztrófa lehet.
Szerző Bevezetés:
Felix Hooker adat-helyreállítási szakértő DataNumen, Inc., amely világelső az adat-helyreállítási technológiák területén, beleértve meggyógyul rar és SQL helyreállítási szoftvertermékek. További információért látogasson el www.datanumen.com


