SQL Server използва двойки единични кавички, за да обозначи началото и края на низ. Вмъкването на „Mrs Brown's Boys“ в таблица на базата данни ще се окаже неуспешно, тъй като трите единични кавички предполагат два низа, единият от които е непълен. За апострофа след Brown е необходим escape-символ. Тази статия разглежда използването на персонализирана VBA функция за разрешаване на тази аномалия.
Тази статия предполага, че на читателя е показана лентата за програмисти и е запознат с редактора на VBA. Ако не, моля Google „Раздел за програмисти на Excel“ или „Прозорец на кода на Excel“.
Терминът „база данни“ тук се отнася за бази данни с „индустриална мощност“ като SQL Server и Оракъл.
Може да се намери пример за работната книга, използвана в това упражнение тук.
SQL низът
Включването на апострофи (или единични кавички) в SQL израз води до следната грешка, върната от мениджъра на базата данни (в този случай за името O'Dowd):
Необходим е escape-символ, представляващ двоен апостроф, а не единичен. Следователно, O”Dowd е приемлив за базата данни. O'Dowd не е.
Функцията
Където полетата за заснемане евентуално биха могли да съдържат апостроф, може да се създаде персонализирана функция, която да се задейства преди актуализация, замествайки единичната кавичка с двойна.
- Отворете нова работна книга;
- Наименувайте първия лист „Актуализиране“ и попълнете както следва, като използвате собственото си име на база данни и т.н. Тези полета ще бъдат използвани за изграждане на низ за връзка към SQL Server.
- Отворете прозореца с код и поставете модул. Използвайте елементите от менюто > Инструменти > Препратки, за да се обърнете към ADO библиотеки.
Копирайте кода по-долу в модула. Това се свързва с базата данни.
Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase () If connDB.State = 1 Тогава connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD, strPser strServer = Листове ("Актуализиране"). Обхват ("B2") strDBase = Листове ("Актуализация"). Обхват ("B3") strUser = Листове ("Актуализация"). Обхват ("B4") strPWD = Листове (" Актуализация "). Обхват (" B5 ") Ако strPWD>" "Тогава strConnectionstring =" DRIVER = {SQL Server}; Сървър = "& strServer &"; База данни = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Време за изчакване на връзката = 30; "Друго strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = да; DATABASE = "& strDBase 'Удостоверяване на Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub Sub
- Добавете функцията в модула:
Функция fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Намиране на позицията на апострофите 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
- Игнорирайте функцията.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Вмъкване в tblCrewMember (LastName) стойности ('" & strCriteria & "')" MsgBox strSQL & ". Този SQL запис ще бъде неуспешен; обърнете внимание на трите апострофа." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Използвайте функцията
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Вмъкване в таблицата с данни на член на екипа (LastName) стойности ('" & strCriteria & "')" MsgBox strSQL & ". Този SQL запис ще бъде изпълнен успешно и ще се появи в таблицата с данни като O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Попълнете Актуализация работен лист, както следва, започвайки от клетката A8:
- Задайте бутоните на макроси IgnoreFunction и UseFunction повтарящо се
Резултатите
Полето за съобщение ще покаже резултатите; никоя база данни не се актуализира физически в това упражнение, но ако искате да направите това, уверете се, че имената на полетата са съвместими с вашата база данни и добавете използвайте VBA израза conndb.execute (strSQL)
Възстановяване от сривове на Excel
Excel е склонен да се срива, когато ресурсите на компютъра ви се изчерпват. По време на писането на това упражнение, електронната таблица на Excel, която все още не беше запазена, замръзна. Прозорецът с кода беше частично отзивчив, което позволи затварянето на работната книга като цяло. Оказа се, че работната книга се отвори отново нормално с пълно зареждане на съдържанието и кода. Ако временните и изходните файлове бяха (твърде често) повредени, работата щеше да се наложи да се преработи при липса на инструмент за разрешаване на проблема. xlsx щети. В случая това нямаше голямо значение, но може да бъде потенциално бедствие за по-големи работни книги.
Въведение на автора:
Феликс Хукър е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително възстановяване на rar файл и sql софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com


