Kaip pabėgti nuo cituojamų SQL teiginių, naudojamų duomenų bazėje, eilučių naudojant „Excel VBA“.

Bendrinti dabar:

SQL Server naudoja viengubų kabučių poras eilutės pradžiai ir pabaigai nurodyti. Įterpti „Mrs Brown's Boys“ į duomenų bazės lentelę nepavyks, nes trys viengubos kabutės reiškia dvi eilutes, iš kurių viena yra nepilna. Apostrofui po Brauno reikia naudoti pabėgimo simbolį. Šiame straipsnyje nagrinėjamas pritaikytos VBA funkcijos naudojimas šiai anomalijai išspręsti.

Šiame straipsnyje daroma prielaida, kad skaitytojas turi rodomą kūrėjo juostelę ir yra susipažinęs su VBA redaktoriumi. Jei ne, naudokite Google „Excel Developer Tab“ arba „Excel Code Window“.

Terminas „duomenų bazė“ čia taikomas „pramonės stiprumo“ duomenų bazėms, pvz SQL Server ir Orakulas.

Šiame pratime naudotos darbaknygės pavyzdį galite rasti čia.

SQL eilutė

Įtraukus apostrofus (arba viengubas kabutes) į SQL sakinį, duomenų bazės tvarkyklė grąžina tokią klaidą (šiuo atveju vardui O'Dowd):Klaida grąžinta iš duomenų bazės tvarkyklės

Reikalingas pabėgimo simbolis – dvigubas, o ne vienas apostrofas. Taigi, O”Dowd yra priimtinas duomenų bazei. O'Dowd – ne.

Funkcija

Jei fiksavimo laukuose gali būti apostrofas, galima sukurti pasirinktinę funkciją, kuri suveiktų prieš atnaujinimą, pakeisdama viengubą kabutę dviguba.

  1. Atidarykite naują darbaknygę;
  1. Pavadinkite pirmąjį lapą „Atnaujinti“ ir užpildykite taip, naudodami savo duomenų bazės pavadinimą ir pan. Šie laukai bus naudojami kuriant ryšio eilutę su SQL Server.Pavadinkite pirmąjį lapą „Atnaujinti“ ir užbaikite taip
  2. Atidarykite kodo langą ir įterpkite modulį. Norėdami nurodyti ADO bibliotekas, naudokite meniu elementus > Įrankiai > Nuorodos.Atidarykite kodo langą ir įdėkite modulį

Nukopijuokite žemiau esantį kodą į modulį. Tai prisijungia prie duomenų bazės.

Viešas connDB kaip naujas ADODB.Connection Viešasis rs kaip naujas ADODB.Recordset Viešasis strSQL kaip eilutė Viešasis strCriteria kaip eilutė Sub ConnectDatabase() Jei connDB.State = 1 Tada connDB.Close esant klaidai GoTo ErrConnect Dim strServer, strDBase, str.ADUser, stringP strServer = Lapai("Atnaujinti").Range("B2") strDBase = Sheets("Atnaujinti").Range("B3") strUser = Sheets("Atnaujinti").Range("B4") strPWD = Sheets(" Atnaujinti").Range("B5") Jei strPWD > "" Tada strConnectionstring = "DRIVER={SQL Server};Serveris=" & strServeris & ";Duomenų bazė=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Prisijungimo laikas=30;" Else strConnectionstring = "VAIRUOTOJAS={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows autentifikavimo pabaiga, jei connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Išeiti sub ErrConnect: MsgBox Err.Description Pabaiga
  1. Pridėkite funkciją į modulį:
Funkcija fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 Nuo n = 0 Iki 100 x = InStr(x + 2, strWord, "'") 'Rasti apostrofų poziciją Jei x = 0 Tada išeiti Jei x > 0 Tada strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End Jei Kitas n fRemoveApostrophe = strWord Funkcijos pabaiga
  1. Ignoruoti funkciją.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Įterpti į tblCrewMember (LastName) reikšmes ('" ir strCriteria & "')" MsgBox strSQL & ". Šis SQL įrašas nepavyks; atkreipkite dėmesį į tris apostrofus." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Naudokite funkciją
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Įterpti į tblCrewMember (LastName) reikšmes ('" ir strCriteria & "')" MsgBox strSQL & ". Šis SQL įrašas bus sėkmingas ir duomenų lentelėje bus rodomas kaip O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Užbaigti Atnaujinti darbalapį taip, pradedant nuo langelio A8:Užpildykite naujinimo darbalapį
  1. Priskirkite mygtukus makrokomandoms Ignoruoti funkciją bei UseFunction atitinkamai

Rezultatai

Pranešimų laukelyje bus rodomi rezultatai; atliekant šį pratimą jokia duomenų bazė fiziškai neatnaujinama, tačiau, jei norite tai padaryti, įsitikinkite, kad laukų pavadinimai yra suderinami su jūsų duomenų baze, ir pridėkite, naudokite VBA teiginį conndb.execute(strSQL)

Atkūrimas po „Excel“ gedimų

„Excel“ programa linkusi strigti, kai kompiuteriui pritrūksta išteklių. Rašant šį pratimą, „Excel“ skaičiuoklė, kuri dar nebuvo išsaugota, užstrigo. Kodo langas buvo iš dalies jautrus, todėl buvo galima uždaryti visą darbaknygę. Paaiškėjo, kad darbaknygė vėl atsidarė normaliai, o turinys ir kodas buvo baigti. Jei laikinieji ir šaltinio failai būtų (per dažnai) pažeisti, darbą būtų tekę atlikti iš naujo, nes nėra įrankio, kuris išspręstų problemą. xlsx žala. Šiuo atveju tai buvo mažai reikšminga, bet gali būti potenciali katastrofa didesnėms darbo knygoms.

Autoriaus įvadas:

Felixas Hookeris yra duomenų atkūrimo ekspertas DataNumen, Inc., kuri yra pasaulyje duomenų atkūrimo technologijų lyderė, įskaitant atkurti rar failą ir sql atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com

Bendrinti dabar:

Komentarai yra uždaryti.