Kako izbjeći nizove u navodnicima za SQL naredbu koja se koristi u bazi podataka putem Excel VBA

Podijeli sada:

SQL Server koristi parove jednostrukih navodnika za identifikaciju početka i kraja niza. Umetanje 'Mrs Brown's Boys' u tabelu baze podataka neće uspjeti jer tri jednostruka navodnika impliciraju dva niza, od kojih je jedan nepotpun. Za apostrof nakon Browna potreban je escape znak. 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 apostrofa (ili jednostrukih navodnika) unutar SQL naredbe dovodi do sljedeće greške koju vraća upravitelj baze podataka (u ovom slučaju za ime O'Dowd):Greška vraćena iz upravitelja baze podataka

Potreban je escape znak, koji bi trebao biti dvostruki apostrof umjesto jednostrukog. Stoga je O”Dowd prihvatljiv za bazu podataka. O'Dowd nije.

Funkcija

Tamo gdje polja za snimanje mogu sadržavati apostrof, može se izgraditi prilagođena funkcija koja se aktivira prije ažuriranja, zamjenjujući jednostruki navodnik dvostrukim.

  1. Otvorite novu radnu svesku;
  1. 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.Imenujte prvi list "Ažuriraj" i dovršite ga ovako
  2. Otvorite prozor koda i umetnite modul. Koristite stavke menija > Alati > Reference za referenciranje ADO biblioteka.Otvorite prozor koda i umetnite modul

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
  1. Dodajte funkciju u modul:
Funkcija fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Pronađi poziciju apostrofa Ako x = 0 Then Exit For Ako x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Zanemarite funkciju.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Umetni u tblCrewMember(LastName) vrijednosti ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos neće uspjeti; obratite pažnju na tri apostrofa." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Koristite funkciju
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Umetni u tblCrewMember(LastName) vrijednosti ('" & strCriteria & "')" MsgBox strSQL & ". Ovaj SQL unos će biti uspješan i pojavit će se u tabeli podataka kao O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Popunite Ažuriranje radni list na sljedeći način, počevši od ćelije A8:Popunite radni list za ažuriranje
  1. 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 padu sistema kada računaru ponestane resursa. Tokom pisanja ove vježbe, Excelova tabela, koja još nije bila sačuvana, se zamrznula. Prozor koda je bio djelimično responzivan, što je omogućilo zatvaranje cijele radne knjige. Ispostavilo se da se radna knjiga normalno ponovo otvorila sa kompletnim sadržajem i kodom. Da su privremene i izvorne datoteke (prečesto) bile oštećene, rad bi morao biti ponovo urađen u nedostatku alata za rješavanje problema. 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 oporaviti rar i sql softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.