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á páry jednoduchých uvozovek k identifikaci starta konec řetězce. Vložení slova „Mrs Brown's Boys“ do databázové tabulky selže, protože tři jednoduché uvozovky znamenají dva řetězce, z nichž jeden je neúplný. U ap. Je vyžadován únikový znakostprovaz po Brownovi. Tento článek zkoumá použití přizpůsobené 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í apostrophes (nebo jednoduché uvozovky) uvnitř příkazu SQL poskytuje následující chybu vrácenou správcem databáze (v tomto případě pro název O'Dowd):Chyba vrácená správcem databáze

Je zapotřebí úniková postava, dvojitý apostlano místo jednoho. O ”Dowd je tedy pro databázi přijatelný. O'Dowd není.

Funkce

Kde by snímací pole mohla myslitelně obsahovat apostrophe, může být vytvořena vlastní funkce, která se před aktualizací aktivuje, a nahradí jednoduchou nabídku 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. Pomocí položek nabídky> Nástroje> Odkazy můžete odkazovat na knihovnu ADOrarano.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, "'")' Najít pozici apostlana If 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žte do hodnot tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Tato položka SQL bude selhat; všimněte si tří apostrophes. "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 hodnot tblCrewMember (příjmení) ('" & strCriteria & "')" MsgBox strSQL & ". Tato položka SQL bude úspěšná a v datové tabulce se objeví jako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Kompletní Aktualizace pracovní list, starting na cele 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 je náchylný k havárii, když v počítači dochází zdroje. Během psaní tohoto cvičení došlo k zmrazení tabulky aplikace Excel, která dosud nebyla uložena. Okno kódu reagovalo částečně, což umožnilo uzavření sešitu jako celku. Jak se ukázalo, sešit se znovu otevřel normálně po dokončení obsahu a kódu. Měl temporary a zdrojové soubory byly (až příliš často) poškozeny, práce by musela být provedena znovu, pokud by neexistoval nástroj k vyřešení 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ě zotavit se rar a SQL softwarové produkty pro obnovu. Pro více informací navštivte www.datanumen.com

Sdílej nyní:

Komentáře jsou uzavřeny.