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 dvojice jednoduchých úvodzoviek na identifikáciu začiatku a konca reťazca. Vloženie reťazca „Mrs Brown's Boys“ do databázovej tabuľky zlyhá, pretože tri jednoduché úvodzovky znamenajú dva reťazce, z ktorých jeden je neúplný. Pre apostrof za slovom Brown je potrebný escape znak. 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 apostrofov (alebo jednoduchých úvodzoviek) do príkazu SQL spôsobí nasledujúcu chybu vrátenú správcom databázy (v tomto prípade pre meno O'Dowd):Chyba vrátená od správcu databázy

Je potrebný escape znak, ktorým je dvojitý apostrof namiesto jedného. Preto je O”Dowd pre databázu prijateľný. O'Dowd nie.

Funkcia

V prípadoch, kde by polia zachytávania mohli obsahovať apostrof, je možné vytvoriť vlastnú funkciu, ktorá sa spustí pred aktualizáciou a nahradí jednoduchú úvodzovku 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. Na odkazovanie na knižnice ADO použite položky ponuky > Nástroje > Odkazy.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ájde pozíciu apostrofov 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() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Vložte do tblCrewMember(LastName) hodnoty ('" & strCriteria & "')" MsgBox strSQL & ". Tento SQL záznam zlyhá; všimnite si tri apostrofy." 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žiť do tblCrewMember(LastName) hodnoty ('" & strCriteria & "')" MsgBox strSQL & ". Tento SQL záznam bude úspešný a zobrazí sa v dátovej tabuľke ako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Kompletný Aktualizácia pracovný list takto, začínajúc od bunky 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á

Excel má tendenciu zlyhávať, keď počítaču dochádzajú prostriedky. Počas písania tohto cvičenia sa tabuľkový procesor Excelu, ktorý ešte nebol uložený, zamrzol. Okno s kódom čiastočne reagovalo, čo umožnilo zatvorenie celého zošita. Ukázalo sa, že zošit sa znova normálne otvoril s kompletným obsahom a kódom. Ak by boli dočasné a zdrojové súbory (príliš často) poškodené, práca by sa musela prepracovať bez nástroja na riešenie problému. 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 obnoviť súbor 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é.