SQL Server s identifikuoti naudoja pavienių kabučių porastart ir eilutės pabaiga. „Mrs Brown's Boys“ į duomenų bazės lentelę įterpti nepavyks, nes trys pavienės kabutės reiškia dvi eilutes, iš kurių viena yra neužbaigta. Ap. reikalingas pabėgimo simbolisostrophe paskui Browną. Šiame straipsnyje nagrinėjamas tinkintos 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 bei Oracle.
Šiame pratime naudotos darbaknygės pavyzdį galite rasti čia.
SQL eilutė
Įtraukimas apostropes (arba pavienės kabutės) SQL sakinyje pateikia šią klaidą, kurią grąžino duomenų bazės tvarkytuvė (šiuo atveju vardo O'Dowd):
Reikalingas pabėgimo simbolis, kuris yra dvigubas apostrope vietoj vieno. Taigi „O”Dowd yra priimtinas duomenų bazei. O'Dowdas nėra.
Funkcija
Kur fiksavimo laukuose gali būti apostrophe, galima sukurti pasirinktinę funkciją, kuri suaktyvėtų prieš atnaujinant, pakeičiant vieną kabutę dviguba.
- Atidarykite naują darbaknygę;
- 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.
- Atidarykite kodo langą ir įdėkite modulį. Naudokite meniu elementus >Įrankiai >Nuorodos į nuorodą ADO libraras.
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
- Pridėkite funkciją į modulį:
Funkcija fRemoveApostrophe(strWord As String) Dim n Kaip sveikasis skaičius Dim x Kaip sveikasis skaičius x = 0 Jei n = 0 iki 100 x = InStr(x + 2, strWord, "'") 'Rasti ap vietąostrophes Jei x = 0 Tada išeikite, jei x > 0 Tada strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) Pabaiga, jei sekantis n fRemoveApostrophe = strWord pabaigos funkcija
- Ignoruoti funkciją.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Įterpti į tblCrewMember (LastName) reikšmes ('" & strCriteria & "')" MsgBox strSQL & ". Šis SQL įrašas nepavyks; atkreipkite dėmesį į tris apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Naudokite funkciją
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Atnaujinti").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Įterpti į tblCrewMember (LastName) reikšmes ('" & 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
- Užbaigti Atnaujinti darbalapį taip, startingėti ląstelėje A8:
- 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“ gali strigti, kai baigiasi kompiuterio ištekliai. Rašant šį pratimą, „Excel“ skaičiuoklė, dar neišsaugota, užstrigo. Kodo langas buvo iš dalies reaguojantis, todėl buvo galima uždaryti visą darbaknygę. Kaip paaiškėjo, darbaknygė vėl atidaryta įprastai, kai turinys ir kodas buvo baigti. Turėjo tempąrary ir šaltinio failai buvo (per dažnai) sugadinti, darbą būtų tekę atlikti iš naujo, jei nebūtų įrankio išspręsti 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 atsigauti rar ir sql atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com


