SQL Server używa par pojedynczych cudzysłowów do identyfikacji początku i końca ciągu. 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. Po słowie „Brown” wymagany jest znak ucieczki dla apostrofu. W tym artykule opisano zastosowanie niestandardowej funkcji VBA w celu 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
Użycie apostrofów (lub pojedynczych cudzysłowów) wewnątrz instrukcji SQL powoduje zwrócenie przez menedżera bazy danych następującego błędu (w tym przypadku dla nazwy O'Dowd):
Wymagany jest znak ucieczki, podwójny apostrof zamiast pojedynczego. Zatem O'Dowd jest akceptowalny dla bazy danych. O'Dowd nie.
Funkcja
W przypadku pól przechwytywania, które potencjalnie mogłyby zawierać apostrof, można utworzyć funkcję niestandardową, która zostanie uruchomiona przed aktualizacją, zastępując pojedynczy cudzysłów 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 > Odwołania, aby odwołać się do bibliotek ADO.
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 Dla n = 0 Do 100 x = InStr(x + 2, strWord, "'") 'Znajdź pozycję apostrofów Jeśli x = 0 Wtedy Wyjdź Dla Jeśli x > 0 Wtedy strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) Koniec Jeśli Następny n fRemoveApostrophe = strWord Koniec funkcji
- Zignoruj funkcję.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Wstaw do tblCrewMember (LastName) wartości ('" & strCriteria & "')" MsgBox strSQL & ". Ten wpis SQL nie powiedzie się; zwróć uwagę na trzy apostrofy." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Użyj funkcji
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Wstaw do tblCrewMember (LastName) wartości ('" & strCriteria & "')" MsgBox strSQL & ". Ten wpis SQL zostanie wykonany pomyślnie i pojawi się w tabeli danych jako O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Ukończ Aktualizacja arkusz kalkulacyjny w następujący sposób, zaczynając od komórki 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
Excel jest podatny na awarie, gdy komputerowi kończą się zasoby. Podczas pisania tego ćwiczenia arkusz kalkulacyjny Excela, który jeszcze nie został zapisany, zawiesił się. Okno kodu było częściowo responsywne, co pozwalało na zamknięcie całego skoroszytu. Jak się okazało, skoroszyt otworzył się ponownie, a zawartość i kod były kompletne. Gdyby pliki tymczasowe i źródłowe uległy (zbyt częstemu) uszkodzeniu, pracę trzeba by było powtórzyć, gdyby nie istniało narzędzie do rozwiązywania problemów. 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 odzyskać rar i oprogramowanie do odzyskiwania sql. po więcej informacji odwiedź www.datanumen.com


