SQL Server përdor çifte thonjëzash të vetme për të identifikuar start dhe fundi i një vargu. Futja e 'Mrs Brown's Boys' në një tabelë të bazës së të dhënave do të dështojë pasi tre thonjëzat e vetme nënkuptojnë dy vargje, njëra prej të cilave është e paplotë. Kërkohet një karakter ikje për apostrofe pas Brown. Ky artikull eksploron përdorimin e një funksioni të personalizuar VBA për të zgjidhur këtë anomali.
Ky artikull supozon se lexuesi ka të shfaqur shiritin e Zhvilluesit dhe është i njohur me Redaktuesin VBA. Nëse jo, ju lutemi Google "Excel Developer Tab" ose "Excel Code Window".
Termi "bazë e të dhënave" këtu zbatohet për bazat e të dhënave "me fuqi industriale" si SQL Server Oracle.
Mund të gjendet një shembull i fletores së punës të përdorur në këtë ushtrim këtu.
Vargu SQL
Përfshirja e apostrophes (ose thonjëza të vetme) brenda një deklarate SQL ofron gabimin e mëposhtëm të kthyer nga menaxheri i bazës së të dhënave (për emrin O'Dowd në këtë rast):
Duhet një personazh arratisjeje, duke qenë një ap i dyfishtëostrofe në vend të një të vetme. Kështu, O”Dowd është i pranueshëm për bazën e të dhënave. O'Dowd nuk është.
Funksioni
Aty ku fushat e kapjes mund të përmbajnë një apostrophe, një funksion i personalizuar mund të ndërtohet për të ndezur përpara përditësimit, duke zëvendësuar kuotën e vetme me një të dyfishtë.
- Hapni një libër të ri pune;
- Emërtoni fletën e parë “Përditëso” dhe plotësoni si më poshtë, duke përdorur emrin tuaj të bazës së të dhënave, etj. Këto fusha do të përdoren për të ndërtuar një varg lidhjeje me SQL Server.
- Hapni dritaren e kodit dhe futni një modul. Përdorni artikujt e menysë > Mjetet > Referencat për të referuar ADO librarvitet
Kopjoni kodin më poshtë në modul. Kjo lidhet me bazën e të dhënave.
Lidhja publike si ADODB e re.Lidhja Publike rs si ADODB e re.Set rekord strSQL publike si string publik strKriteret si varg Sub ConnectDatabase() Nëse connDB.State = 1 Pastaj lidhe.Mbyll në gabim ShkoTo ErrConnect Dim strDSerring,strWR,strW,str. strServer = Sheets("Update").Range("B2") strDBase = Sheets("Update").Range("B3") strUser = Sheets("Update").Range("B4") strPWD = Sheets(" Përditëso").Range("B5") Nëse strPWD > "" Pastaj strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Koha e lidhjes=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Autentifikimi i Windows Fundi If connDB.ConnectionTimeout = 30 connDB.Hap strConnectionstring Dil Sub ErrConnect: Msgion Err.Descriptionr
- Shtoni funksionin në modul:
Funksioni fRemoveApostrophe(strWord si varg) Dim n si numër i plotë Dim x si numër i plotë x = 0 Për n = 0 Deri në 100 x = InStr(x + 2, strWord, "'") 'Gjeni pozicionin e apostrophes Nëse x = 0 Atëherë Dilni për Nëse x > 0 Pastaj strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) Fundi Nëse Next n fRemoveApostrophe = strWord Fund Funksioni
- Injoroni funksionin.
Nën IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Fut në tblCrewMember (LastName) vlerat ('" & strCriteria & "')" MsgBox strSQL & ". dështojnë; vini re tre apostRophes." Debug.Print strSQL 'connDB.Execute (strSQL) Fund Sub
- Përdorni funksionin
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Fut në tblCrewMember (LastName) vlerat ('" & strCriteria & "')" MsgBox strSQL & ". Kjo hyrje SQL do të ketë sukses dhe do të shfaqet në tabelën e të dhënave si O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) Fund Sub
- Complete Përditësimet fletën e punës si më poshtë, starting në qeli A8:
- Caktoni butonat në makro InjorojeFunksionin Funksioni i Përdorimit përkatësisht
Rezultatet
Një kuti mesazhi do të tregojë rezultatet; asnjë bazë të dhënash nuk është përditësuar fizikisht në këtë ushtrim, por, nëse dëshironi ta bëni këtë, sigurohuni që emrat e fushave të jenë në përputhje me bazën tuaj të të dhënave dhe shtoni, përdorni deklaratën VBA conndb.execute(strSQL)
Rikuperimi nga dështimet e Excel
Excel është i prirur të prishet kur kompjuteri juaj po i mbarojnë burimet. Gjatë shkrimit të këtij ushtrimi, tabela e Excel-it, ende e paruajtur, ngriu. Dritarja e Kodit ishte pjesërisht e përgjegjshme, duke lejuar mbylljen e librit të punës në tërësi. Siç doli, libri i punës u rihap normalisht me përmbajtjen dhe kodin të përfunduar. Kishte tempinrary dhe skedarët burimor janë dëmtuar (shumë shpesh), puna do të duhej të ribëhej në mungesë të një mjeti për të zgjidhur dëmtimi xlsx. Kishte pak rëndësi në këtë rast, por mund të ishte një fatkeqësi e mundshme për librat më të mëdhenj të punës.
Hyrje e autorit:
Felix Hooker është një ekspert i rikuperimit të të dhënave në DataNumen, Inc., e cila është lider botëror në teknologjitë e rikuperimit të të dhënave, duke përfshirë shërohem rar dhe produkte softuerike për rikuperimin sql. Për më shumë informacion vizitoni www.datanumen.com


