Az adatbázisban használt SQL-utasítás idézett karakterláncainak elkerülése Excel VBA-n keresztül

Oszd meg most:

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):Hiba az adatbázis-kezelőből

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.

  1. Nyisson meg egy új munkafüzetet;
  1. 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.Nevezze el az első lapot „Frissítés”-nek, és fejezze be így
  2. Nyissa meg a kód ablakot, és helyezzen be egy modult. Használja a >Tools >References to reference ADO lib menüpontotrares években.Nyissa meg a kódablakot, és helyezzen be egy modult

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
  1. 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
  1. 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
  1. 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
  1. Végezze el a Frissítések feladatlap az alábbiak szerint, starting a sejtben A8:Töltse ki a frissítési munkalapot
  1. 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

Oszd meg most:

Hozzászólások lezárva.