Kā izvairīties no citētajām virknēm SQL priekšrakstam, ko izmanto datu bāzē, izmantojot Excel VBA

Kopīgot tūlīt:

SQL Server izmanto vienpēdiņu pārus, lai norādītu virknes sākumu un beigas. Ievietojot “Mrs Brown's Boys” datubāzes tabulā, neizdosies, jo trīs vienpēdiņas nozīmē divas virknes, no kurām viena ir nepilnīga. Apostrofam aiz vārda “Brown” ir nepieciešama atsoļa rakstzīme. Šajā rakstā ir aplūkota pielāgotas VBA funkcijas izmantošana, lai novērstu šo anomāliju.

Šajā rakstā tiek pieņemts, ka lasītājam ir parādīta izstrādātāja lente un viņš ir iepazinies ar VBA redaktoru. Ja nē, lūdzu, Google “Excel izstrādātāja cilne” vai “Excel koda logs”.

Termins “datu bāze” šeit attiecas uz “rūpnieciski spēcīgām” datu bāzēm, piemēram, SQL Server un Orākuls.

Var atrast šajā vingrinājumā izmantotās darbgrāmatas piemēru šeit.

SQL virkne

Apostrofu (vai vienpēdiņu) iekļaušana SQL priekšrakstā rada šādu kļūdu, ko atgriež datubāzes pārvaldnieks (šajā gadījumā vārdam O'Dowd):No datu bāzes pārvaldnieka tika atgriezta kļūda

Ir nepieciešama atsoļa rakstzīme — dubulta apostrofa, nevis viena. Tādējādi O”Dowd ir pieņemams datubāzei. O'Dowd nav.

Funkcija

Ja uztveršanas laukos varētu būt apostrofs, var izveidot pielāgotu funkciju, kas aktivizētos pirms atjaunināšanas, aizstājot vienkāršās pēdiņas ar dubultām pēdiņām.

  1. Atveriet jaunu darbgrāmatu;
  1. Nosauciet pirmo lapu “Atjaunināt” un aizpildiet šādi, izmantojot savu datu bāzes nosaukumu utt. Šie lauki tiks izmantoti, lai izveidotu savienojuma virkni SQL Server.Nosauciet pirmo lapu "Atjaunināt" un aizpildiet kā šo
  2. Atveriet koda logu un ievietojiet moduli. Izmantojiet izvēlnes vienumus >Rīki >Atsauces, lai atsauktos uz ADO bibliotēkām.Atveriet koda logu un ievietojiet moduli

Kopējiet zemāk esošo kodu modulī. Tas izveido savienojumu ar datu bāzi.

Publiskais connDB kā jauns ADODB.Connection Public rs kā jauns ADODB.Recordset publiskais strSQL kā virkne Public strCriteria kā virkne Sub ConnectDatabase () Ja connDB.State = 1 Tad connDB.Close On kļūda GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Izklājlapas ("Atjaunināt"). Diapazons ("B2") strDBase = Izklājlapas ("Atjaunināt"). Diapazons ("B3") strUser = Izklājlapas ("Atjaunināt"). Diapazons ("B4") strPWD = Izklājlapas (" Atjaunināt "). Diapazons (" B5 ") Ja strPWD>" "Tad strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Savienojuma taimauts = 30; "Cits strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = jā; DATABASE = "& strDBase 'Windows autentifikācijas beigas Ja connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub Sub
  1. Pievienojiet funkciju modulim:
Funkcija fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 No n = 0 Līdz 100 x = InStr(x + 2, strWord, "'") 'Atrast apostrofu pozīciju Ja x = 0 Tad Iziet Ja x > 0 Tad strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) Beigas Ja Nākamais n fRemoveApostrophe = strWord Beigas Funkcija
  1. Ignorējiet funkciju.
Sub IgnoreFunction() Izsaukt ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Ievietot tblCrewMember (LastName) vērtībās ('" & strCriteria & "')" MsgBox strSQL & ". Šis SQL ieraksts neizdosies; ņemiet vērā trīs apostrofus." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Izmantojiet funkciju
Sub UseFunction() Izsaukt ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Ievietot tblCrewMember (LastName) vērtības ('" un strCriteria & "')" MsgBox strSQL & ". Šis SQL ieraksts būs veiksmīgs un parādīsies datu tabulā kā O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Pabeigt Atjaunināt darblapā šādi, sākot ar šūnu A8:Aizpildiet atjaunināšanas darblapu
  1. Piešķiriet pogas makro Ignorēt funkciju un UseFunction repektīvi

Rezultāti

Ziņojumu lodziņā tiks rādīti rezultāti; Šajā uzdevumā fiziski netiek atjaunināta neviena datu bāze, taču, ja vēlaties to izdarīt, pārliecinieties, vai lauku nosaukumi ir saderīgi ar jūsu datu bāzi, un pievienojiet VBA priekšrakstu conndb.execute (strSQL)

Atgūšanās no programmas Excel avarē

Programma Excel mēdz avarēt, ja datoram pietrūkst resursu. Šī vingrinājuma rakstīšanas laikā Excel izklājlapa, kas vēl nebija saglabāta, iesaldēja. Koda logs bija daļēji atsaucīgs, ļaujot aizvērt visu darbgrāmatu. Izrādījās, ka darbgrāmata tika atvērta normāli ar pabeigtu saturu un kodu. Ja pagaidu un avota faili būtu (pārāk bieži) bojāti, darbs būtu jāpārstrādā, ja nebūtu rīka, kas to novērstu. xlsx bojājumi. Šajā gadījumā tam bija maza nozīme, taču tā varētu būt potenciāla katastrofa lielākām darbgrāmatām.

Autora ievads:

Fēlikss Hukers ir datu atkopšanas eksperts DataNumen, Inc., kas ir pasaules līderis datu atkopšanas tehnoloģiju, tostarp atgūt rar failu un SQL atkopšanas programmatūras produkti. Lai iegūtu vairāk informācijas, apmeklējiet vietni www.datanumen. Ar

Kopīgot tūlīt:

Komentāri ir slēgti.