Jak uniknout citovaným řetězcům pro příkaz SQL používaný v databázi pomocí aplikace Excel VBA

Sdílej nyní:

SQL Server používá dvojice jednoduchých uvozovek k označení začátku a konce řetězce. Vložení textu „Mrs Brown's Boys“ do databázové tabulky selže, protože tři jednoduché uvozovky implikují dva řetězce, z nichž jeden je neúplný. Pro apostrof za slovem Brown je vyžadován řídicí znak. Tento článek zkoumá použití upravené funkce VBA k vyřešení této anomálie.

Tento článek předpokládá, že čtenář má zobrazený pás karet pro vývojáře a je obeznámen s editorem VBA. Pokud ne, prosím Google „Excel Developer tab“ nebo „Excel Code Window“.

Termín „databáze“ zde platí pro „průmyslové“ databáze typu SQL Server a Oracle.

Příklad sešitu použitého v tomto cvičení najdete zde.

Řetězec SQL

Zahrnutí apostrofů (nebo jednoduchých uvozovek) do příkazu SQL způsobí následující chybu vrácenou správcem databáze (v tomto případě pro jméno O'Dowd):Chyba vrácená správcem databáze

Je potřeba řídicí znak, kterým je dvojitý apostrof namísto jednoduchého. Proto je O”Dowd pro databázi přijatelný. O'Dowd nikoli.

Funkce

Tam, kde by pole pro zachycení mohla obsahovat apostrof, lze vytvořit vlastní funkci, která se spustí před aktualizací a nahradí jednoduchou uvozovku dvojitou.

  1. Otevřete nový sešit;
  1. Pojmenujte první list „Aktualizovat“ a vyplňte jej následujícím způsobem pomocí svého vlastního názvu databáze atd. Tato pole budou použita k vytvoření připojovacího řetězce k SQL Server.Pojmenujte první list „Aktualizovat“ a vyplňte takto
  2. Otevřete okno s kódem a vložte modul. Pro odkazování na knihovny ADO použijte položky nabídky > Nástroje > Odkazy.Otevřete okno kódu a vložte modul

Zkopírujte níže uvedený kód do modulu. Tím se připojíte k databázi.

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 ") If strPWD>" "Then strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Časový limit připojení = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'ověřování systému Windows Konec Pokud connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Popis End Sub
  1. Přidejte funkci do modulu:
Funkce fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Najde pozici apostrofů Pokud x = 0 Then Exit For If x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Tuto funkci ignorujte.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Vložit do tblCrewMember(LastName) hodnoty ('" & strCriteria & "')" MsgBox strSQL & ". Tento SQL záznam selže; všimněte si tří apostrofů." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Použijte funkci
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Vložit do tblCrewMember(LastName) hodnoty ('" & strCriteria & "')" MsgBox strSQL & ". Tento SQL záznam bude úspěšný a zobrazí se v datové tabulce jako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Kompletní Aktualizace pracovní list takto, počínaje buňkou A8:Vyplňte aktualizační list
  1. Přiřaďte tlačítka makrům Ignorovat funkci a UseFunction postupně

Výsledky

Okno se zprávou zobrazí výsledky; v tomto cvičení není fyzicky aktualizována žádná databáze, ale pokud si to přejete, ujistěte se, že názvy polí jsou kompatibilní s vaší databází, a přidejte příkaz VBA conndb.execute (strSQL)

Obnova z aplikace Excel selže

Excel má tendenci selhávat, když počítači docházejí prostředky. Během psaní tohoto cvičení se tabulka Excelu, která dosud nebyla uložena, zamrzla. Okno s kódem částečně reagovalo, což umožnilo zavření celého sešitu. Ukázalo se, že se sešit se znovu normálně otevřel s kompletním obsahem a kódem. Pokud by dočasné a zdrojové soubory byly (až příliš často) poškozeny, musela by se práce bez nástroje pro řešení problému přepracovat. xlsx poškození. V tomto případě to nemělo velký význam, ale mohlo by to být potenciální katastrofou pro větší sešity.

Úvod autora:

Felix Hooker je odborník na obnovu dat v oboru DataNumen, Inc., která je světovým lídrem v oblasti technologií pro obnovu dat, včetně obnovit rar a SQL softwarové produkty pro obnovu. Pro více informací navštivte www.datanumen.com

Sdílej nyní:

Komentáře jsou uzavřeny.