SQL Server използва двойки единични кавички, за да идентифицира start и край на низ. Вмъкването на „Момичета на госпожа Браун“ в таблица на база данни няма да успее, тъй като трите единични кавички предполагат два низа, единият от които е непълен. За ap е необходим бягащ знакostРофе след Браун. Тази статия изследва използването на персонализирана VBA функция за разрешаване на тази аномалия.
Тази статия предполага, че на читателя е показана лентата за програмисти и е запознат с редактора на VBA. Ако не, моля Google „Раздел за програмисти на Excel“ или „Прозорец на кода на Excel“.
Терминът „база данни“ тук се отнася за бази данни с „индустриална мощност“ като SQL Server и Oracle.
Може да се намери пример за работната книга, използвана в това упражнение тук.
SQL низът
Включване на апostrophes (или единични кавички) в SQL оператор предоставя следната грешка, върната от мениджъра на базата данни (за името O'Dowd в този случай):
Необходим е бягащ герой, който е двоен апostrophe вместо единичен. По този начин O ”Dowd е приемлив за базата данни. О'Дауд не е така.
Функцията
Където полетата за улавяне биха могли да съдържат apostrophe, може да се изгради персонализирана функция, която да се задейства преди актуализация, замествайки единичната кавичка с двойна.
- Отворете нова работна книга;
- Наименувайте първия лист „Актуализиране“ и попълнете както следва, като използвате собственото си име на база данни и т.н. Тези полета ще бъдат използвани за изграждане на низ за връзка към SQL Server.
- Отворете прозореца с код и поставете модул. Използвайте елементите от менюто> Инструменти> Референции, за да се позовавате на ADO librarте години.
Копирайте кода по-долу в модула. Това се свързва с базата данни.
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, "'")' Намиране на позиция на apostrophes Ако x = 0 Тогава излезте за Ако x> 0 Тогава strWord = Наляво (strWord, x - 1) & Chr (39) & Chr (39) & Надясно (strWord, Len (strWord) - (x)) End If Next n fRemoveApostrophe = strWord функция за край
- Игнорирайте функцията.
Sub IgnoreFunction () Call CallDatabase strCriteria = Sheets ("Update"). Range ("B10") strSQL = "Вмъкване в tblCrewMember (LastName) стойности ('" & strCriteria & "')" MsgBox strSQL & ". Този SQL запис ще неуспех; отбележете трите апostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Използвайте функцията
Sub UseFunction () Call CallDatabase strCriteria = Sheets ("Update"). Range ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Вмъкване в tblCrewMember (LastName) стойности ('" & strCriteria & "')" MsgBox strSQL & ". Този SQL запис ще успее и ще се появи в таблицата с данни като O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Попълнете Актуализация работен лист, както следва, starтинг в клетката A8:
- Задайте бутоните на макроси IgnoreFunction и UseFunction повтарящо се
Резултатите
Полето за съобщение ще покаже резултатите; никоя база данни не се актуализира физически в това упражнение, но ако искате да направите това, уверете се, че имената на полетата са съвместими с вашата база данни и добавете използвайте VBA израза conndb.execute (strSQL)
Възстановяване от сривове на Excel
Excel е склонен да се срине, когато компютърът ви свършва с ресурси. По време на писането на това упражнение електронната таблица на Excel, все още незапазена, замръзна. Прозорецът на кода реагира частично, позволявайки затварянето на работната книга като цяло. Както се оказа, работната книга се отвори отново нормално с пълното съдържание и код. Имах темпотоrary и изходните файлове са били (твърде често) повредени, работата би трябвало да бъде преработена при липса на инструмент за разрешаване xlsx щети. В случая това нямаше голямо значение, но може да бъде потенциално бедствие за по-големи работни книги.
Въведение на автора:
Феликс Хукър е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително възстановяване rar и sql софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com


