SQL Server koristi parove jednostrukih navodnika za identifikaciju start i kraj niza. Umetanje 'Mrs Brown's Boys' u tablicu baze podataka neće uspjeti jer tri jednostruka navodnika impliciraju dva niza, od kojih je jedan nepotpun. Za ap je potreban izlazni znakostrophe po Brownu. Ovaj članak istražuje upotrebu prilagođene VBA funkcije za rješavanje ove anomalije.
Ovaj članak pretpostavlja da čitatelj ima prikazanu vrpcu za razvojne programere i da je upoznat s VBA uređivačem. Ako ne, molimo proguglajte “Excel Developer Tab” ili “Excel Code Window”.
Izraz "baza podataka" ovdje se odnosi na baze podataka "industrijske snage" poput SQL Server i Oracle.
Može se pronaći primjer radne bilježnice korištene u ovoj vježbi ovdje.
SQL niz
Uključivanje apostrophes (ili jednostruki navodnici) unutar SQL naredbe daje sljedeću pogrešku koju vraća upravitelj baze podataka (za ime O'Dowd u ovom slučaju):
Potreban je lik za bijeg, budući da je dvostruki apostrofe umjesto jednog jedinog. Stoga je O”Dowd prihvatljiv za bazu podataka. O'Dowd nije.
Funkcija
Tamo gdje bi polja za snimanje mogla zamislivo sadržavati apostrophe, prilagođena funkcija može se izgraditi da se aktivira prije ažuriranja, zamjenjujući jednostruke navodnike dvostrukim.
- Otvorite novu radnu knjigu;
- Imenujte prvi list "Ažuriraj" i dovršite ga na sljedeći način, koristeći naziv vlastite baze podataka itd. Ova polja će se koristiti za izgradnju niza veze za SQL Server.
- Otvorite prozor koda i umetnite modul. Koristite stavke izbornika >Alati >Reference za referencu ADO librarih godina.
Kopirajte kod ispod u modul. Ovo se povezuje s bazom podataka.
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 = Listovi ("Ažuriraj").Raspon ("B2") strDBase = Listovi ("Ažuriraj").Raspon ("B3") strUser = Listovi ("Ažuriraj").Raspon ("B4") strPWD = Listovi (" Update").Range("B5") If strPWD > "" Then strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows provjera autentičnosti End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
- Dodajte funkciju u modul:
Funkcija fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 Za n = 0 Do 100 x = InStr(x + 2, strWord, "'") 'Pronađi poziciju apostrophes 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 fUkloniApostrophe = strFunkcija završetka riječi
- Ignorirajte funkciju.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos će ne uspjeti; obratite pažnju na tri apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Koristite funkciju
Sub UseFunction() Poziv ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Umetni u tblCrewMember (LastName) vrijednosti ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos će uspjeti i pojaviti se u podatkovnoj tablici kao O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Ispunite Nadopune radni list kako slijedi, starting u ćeliji A8:
- Dodijelite gumbe makronaredbama IgnoreFunction i UseFunction respektivno
Rezultati
Okvir s porukom prikazat će rezultate; nijedna baza podataka nije fizički ažurirana u ovoj vježbi, ali, ako to želite učiniti, provjerite jesu li nazivi polja kompatibilni s vašom bazom podataka i dodajte upotrebu VBA naredbe conndb.execute(strSQL)
Oporavak od pada programa Excel
Excel je sklon rušenju kada vašem računalu ponestane resursa. Tijekom pisanja ove vježbe, Excelova proračunska tablica, koja još nije spremljena, zamrznula se. Prozor koda bio je djelomično osjetljiv, dopuštajući zatvaranje radne knjige u cjelini. Kako se ispostavilo, radna knjiga ponovno se normalno otvorila s dovršenim sadržajem i kodom. Imao sam temporary i izvorne datoteke su (prečesto) oštećene, posao bi se morao ponoviti u nedostatku alata za rješavanje xlx šteta. To je u ovom slučaju bilo od malog značaja, ali bi moglo biti potencijalna katastrofa za veće radne bilježnice.
Uvod za autora:
Felix Hooker je stručnjak za oporavak podataka u DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući oporaviti se rar i softverski proizvodi za oporavak sql-a. Za više informacija posjetite www.datanumen.com


