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):
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.
- Otevřete nový sešit;
- 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.
- Otevřete okno s kódem a vložte modul. Pomocí položek nabídky> Nástroje> Odkazy můžete odkazovat na knihovnu ADOrarano.
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
- 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
- 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
- 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
- Kompletní Aktualizace pracovní list, starting na cele A8:
- 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


