SQL Server kasutab s-i tuvastamiseks üksikute jutumärkide paaretart ja stringi lõpp. "Mrs Browni poiste" sisestamine andmebaasi tabelisse ebaõnnestub, kuna kolm üksikut jutumärki viitavad kahele stringile, millest üks on puudulik. Ap jaoks on vaja paomärkiostrophe Browni järel. Selles artiklis käsitletakse kohandatud VBA-funktsiooni kasutamist selle kõrvalekalde 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 Oracle.
Selles harjutuses kasutatud töövihiku näite leiate siin.
SQL-string
Kaasamine apostrophes (või üksikud jutumärgid) SQL-lause sees annavad andmebaasihaldurilt tagastatud järgmise vea (antud juhul nime O'Dowd puhul):
Vaja on põgenemistegelast, olles topelt apostrophe üheainsa asemel. Seega on O”Dowd andmebaasile vastuvõetav. O'Dowd ei ole.
Funktsioon
Kui püüdmisväljad võivad sisaldada apostrophe, saab luua kohandatud funktsiooni, mis käivitub enne värskendamist, asendades ühe jutumärgi kahekordsega.
- Avage uus töövihik;
- Pange esimesele lehele nimeks "Uuenda" ja lõpetage järgmiselt, kasutades oma andmebaasi nime jne. Neid välju kasutatakse ühendusstringi loomiseks SQL Server.
- Avage koodiaken ja sisestage moodul. Kasutage menüüelemente > Tööriistad > Viited viitele ADO librarvälja.
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
- Lisage moodulisse funktsioon:
Funktsioon fRemoveApostrophe(strWord As String) Dim n Täisarvuna Dim x Täisarvuna x = 0 For n = 0 kuni 100 x = InStr(x + 2, strWord, "'") 'Leia ap asukohtostrophes Kui x = 0 Siis välju Kui x > 0 Siis strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) Lõpeta, kui järgmine n fRemoveApostrophe = strWordi lõpu funktsioon
- Ignoreeri funktsiooni.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Sisesta tblCrewMember (LastName) väärtused ('" & strCriteria & "')" MsgBox strSQL & ". See SQL-i kirje ebaõnnestub; pange tähele kolm apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Kasutage funktsiooni
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Sisesta tblCrewMember (LastName) väärtused ('" & strCriteria & "')" MsgBox strSQL & ". See SQL-i kirje õnnestub ja kuvatakse andmetabelis O'Dowd nime all." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Täitke Värskendused tööleht järgmiselt, starting rakus A8:
- 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 on altid krahhile, kui teie arvuti ressursid saavad otsa.Selle harjutuse kirjutamise ajal hangus Exceli veel salvestamata tabel. Koodi aken reageeris osaliselt, võimaldades sulgeda töövihiku tervikuna. Nagu selgus, avati töövihik uuesti normaalselt, sisu ja kood oli valmis. Tempo olirary ja lähtefailid on (liiga sageli) kahjustatud, oleks tulnud töö uuesti teha, kui selle lahendamiseks pole olnud tööriista 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 taastuma rar ja SQL-i taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom


