Jak uciec z cytowanych ciągów instrukcji SQL używanych w bazie danych za pośrednictwem Excel VBA

Podziel się teraz:

SQL Server używa par pojedynczych cudzysłowów do identyfikacji start i koniec łańcucha. Wstawienie „Mrs Brown's Boys” do tabeli bazy danych nie powiedzie się, ponieważ trzy pojedyncze cudzysłowy oznaczają dwa ciągi, z których jeden jest niekompletny. Znak ucieczki jest wymagany dla apostrophe po Brown. W tym artykule omówiono użycie dostosowanej funkcji VBA do rozwiązania tej anomalii.

W tym artykule założono, że czytelnik ma wyświetloną wstążkę programisty i zna edytor VBA. Jeśli nie, wybierz Google „Excel Developer Tab” lub „Excel Code Window”.

Termin „baza danych” odnosi się tutaj do baz danych „wytrzymałe na przemysł”, takich jak SQL Server i Oracle.

Można znaleźć przykład skoroszytu używanego w tym ćwiczeniu w tym miejscu.

Ciąg SQL

Włączenie apostrophes (lub pojedyncze cudzysłowy) wewnątrz instrukcji SQL zawiera następujący błąd zwrócony przez menedżera bazy danych (w tym przypadku dla nazwy O'Dowd):Błąd zwrócony z menedżera bazy danych

Potrzebny jest znak ucieczki, będący podwójnym apostrophe zamiast jednego. Zatem O ”Dowd jest akceptowalny w bazie danych. O'Dowd nie jest.

Funkcja

Tam, gdzie pola przechwytywania mogą zawierać apostrophe, można zbudować niestandardową funkcję uruchamiającą się przed aktualizacją, zastępując pojedynczy cytat podwójnym.

  1. Otwórz nowy skoroszyt;
  1. Nazwij pierwszy arkusz „Aktualizuj” i wypełnij w następujący sposób, używając własnej nazwy bazy danych itp. Te pola zostaną użyte do zbudowania parametrów połączenia SQL Server.Nazwij pierwszy arkusz „Aktualizuj” i wypełnij w ten sposób
  2. Otwórz okno kodu i wstaw moduł. Użyj pozycji menu> Narzędzia> Referencje, aby odwołać się do ADO librarlat.Otwórz okno kodu i wstaw moduł

Skopiuj poniższy kod do modułu. To łączy się z bazą danych.

Public connDB jako nowy ADODB.Connection Public rs jako nowy 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 = Arkusze ("Aktualizacja"). Zakres ("B2") strDBase = Arkusze ("Aktualizacja"). Zakres ("B3") strUser = Arkusze ("Aktualizacja"). Zakres ("B4") strPWD = Arkusze (" 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 = "Uwierzytelnianie & strDBase 'Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
  1. Dodaj funkcję do modułu:
Funkcja fRemoveApostrophe (strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr (x + 2, strWord, "'")' Znajdź pozycję 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 fRemoveApostrophe = strWord End Function
  1. Zignoruj ​​funkcję.
Sub IgnoreFunction () Wywołaj ConnectDatabase strCriteria = Arkusze ("Update"). Range ("B10") strSQL = "Wstaw do wartości tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Ten wpis SQL porażka; zwróć uwagę na trzy apostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Użyj funkcji
Sub UseFunction () Wywołaj ConnectDatabase strCriteria = Arkusze („Aktualizuj”). Zakres („B15”) strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Wstaw do wartości tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Ten wpis SQL powiedzie się i pojawi się w pliku danych jako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Ukończ Aktualizacja arkusz roboczy w następujący sposób, starting w komórce A8:Wypełnij arkusz aktualizacji
  1. Przypisz przyciski do makr Ignoruj ​​funkcję i Użyj funkcji odpowiednio

Efekty

Okno komunikatu pokaże wyniki; żadna baza danych nie jest fizycznie aktualizowana w tym ćwiczeniu, ale jeśli chcesz to zrobić, upewnij się, że nazwy pól są zgodne z Twoją bazą danych i dodaj, użyj instrukcji VBA conndb.execute (strSQL)

Odzyskiwanie po awarii programu Excel

Program Excel jest podatny na awarie, gdy na komputerze wyczerpują się zasoby. Podczas pisania tego ćwiczenia arkusz kalkulacyjny programu Excel, jeszcze niezapisany, zawiesił się. Okno kodu było częściowo responsywne, umożliwiając zamknięcie skoroszytu jako całości. Jak się okazało, skoroszyt ponownie otworzył się normalnie z kompletną zawartością i kodem. Miałem temporary i pliki źródłowe były (zbyt często) uszkodzone, praca musiałaby zostać wykonana ponownie w przypadku braku narzędzia do rozwiązania xlsx uszkodzenia. W tym przypadku miało to niewielkie znaczenie, ale mogło być potencjalną katastrofą dla większych skoroszytów.

Wprowadzenie autora:

Felix Hooker jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym wyzdrowieć rar i oprogramowanie do odzyskiwania sql. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.