Kuidas põgeneda tsiteeritud stringidest andmebaasis kasutatavate SQL-lausete jaoks Excel VBA kaudu

SQL Server kasutab stringi alguse ja lõpu tähistamiseks üksikkomapaare. Sõna „Proua Browni poisid” sisestamine andmebaasitabelisse ebaõnnestub, kuna kolm üksikkoma tähistavad kahte stringi, millest üks on mittetäielik. Browni järel oleva apostroofi jaoks on vaja paomärki. See artikkel uurib kohandatud VBA-funktsiooni kasutamist selle anomaalia lahendamiseks.

See artikkel eeldab, et lugejal on kuvatud arendaja lint ja ta tunneb VBA redaktorit. Kui ei, siis kasutage Google'i „Exceli arendaja vahekaarti” või „Exceli koodi akent”.

Mõiste "andmebaas" kehtib siin "tööstusliku tugevusega" andmebaaside kohta, nagu SQL Server ja Oraakel.

Selles harjutuses kasutatud töövihiku näite leiate siin.

SQL-string

Apostroofide (või ülakomade) lisamine SQL-lausesse annab andmebaasihaldurilt järgmise veateate (antud juhul nime O'Dowd puhul):Andmebaasihaldurilt tagastati viga

Vajalik on paomärk, mis on ühe apostroofi asemel kahekordne. Seega on O”Dowd andmebaasi jaoks vastuvõetav. O'Dowd mitte.

Funktsioon

Kui püüdmisväljad võivad sisaldada apostroofi, saab luua kohandatud funktsiooni, mis käivitub enne värskendamist, asendades ühe jutumärgi kahekordse jutumärgiga.

  1. Avage uus töövihik;
  1. Pange esimesele lehele nimeks "Uuenda" ja lõpetage järgmiselt, kasutades oma andmebaasi nime jne. Neid välju kasutatakse ühendusstringi loomiseks SQL Server.Nimetage esimene tööleht "Uuendus" ja lõpetage see
  2. Ava koodiaken ja lisa moodul. ADO teekidele viitamiseks kasuta menüüpunkte >Tööriistad >Viited.Avage koodi aken ja sisestage moodul

Kopeerige allolev kood moodulisse. See loob ühenduse andmebaasiga.

Avalik konnDB uuena ADODB.Connection Avalik rs uuena ADODB.Recordset Avalik strSQL stringina Avalik strCriteria stringina Sub ConnectDatabase() Kui connDB.State = 1 Siis connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, stringP strServer = Sheets("Update").Range("B2") strDBase = Sheets("Update").Range("B3") strUser = Sheets("Update").Range("B4") strPWD = Sheets(" Värskendus").Range("B5") Kui strPWD > "" Siis strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Andmebaas=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Ühenduse aeg=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windowsi autentimise lõpp Kui connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Välju Sub ErrConnect: MsgBox Err.Description End Sub
  1. Lisage moodulisse funktsioon:
Funktsioon fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 Tollest 100-ni x = InStr(x + 2, strWord, "'") 'Leia apostroofide asukoht Kui x = 0 Siis Välju Kui x > 0 Siis strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Ignoreeri funktsiooni.
Sub IgnoreFunction() Kutsu ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Lisa tblCrewMember (LastName) lahtrisse väärtused ('" & strCriteria & "')" MsgBox strSQL & ". See SQL-kirje ebaõnnestub; pange tähele kolme apostroofi." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Kasutage funktsiooni
Sub UseFunction() Kutsu ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Lisa tblCrewMember (LastName) tabelisse väärtused ('" & strCriteria & "')" MsgBox strSQL & ". See SQL-kirje õnnestub ja kuvatakse andmetabelis kujul O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Täitke Värskendused tööleht järgmiselt, alustades lahtrist A8:Täitke värskendamise tööleht
  1. Määrake nupud makrodele Ignoreeri funktsiooni ja Funktsiooni kasutamine vastavalt

Tulemused

Tulemusi kuvatakse sõnumikastis; selles harjutuses ei värskendata füüsiliselt ühtegi andmebaasi, kuid kui soovite, veenduge, et väljade nimed ühilduvad teie andmebaasiga, ja lisage, kasutage VBA lauset conndb.execute(strSQL)

Taastumine Exceli krahhidest

Excel kipub krahhima, kui arvuti ressursid otsa saavad. Selle harjutuse kirjutamise ajal hangus Exceli tabel, mida polnud veel salvestatud. Koodiaken reageeris osaliselt, võimaldades töövihiku tervikuna sulgeda. Nagu selgus, avanes töövihik uuesti normaalselt, sisu ja koodiga. Kui ajutised ja lähtekoodifailid oleksid (liiga sageli) kahjustatud, oleks töö tulnud uuesti teha, kuna puudus tööriistad probleemi lahendamiseks. xlsx kahju. Sel juhul oli sellel vähe tähtsust, kuid see võib suuremate töövihikute jaoks olla potentsiaalne katastroof.

Autori sissejuhatus:

Felix Hooker on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas taasta rar-fail ja SQL-i taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.