SQL Server satrning boshi va oxirini aniqlash uchun bitta qo'shtirnoq juftlaridan foydalanadi. Ma'lumotlar bazasi jadvaliga 'Mrs Brown's Boys' ni kiritish muvaffaqiyatsiz bo'ladi, chunki uchta bitta qo'shtirnoq ikkita satrni bildiradi, ulardan biri to'liq emas. Browndan keyingi apostrof uchun qochish belgisi talab qilinadi. Ushbu maqolada ushbu anomaliyani hal qilish uchun moslashtirilgan VBA funksiyasidan foydalanish ko'rib chiqiladi.
Ushbu maqolada o'quvchi dasturchi tasmasi ko'rsatilgan va VBA muharriri bilan tanish deb taxmin qilinadi. Agar yo'q bo'lsa, Google "Excel Developer Tab" yoki "Excel Code Window".
Bu erda "ma'lumotlar bazasi" atamasi "sanoat kuchli" ma'lumotlar bazalariga tegishli SQL Server va Oracle.
Ushbu mashqda foydalanilgan ish kitobining namunasini topish mumkin Bu yerga.
SQL String
SQL operatoriga apostroflar (yoki bitta qo'shtirnoqlar) qo'shilishi ma'lumotlar bazasi menejeridan qaytarilgan quyidagi xatoni keltirib chiqaradi (bu holda O'Dowd nomi uchun):
Bitta emas, balki qo'shaloq apostrofdan iborat qochish belgisi kerak. Shunday qilib, O”Dowd ma'lumotlar bazasi uchun qabul qilinadi, O'Dowd esa qabul qilinmaydi.
Funktsiya
Agar yozib olish maydonlarida apostrof bo'lishi mumkin bo'lsa, yangilanishdan oldin ishga tushirish uchun maxsus funksiya yaratilishi mumkin, bu esa bitta iqtibosni qo'shaloq iqtibos bilan almashtirishga imkon beradi.
- Yangi ish kitobini oching;
- Birinchi varaqni “Yangilash” deb nomlang va oʻz maʼlumotlar bazasi nomidan foydalanib, quyidagi tarzda toʻldiring. Bu maydonlar ulanish qatorini yaratish uchun ishlatiladi. SQL Server.
- Kod oynasini oching va modulni joylashtiring. Menyu elementlaridan foydalaning >Asboblar >ADO kutubxonalariga havolalar.
Quyidagi kodni modulga nusxalang. Bu ma'lumotlar bazasiga ulanadi.
Public connDB Yangi ADODB.Connection Public rs As New ADODB.Recordset Public strSQL as String Public strcriteria as String Sub ConnectDatabase() Agar connDB.State = 1 bo‘lsa, keyin connDB.Close Xatoga o‘tish ErrConnect Dim strServer, strDBase, strWD String, strServer = Sheets("Update").Range("B2") strDBase = Sheets("Update").Range("B3") strUser = Sheets("Update").Range("B4") strPWD = Sheets(" Update").Range("B5") Agar strPWD > "" bo'lsa, strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Ma'lumotlar bazasi=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Ulanish vaqti=30;" Aks holda strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows autentifikatsiyasi tugaydi, agar connDB.ConnectionTimeout = 30 bo'lsa connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err. Subscription End
- Funktsiyani modulga qo'shing:
fRemoveApostrophe(strWord As String) funksiyasi Dim n As Integer Dim x As Integer x = 0 n = 0 dan 100 gacha bo'lganlar uchun x = InStr(x + 2, strWord, "'") 'Apostroflarning o'rnini toping Agar x = 0 bo'lsa, unda chiqish Agar x > 0 bo'lsa, unda strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End funksiyasi
- Funktsiyaga e'tibor bermang.
Sub IgnoreFunction() ni chaqirish ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "tblCrewMember (LastName) qiymatlarini kiritish ('" & strCriteria & "')" MsgBox strSQL & ". Ushbu SQL yozuvi muvaffaqiyatsiz bo'ladi; uchta apostrofga e'tibor bering." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Funktsiyadan foydalaning
Sub UseFunction() ConnectDatabase ni chaqirish strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "tblCrewMember (LastName) qiymatlarini kiriting ('" & strCriteria & "')" MsgBox strSQL & ". Ushbu SQL yozuvi muvaffaqiyatli bo'ladi va ma'lumotlar jadvalida O'Dowd sifatida ko'rinadi." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
- Tugallan Yangilash ishchi varaq quyidagicha, katakchadan boshlab A8:
- Tugmalarni makroslarga belgilang IgnoreFunction va Foydalanish funktsiyasi mos ravishda
Natijalar
Xabar oynasi natijalarni ko'rsatadi; Ushbu mashqda hech qanday ma'lumotlar bazasi jismonan yangilanmaydi, lekin agar xohlasangiz, maydon nomlari ma'lumotlar bazasiga mos kelishiga ishonch hosil qiling va VBA bayonotini qo'shing conndb.execute(strSQL)
Excel xatosidan tiklash
Kompyuteringiz resurslari tugab qolganda Excel ishdan chiqishga moyil. Ushbu mashqni yozish paytida, hali saqlanmagan Excel elektron jadvali qotib qoldi. Kod oynasi qisman javob berib, ish daftarini butunlay yopishga imkon berdi. Ma'lum bo'lishicha, ish daftarchasi tarkib va kod to'liq bo'lgan holda normal ravishda qayta ochildi. Agar vaqtinchalik va manba fayllari (juda tez-tez) shikastlangan bo'lsa, muammoni hal qilish uchun vosita bo'lmasa, ish qayta bajarilishi kerak bo'lar edi. xlsx zarar. Bu holda bu unchalik ahamiyatga ega emas edi, lekin kattaroq ish kitoblari uchun potentsial falokat bo'lishi mumkin edi.
Muallif kirish:
Feliks Xuker ma'lumotlarni qayta tiklash bo'yicha mutaxassis DataNumenMa'lumotlarni qayta tiklash texnologiyalari bo'yicha jahon yetakchisi bo'lgan , Inc rar faylini tiklash va sql-ni tiklash dasturiy mahsulotlar. Qo'shimcha ma'lumot olish uchun tashrif buyuring www.datanumen.com


