SQL Server koristi parove pojedinačnih navodnika za identifikaciju start i kraj niza. Umetanje 'Mrs Brown's Boys' u tabelu baze podataka neće uspjeti jer tri jednostruka navodnika podrazumijevaju dva niza, od kojih je jedan nepotpun. Za apostrophe after Brown. Ovaj članak istražuje upotrebu prilagođene VBA funkcije za rješavanje ove anomalije.
Ovaj članak pretpostavlja da čitač ima prikazanu traku programera i da je upoznat sa VBA Editorom. Ako ne, molimo Google "Excel Developer Tab" ili "Excel Code Window".
Termin "baza podataka" ovdje se odnosi na baze podataka "industrijske snage" kao što su SQL Server i Oracle.
Primjer radne sveske korištene u ovoj vježbi možete pronaći OVDJE.
SQL string
Uključivanje apostrophes (ili jednostruki navodniki) unutar SQL izraza pružaju sljedeću grešku vraćenu od upravitelja baze podataka (za ime O'Dowd u ovom slučaju):
Potreban je escape karakter, budući da je dvostruki apostrofe umjesto jednog. Dakle, O”Dowd je prihvatljiv za bazu podataka. O'Dowd nije.
Funkcija
Gdje bi polja snimanja mogla sadržavati apostrophe, prilagođena funkcija može biti napravljena da se aktivira prije ažuriranja, zamjenjujući jednostruki navodnik dvostrukim.
- Otvorite novu radnu svesku;
- Imenujte prvi list “Ažuriraj” i dovršite ga na sljedeći način, koristeći vlastito ime baze podataka, itd. Ova polja će se koristiti za izgradnju niza veze za SQL Server.
- Otvorite prozor koda i umetnite modul. Koristite stavke menija >Alati >Reference da biste referencirali ADO librargodine.
Kopirajte kod ispod u modul. Ovo se povezuje sa bazom podataka.
Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase() Ako je connDB.State = 1 Onda connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, StPWD As strServer = Sheets("Update").Range("B2") strDBase = Sheets("Update").Range("B3") strUser = Sheets("Ažuriraj").Range("B4") strPWD = Sheets(" Update").Range("B5") Ako je strPWD > "" Tada strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Ostalo strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows autentikacija Kraj Ako connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Izlaz 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 Ako je x = 0 Onda izađi za Ako je x > 0 Tada strWord = Lijevo(strWord, x - 1) & Chr(39) & Chr(39) & Desno(strWord, Len(strWord) - (x)) Kraj ako je sljedeće n fRemoveApostrophe = strWord End Funkcija
- Zanemarite funkciju.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Ubaci u tblCrewMember (Prezime) vrijednosti ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos će ne uspjeti; zapazite tri apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Koristite funkciju
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Ubaci u tblCrewMember (Prezime) vrijednosti ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos će uspjeti i pojaviti se u tabeli podataka kao O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Popunite Ažuriranje radni list kako slijedi, starting u ćeliji A8:
- Dodijelite dugmad makroima IgnoreFunction i UseFunction respektivno
Rezultati
Okvir za poruku će pokazati rezultate; nijedna baza podataka nije fizički ažurirana u ovoj vježbi, ali, ako to želite, uvjerite se da su imena polja kompatibilna s vašom bazom podataka i dodajte korištenje VBA naredbe conndb.execute(strSQL)
Oporavak od Excel pada
Excel je sklon rušenju kada vašem računaru ponestane resursa. Tokom pisanja ove vježbe, Excelova tabela, koja još nije sačuvana, se zamrznula. Prozor koda je djelomično reagirao, omogućavajući zatvaranje radne knjige u cjelini. Kako se ispostavilo, radna sveska se ponovo normalno otvorila sa kompletnim sadržajem i kodom. Imao temporary i izvorni fajlovi su (prečesto) oštećeni, posao bi se morao ponoviti da nije bilo alata za rješavanje xlsx šteta. To je u ovom slučaju bilo od malog značaja, ali bi moglo biti potencijalna katastrofa za veće radne sveske.
Uvod za autora:
Felix Hooker je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući oporavi se rar i sql softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com


