Ako uniknúť citovaným reťazcom pre príkaz SQL, ktorý sa používa v databáze, pomocou aplikácie Excel VBA

Zdieľať teraz:

SQL Server používa páry jednoduchých úvodzoviek na identifikáciu start a koniec reťazca. Vloženie slova „Mrs Brown's Boys“ do tabuľky databázy zlyhá, pretože tri jednoduché úvodzovky znamenajú dva reťazce, z ktorých jeden je neúplný. U ap. Je potrebný únikový znakostlano po Brownovi. Tento článok skúma použitie prispôsobenej funkcie VBA na vyriešenie tejto anomálie.

Tento článok predpokladá, že čitateľ má zobrazenú pásku pre vývojárov a je oboznámený s editorom VBA. Ak nie, navštívte Google kartu „Vývojár Excel“ alebo „Okno kódu Excel“.

Pojem „databáza“ tu platí pre „priemyselne silné“ databázy, ako napr SQL Server a Oracle.

Je možné nájsť príklad zošita použitého v tomto cvičení tu.

Reťazec SQL

Zahrnutie apostrophes (alebo jednoduché úvodzovky) vo vnútri príkazu SQL poskytuje nasledujúcu chybu vrátenú od správcu databázy (v tomto prípade pre názov O'Dowd):Chyba vrátená od správcu databázy

Je potrebný únikový znak, ktorým je dvojitý apostlano namiesto jedného. Teda, O ”Dowd je pre databázu prijateľný. O'Dowd nie je.

Funkcia

Kde by zachytávacie polia mohli obsahovať apostNa záver je možné vytvoriť vlastnú funkciu, ktorá sa má spustiť pred aktualizáciou, a nahradí jednoduchú ponuku dvojitou.

  1. Otvoriť nový zošit;
  1. Pomenujte prvý hárok „Aktualizovať“ a postupujte podľa nasledujúcich pokynov pomocou svojho vlastného názvu databázy atď. Tieto polia sa použijú na vytvorenie reťazca pripojenia k SQL Server.Prvý hárok pomenujte „Aktualizácia“ a vyplňte takto
  2. Otvorte okno s kódom a vložte modul. Pomocou položiek ponuky> Nástroje> Odkazy môžete odkazovať na lib lib ADOrary.Otvorte okno kódu a vložte modul

Skopírujte nižšie uvedený kód do modulu. Týmto sa pripojíte k databáze.

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 = Tabuľky ("Aktualizácia"). Rozsah ("B2") strDBase = Tabuľky ("Aktualizácia"). Rozsah ("B3") strUser = Tabuľky ("Aktualizácia"). Rozsah ("B4") strPWD = Tabuľky (" Aktualizácia "). Rozsah (" B5 ") Ak strPWD>" "Potom strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Databáza = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Časový limit pripojenia = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'autentifikácia systému Windows Koniec Ak connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Ukončiť Sub ErrConnect: MsgBox Err.Popis Koniec Sub
  1. Pridajte funkciu do modulu:
Funkcia fRemoveApostrophe (strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr (x + 2, strWord, "'")' Nájdi pozíciu apostlaná 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. Ignorujte funkciu.
Sub IgnoreFunction () Volajte ConnectDatabase strCriteria = Tabuľky ("Aktualizácia"). Rozsah ("B10") strSQL = "Vložte do hodnôt tblCrewMember (Priezvisko) ('" & strCriteria & "')" MsgBox strSQL & ". Táto položka SQL bude zlyhať; všimnite si tri apostlaná. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Použite funkciu
Sub UseFunction () Call ConnectDatabase strCriteria = Sheets ("Update"). Range ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Vložte do hodnôt tblCrewMember (priezvisko) ('" & strCriteria & "')" MsgBox strSQL & ". Táto položka SQL bude úspešná a v dátovej tabuľke sa zobrazí ako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Kompletný Aktualizácia pracovný list nasledovne, starting v cele A8:Vyplňte pracovný hárok s aktualizáciou
  1. Priraďte tlačidlá k makrám Funkcia IgnoreFunction a UseFunction postupne

Výsledky

Okno so správou zobrazí výsledky; v tomto cvičení sa fyzicky neaktualizuje žiadna databáza, ale ak to chcete urobiť, skontrolujte, či sú názvy polí kompatibilné s vašou databázou, a pridajte príkaz VBA conndb.execute (strSQL)

Obnova z Excelu zlyhá

Program Excel je náchylný na zlyhanie, keď vo vašom počítači dochádza zdroje. Počas písania tohto cvičenia tabuľka programu Excel, zatiaľ neuložená, zamrzla. Okno kódu reagovalo čiastočne, čo umožňovalo uzavretie zošita ako celku. Ako sa ukázalo, zošit sa znova otvoril normálne po dokončení obsahu a kódu. Mal temporary a zdrojové súbory boli (až príliš často) poškodené, pri absencii nástroja na vyriešenie by bolo treba prácu prerobiť xlsx poškodenie. V tomto prípade to malo malý význam, mohlo by to však znamenať potenciálnu katastrofu pre väčšie zošity.

Úvod autora:

Felix Hooker je expert na obnovu dát v DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane zotaviť sa rar a softvérové ​​produkty na obnovenie sql. Pre viac informácií navštívte www.datanumen. S

Zdieľať teraz:

Komentáre sú uzavreté.