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):
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.
- Otwórz nowy skoroszyt;
- 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.
- Otwórz okno kodu i wstaw moduł. Użyj pozycji menu> Narzędzia> Referencje, aby odwołać się do ADO librarlat.
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
- 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
- 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
- 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
- Ukończ Aktualizacja arkusz roboczy w następujący sposób, starting w komórce A8:
- 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


