VBA kirish kodidan SQL so'rovini chaqirish. VBA-da SQL so'rovlar qatorini yaratish. VBA-da INSERT, UPDATE, DELETE ma'lumotlar bazasiga so'rovlar
Kirish"myQuery" deb nomlangan so'rovlar yaratuvchisi yordamida ishlab chiqilgan so'rovni saqladi. Ma'lumotlar bazasi tizimga ODBC ulanishi orqali ulangan. Barcha makrolar kiritilgan.
Excel orqali ma'lumotlar bazasiga ulanish uchun ADODB ulanishiga ega
Xiralashtirish ADODB.Connection As ADODB.Recordset sifatida Dim rs con = Yangi ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Oching "MyDatabase.accdb" End with
Odatda siz davom etasiz va shunchaki SQL-ni yozasiz, bu juda yaxshi va keyin shunga o'xshash narsani bajaring
Dim sqlQuery as String sqlQuery = "SELECT * FROM myTable" rs = Yangi ADODB.Recordset rs.Open sqlQuery, con, ...
Lekin men kirish ma'lumotlar bazasida saqlangan so'rovga kirishni xohlayman. Xo'sh, men ulangan ma'lumotlar bazasida saqlangan so'rovni qanday chaqirishim mumkin.
Allaqachon sinab ko'rgan
- con.Execute("EXEC myQuery") lekin u menga myQuery topilmasligini aytdi.
- rs. "myQuery" ni oching, con lekin bu yaroqsiz va undan SELECT /etc iboralarini talab qiladi
5 ta javob
6
O'ylaymanki, siz buni saqlangan protsedura deb hisoblashingiz mumkin.
Agar biz Dim sqlQuery As String dan oldin boshlasak
Xira cmdni yangi ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()
Shundan so'ng rekordlar to'plamini ishga tushiring.
1
Siz deyarli u erda edingiz:
Dim con As ADODB.Connection Dim rs As ADODB.Recordset o'rnating con = Yangi ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End with con.Execute "Mening so'rovim"
Execni chetga qoldiring.
Siz parametrlarni ham qo'shishingiz mumkin, bu biroz eskirgan, ammo yordam berishi kerak:
0
Bu qandaydir hack, lekin siz buni talab qilishingiz mumkin. Ya'ni, sql qatorini quyidagi bilan almashtiring:
SqlQuery = "QueryName FROM dan * TANGLA;"
Ushbu dasturni ishga tushirishdan oldin ma'lumotlar bazasi mavjudligiga ishonch hosil qilishingiz kerak Ma'lumotlarga kirish qutqarildi, ya'ni. Ctrl+S tugmalarini bosing (Access-da so'rovni bajarish uchun bu etarli emas).
0
Men Access-da allaqachon saqlangan yangilash so'rovini ishga tushirishga muvaffaq bo'ldim:
Ulanish."Mening_yangilash_so'rovim_allaqachon_saqlangan_kirish", adExecuteNoRecords, adCmdStoredProc-ni bajaring.
Men Access ma'lumotlar bazasida va ijro bayonotida so'rov nomidagi bo'shliqlarni pastki chiziq bilan almashtirmagunimcha, bu menga xatoliklarni keltirib chiqardi.
0
Bu mavzu yaratilganiga ancha vaqt bo'ldi. Agar hamma narsani to'g'ri tushunsam, foydali narsalarni qo'shishim mumkin. Men OP ta'riflayotgan narsaga nom berdim, bu DAO yoki ADOBD orqali VBA-da ishga tushirish uchun ACCDB-da saqlangan so'rovdan SQL-dan foydalanish jarayonidir. Men unga "ob'ekt mulki provayderi" nomini berdim, hatto eslatmalarimdagi OPP qisqartmasi va ob'ekt nomi uchun prefiks/suffiks bilan.
G'oya shundan iboratki, ACCDB-dagi mavjud ob'ekt (odatda so'rov) VBA-da ishlatilishi kerak bo'lgan xususiyatni (odatda SQL) ochib beradi. Buning uchun so'rovlardan SQLni so'rib olish uchun funktsiyani birlashtirdim; pastga qarang. Ogohlantirish: Kechirasiz, lekin bularning barchasi DAO-da, men ADODB-dan ko'p foydalanmayman. Umid qilamanki, siz hali ham bu fikrlarni foydali deb topasiz.
Men hatto ushbu OPP so'rovlaridan kelib chiqadigan SQL-da almashtiriladigan parametrlarni ishlatish/qo'shish usulini ishlab chiqishgacha bordim. Keyin VBA-da SQL-ni ishlatishdan oldin almashtirishni amalga oshirish uchun VBA.Replace() dan foydalanaman.
ACCDB da SQL so'roviga DAO ob'ekt yo'li quyidagicha:
MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL
Men almashtiriladigan parametrlardan foydalanaman, nimani o'zgartirish kerakligini baholash va parametr uchun haqiqiy ma'lumotlar bazasida mavjud bo'lmagan noodatiy nom tanlash. Ko'pincha, men faqat maydon yoki jadval nomlarini yoki WHERE va HAVING band ifodalarini almashtirdim. Shuning uchun men ularni "(ReplaceMe00000001)" kabi narsalarni chaqiraman va keyin ishni bajarish uchun Replace() funktsiyasidan foydalanaman ...
SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter") ...
va keyin VBA-da sqlText-dan foydalaning. Mana ishlaydigan misol:
"Myxtalty" () Dim stsenorect simkrestressice satr chizig'i sifatida "Myxtlentext" satri sifatida "MyexlTextext112 / 31/11" "" Somedorsomphing12 / 2017 " . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Keyin SQL-dan foydalaning. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName as String) Asim.App Dim Dim ilovasi Asim.Daf DDAf Asim.Access. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText as String Set app = Access.Application Set db = app.CurrentDb Set qdefs = db.QueryDefs Set qdef = qdefs(oppName) oppGetSqlText Function.S Enqde
Excel-dan Access MakeTable-da so'rovni ishga tushiring
Menda Excel fayli bor, uni avtomatlashtirishim kerak. Foydalanuvchi Excel hisobotini ochganda, undan ma'lumotlarni yangilash so'raladi. Agar ular ha desalar, men so'rovni bajarishim kerak ...
JS ActiveX ADO'dan MS Access 2013 da ko'rish so'rovi orqali VBA funktsiyasini bajaring
JS ActiveX ADO dan MS Access 2013 da ko'rish so'rovi orqali VBA makrosini qanday bajarish mumkin? VBA funktsiyasi olish uchun mo‘ljallangan joriy foydalanuvchi, tizimga kirgan: Jamoat deklaratsiyasi...
Excel dan Access db da "funksiya" ni o'z ichiga olgan saqlangan so'rovni bajaring
Men Excel vba'dan kirish ma'lumotlar bazasida saqlangan so'rovni ishga tushirishga harakat qilyapman. Agar men uni kirish ma'lumotlar bazasida ochsam va ishga tushirsam, so'rov yaxshi ishlaydi, lekin uni moduldan ishga tushirishda xatolik yuz beradi...
MS Access - VBA-da saqlangan so'rovni nomi bo'yicha bajarish
MS Access 2007 da saqlangan so'rovni VBA da qanday bajarish mumkin? Men SQL-ni VBA-ga nusxalash va joylashtirishni xohlamayman. Men so'rov nomini bajarishni afzal ko'raman. Bu ishlamaydi... VBA so'rovni topa olmadi....
VBA kodida ms-access-da so'rovni qanday bajarish mumkin?
Ma'lumotlar bazasidagi yozuvlarni qaytarish uchun so'rovni qanday bajarishim mumkin ms-access ma'lumotlari VBA kodidan foydalanasizmi?
Exceldan kirish so'rovini ishga tushiring va unga parametrlarni o'tkazing
Excel VBA kodi yoki makrosidan MS access db-da so'rovni qanday bajarish kerak. MS-Access so'rovi Exceldan o'tkazilishi kerak bo'lgan ba'zi parametrlarni qabul qiladi. rahmat
Access 2010 VBA dan Excel ish kitobini boshqarish
Menda quyidagi postga juda o'xshash vaziyat bor: vba orqali grafik yaratish uchun excel 2010 ga kirishni so'rash Mening holimda men jadvalni eksport qilyapman, lekin faylga ko'proq narsani qilishni xohlayman...
Access VBA-dan SQL Server Pass-Through so'rovini bajaring
Menda Access 2007 da saqlangan UPDATE orqali o'tish so'rovi bor. So'rovni ikki marta bosganimda u muvaffaqiyatli bajariladi. Ushbu so'rovni VBA'dan qanday qilib bajarishim mumkin? Men .. istayman...
Excel-dan VBA orqali Access-ga katta ma'lumotlar to'plamini import qilish
Menda Exceldan Access-ga import qilishim kerak bo'lgan katta ma'lumotlar to'plami bor (~ 800 ming qator). Biroq, men 90% kabi ma'lum bir ustun qiymatiga ega qatorlarni e'tiborsiz qoldira olaman ...
Excel vba ichida MDX so'rovi bormi?
Excel VBA ichida MDX so'rovini bajarishning bir usuli bormi? Men buni xuddi SQL bilan bo'lgani kabi ADO orqali ham amalga oshirish mumkin deb o'yladim (ha, men bilaman, SQL MDX dan farq qiladi - bu ko'p marta ...
Access myQuery so'rovlar yaratuvchisi yordamida ishlab chiqilgan so'rovni saqladi. Ma'lumotlar bazasi tizimga ODBC ulanishi orqali ulangan. Barcha makrolar kiritilgan.
Excel ma'lumotlar bazasiga ulanish uchun ADODB ulanishini o'rnatdi
Xiralashtirish ADODB.Connection As ADODB.Recordset sifatida Dim rs con = Yangi ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Oching "MyDatabase.accdb" End with
Odatda siz shunchaki ajoyib ishlaydigan SQL-ni yozasiz va keyin shunga o'xshash narsani qilasiz
Dim sqlQuery as String sqlQuery = "SELECT * FROM myTable" rs = Yangi ADODB.Recordset rs.Open sqlQuery, con, ...
Lekin men kirish ma'lumotlar bazasida saqlangan so'rovga kirishni xohlayman. Xo'sh, men ulangan ma'lumotlar bazasida saqlangan so'rovni qanday chaqirishim mumkin.
Men allaqachon sinab ko'rdim
- con.Execute("EXEC myQuery"), lekin bu menga myQuery topilmasligini aytdi.
- rs.Open "myQuery" lekin u yaroqsiz va undan SELECT/etc iboralarini talab qiladi
5 ta javob
O'ylaymanki, siz buni saqlangan protsedura deb o'ylashingiz mumkin.
Agar biz Dim sqlQuery As String dan oldin boshlasak
Xira cmdni yangi ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()
Shundan so'ng yozuvlar to'plami bilan ishingizni oling.
Siz deyarli u erda edingiz
Dim con As ADODB.Connection Dim rs As ADODB.Recordset o'rnating con = Yangi ADODB.Connection with con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End with con.Execute "Mening so'rovim"
Exec-ni qoldiring.
Siz parametrlarni ham qo'shishingiz mumkin, bu biroz eskirgan, ammo yordam berishi kerak: Excel ma'lumotlari va ehtimol makro bilan Access ma'lumotlar bazasidagi 2 maydonni yangilang
Men Access-da allaqachon saqlangan yangilash so'rovini ishga tushirishga muvaffaq bo'ldim:
Ulanish."Mening_yangilash_so'rovim_allaqachon_saqlangan_kirish", adExecuteNoRecords, adCmdStoredProc-ni bajaring.
Men Access ma'lumotlar bazasida va ijro bayonotida so'rov nomidagi bo'shliqlarni pastki chiziq bilan almashtirmagunimcha, bu menga xatoliklarni keltirib chiqardi.
Bu qandaydir xakerlik ishi, lekin siz so'rov yuborishingiz mumkin. Ya'ni, SQL qatorini quyidagi bilan almashtiring:
SqlQuery = "QueryName FROM dan * TANGLA;"
Boshlashdan oldin, Access ma'lumotlar bazasi saqlanganligiga ishonch hosil qilishingiz kerak, ya'ni. Ctrl + S tugmalarini bosing (Access-da so'rovni bajarish uchun bu etarli emas).
Bu mavzu yaratilganiga ancha vaqt bo'ldi. Agar men to'g'ri tushunsam, foydali narsalarni qo'shishim mumkin. Men OP ta'riflayotgan narsaga nom berdim: bu DAO yoki ADOBD orqali VBA da ishga tushirish uchun ACCDB da saqlangan so'rovdan SQL dan foydalanish jarayoni. Men uni "Ob'ekt mulki provayderi" deb nomladim, hatto eslatmalarimdagi OPP qisqartmasi va ob'ekt nomi prefiksi/suffiksi uchun ham.
G'oya shundan iboratki, ACCDB-dagi mavjud ob'ekt (odatda so'rov) VBA-da ishlatilishi kerak bo'lgan xususiyatni (odatda SQL) ochib beradi. Buning uchun so'rovlardan SQLni so'rib olish uchun funktsiyani birlashtirdim; Pastga qarang. Ogohlantirish: Kechirasiz, lekin bularning barchasi DAO-da, men ADODB-dan ko'p foydalanmayman. Umid qilamanki, siz hali ham g'oyalarni foydali deb topasiz.
Men hatto ushbu OPP so'rovlaridan kelib chiqadigan SQL-da almashtiriladigan parametrlarni ishlatish/qo'shish usulini ishlab chiqishgacha bordim. Keyin VBA-da SQL-ni ishlatishdan oldin almashtirishni amalga oshirish uchun VBA.Replace() dan foydalanaman.
ACCDB da SQL so'roviga DAO ob'ekt yo'li quyidagicha:
MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL
Men almashtirilishi mumkin bo'lgan parametrlardan foydalanaman, nima o'zgarishi kerakligini baholash va haqiqiy ma'lumotlar bazasida mavjud bo'lmagan parametr uchun noodatiy nom tanlash. Ko'pincha, men faqat maydon yoki jadval nomlari yoki WHERE va HAVING band ifodalarini almashtirdim. Shuning uchun men ularni "(ReplaceMe00000001)" kabi narsalarni chaqiraman va keyin ishni bajarish uchun Replace() funktsiyasidan foydalanaman ...
SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter")
Va keyin VBA-da sqlText-dan foydalaning. Mana ishlaydigan misol:
"Myxtalty" () Dim stsenorect simkrestressice satr chizig'i sifatida "Myxtlentext" satri sifatida "MyexlTextext112 / 31/11" "" Somedorsomphing12 / 2017 " . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Keyin SQL-dan foydalaning. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName as String) Asim.App Dim Dim ilovasi Asim.Daf DDAf Asim.Access. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText as String Set app = Access.Application Set db = app.CurrentDb Set qdefs = db.QueryDefs Set qdef = qdefs(oppName) oppGetSqlText Function.S Enqde
Ushbu dars bag'ishlangan SQL so'rovlari ma'lumotlar bazasiga VBA kirish. Biz VBA-da ma'lumotlar bazasiga INSERT, UPDATE, DELETE so'rovlari qanday amalga oshirilishini ko'rib chiqamiz, shuningdek, SELECT so'rovidan ma'lum qiymatni qanday olishni o'rganamiz.
Dasturlashtirganlar VBA kirish va tayanch bilan ishlashda SQL ma'lumotlari serverlar ko'pincha ma'lumotlar bazasiga SQL so'rovini yuborish, INSERT, UPDATE yoki oddiy SQL SELECT so'rovi kabi oddiy va zarur vazifaga duch kelishadi. Va biz yangi dasturchilar bo'lganimiz sababli, biz ham buni qila olishimiz kerak, shuning uchun bugun biz buni qilamiz.
Biz allaqachon ma'lumotlarni olish mavzusiga to'xtalib o'tdik SQL server, bu erda ular ushbu ma'lumotni olish uchun VBA-da kod yozishgan, masalan, MSSql 2008-dan matnli faylga ma'lumotlarni yuklash haqidagi maqolada yoki Access-dan Word va Excel shablonlariga ma'lumotlarni yuklash materialida bir oz tegib ketgan, ammo u yoki bu tarzda biz unga yuzaki qaradik va bugun men bu haqda biroz batafsilroq gapirishni taklif qilaman.
Eslatma! Quyida keltirilgan barcha misollar Access 2003 ADP loyihasi va MSSql 2008 maʼlumotlar bazasi yordamida koʻrib chiqiladi.Agar siz ADP loyihasi nima ekanligini bilmasangiz, biz buni Access ADP loyihasini qanday yaratish va sozlash boʻyicha materialda koʻrib chiqdik.
Misollar uchun manba ma'lumotlari
Aytaylik, bizda yil oylarining raqamlari va nomlari bo'lgan test_jadval mavjud (so'rovlar quyidagi buyruq yordamida bajariladi). Menejment studiyasi)
JADVAL TUZISH .( NULL EMAS, (50) NULL) ON GO
Yuqorida aytib o'tganimdek, biz MS SQL 2008 bilan ishlash uchun sozlangan ADP loyihasidan foydalanamiz, unda men test shaklini yaratdim va imzo bilan boshlash tugmachasini qo'shdim. "Yugurish", bu bizning kodimizni sinab ko'rishimiz kerak, ya'ni. Biz barcha kodni voqea ishlovchisiga yozamiz " Tugmachani bosish».
VBA-da INSERT, UPDATE, DELETE ma'lumotlar bazasiga so'rovlar
Ko'p vaqtni kechiktirmaslik uchun, keling, darhol boshlaylik, deylik, test jadvalimizga qator qo'shishimiz kerak ( kod izohlandi)/
Private Sub start_Click() "So'rovlar qatorini saqlash uchun o'zgaruvchini e'lon qilish Dim sql_query String sifatida "Unga kerakli so'rovni yozing sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "Iyun")" "Bajarish u DoCmd.RunSQL sql_query End Sub
Bunday holda, so'rov joriy ma'lumotlar bazasi ulanish parametrlari yordamida bajariladi. Ma'lumotlar qo'shilgan yoki qo'shilmaganligini tekshirishimiz mumkin.
Ko'rib turganingizdek, ma'lumotlar kiritilgan.
Bitta qatorni o'chirish uchun biz quyidagi kodni yozamiz.
Private Sub start_Click() "Dim sql_query so'rovlar qatorini String sifatida saqlash uchun o'zgaruvchini e'lon qiling "Unga o'chirish so'rovini yozing sql_query = "DELETE test_table WHERE id = 6" "Uni ishga tushiring DoCmd.RunSQL sql_query End
Agar tekshirsak, buni ko'ramiz kerakli qator chap.
Ma'lumotlarni yangilash uchun sql_query o'zgaruvchisiga yangilash so'rovini yozing, umid qilamanki, ma'no aniq.
VBA-da ma'lumotlar bazasiga so'rovni tanlang
Bu erda narsalar boshqa SQL konstruktsiyalariga qaraganda biroz qiziqroq.
Birinchidan, aytaylik, biz jadvaldan barcha ma'lumotlarni olishimiz kerak va, masalan, biz uni qayta ishlaymiz va xabarda ko'rsatamiz va siz, albatta, boshqa maqsadlarda ham foydalanishingiz mumkin, buning uchun biz quyidagilarni yozamiz. kod
Private Sub start_Click() "O'zgaruvchilarni e'lon qilish "Ma'lumotlar bazasidan yozuvlar to'plami uchun Dim RS As ADODB.Recordset "So'rov qatori Dim sql_query As String "Xabarda yakuniy ma'lumotlarni ko'rsatish uchun satr Dim str As String "uchun yangi ob'ekt yaratish. yozuvlar to'plami RS = Yangi ADODB .Recordset "So'rovlar qatori sql_query = "Tanlash identifikatori, test_jadvalidan nom_mon" "So'rovni joriy loyiha ulanish sozlamalari yordamida ishga tushiring RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Yozuvlar bo'ylab aylanish. (RS.EOF) "Xabarni ko'rsatish uchun o'zgaruvchini to'ldiring str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "keyingi yozuvga o'ting RS.MoveNext Wend "msgbox str End Sub xabarini chiqaring
Bu erda biz yozuvlar to'plamimizdagi barcha qiymatlarni takrorlash uchun VBA Access halqalaridan foydalanmoqdamiz.
Ammo ko'pincha yozuvlar to'plamidan barcha qiymatlarni emas, balki faqat bittasini, masalan, oyning kodi bo'yicha nomini olish kerak bo'ladi. Buning uchun loopdan foydalanish qandaydir qimmatga tushadi, shuning uchun biz faqat bitta qiymatni qaytaradigan so'rov yozishimiz va unga kirishimiz mumkin, masalan, 5-kod yordamida oy nomini olamiz.
Private Sub start_Click() "O'zgaruvchilarni e'lon qilish" Ma'lumotlar bazasidan yozuvlar to'plami uchun Dim RS As ADODB.Recordset "So'rovlar qatori Dim sql_query As String "Yakuniy qiymatni ko'rsatish uchun string Dim str String sifatida "Yozuvlar to'plami uchun yangi ob'ekt yaratish RS = Yangi ADODB.Recordset "Query line sql_query = "Tanlang name_mon FROM test_table WHERE id = 5" "So'rovni joriy loyiha ulanish sozlamalari yordamida ishga tushiring RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Qiymatimizni oling str = RS. Maydonlar(0) msgbox str End Sub
Umumjahonlik uchun bu erda biz allaqachon hujayra nomi bilan emas, balki uning indeksi bilan murojaat qildik, ya'ni. 0 va bu eng birinchi qiymat Yozuvlar to'plami, oxirida biz qiymatga ega bo'ldik "may".
Ko'rib turganingizdek, hamma narsa juda oddiy. Agar siz tez-tez ma'lumotlar bazasidan ma'lum bir qiymat olishingiz kerak bo'lsa ( oxirgi misolda bo'lgani kabi), keyin men barcha kodni alohida funktsiyaga chiqarishni tavsiya qilaman (VBA Access 2003 da funktsiyani qanday yozish kerak) bitta kirish parametri bilan, masalan, oy kodi ( misolimizni ko'rib chiqsak) va oddiygina, agar bu qiymatni ko'rsatish kerak bo'lsa, kerakli parametr bilan bizga kerak bo'lgan funktsiyani chaqiring va tamom, bu bilan biz VBA kodini sezilarli darajada kamaytiramiz va dasturimizni idrok etishni yaxshilaymiz.
Bugun hammasi shu. Omad!
Access dasturli ravishda SQL so'rovlari qatorlarini, shuningdek, mos keladigan shakllar, hisobotlar va boshqalar, funktsiyalar parametrlari va boshqalar uchun qiymatlar sifatida xizmat qiluvchi satrlarni yaratishga imkon beradi. SQL sintaksisi. Shu bilan birga, shuni yodda tutishimiz kerakki, bunday qatorga kiritilgan konstantalar ham SQL qoidalariga muvofiq formatlanishi kerak, xususan:
Agar bu buzilgan bo'lsa, quyidagi ta'sirlar mumkin:
Quyida har bir bo'limda qachon ishlab chiqarilishi kerak bo'lgan SQL qatoriga misol keltirilgan dasturiy ta'minot yaratish, va keyin uni yaratuvchi VBA kodi. Quyida juda foydali tavsiya mavjud.
1. Raqamlardan foydalanish
JADVALDAN * TANLANGAN QAYERDA ((((Jadval .Miqdor)= 12
.197
));
VBA v1
Dim q As Single q = 12
.197
strSQL = "SELECT * " _ & "Jadvaldan" _ & "QAYERDA (((Jadval.Miqdor)=" & q & "));"
VBA v2
Dim q As String q = "12,197" strSQL = "SELECT * " _ & "FROM Jadval" _ & "WHERE (((Table.Quanty)=" & Str (q) & "));"
Eslatma:
Funktsiya GetDecimalSeparator() string sifatida GetDecimalSeparator = Format ( 0 #, "." ) End Function Bundan tashqari, ba'zi standart Access amallari bu holatda ishlamasligi mumkinligini unutmang.
2. Satrlardan foydalanish
TANLOV * JADVALDAN QAYERDA ((((Jadval .Name)="Hammasi" ));
VBA v1
Dim q As String q = "Hammasi" strSQL = "SELECT * " _ & "FROM Jadval" _ & "WHERE ((((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
VBA v2
Dim q As String q = "Hammasi" strSQL = "SELECT * " _ & "FROM Jadval" _ & "WHERE (((Jadval.Miqdor)="" & DoubleApostrophe(q) & "" ));"
Eslatma:
Misol:
namuna olish sharti:
a"a" ning SQL:
WHERE maydoni = a""a""VBA:
strWhere = " WHERE maydoni = """ & "a""""a"" & """
"
Misol:
namuna olish sharti:
a"a" ning SQL:
WHERE maydoni = a "a" "s"VBA:
strWhere = " WHERE maydoni =" & "a""a""s" & ""
"
Umumiy funksiya Replace97(StrMain As String , StrFind As String , StrZam as String ) As String On Xato GoTo err Dim pos Kadar uzoq Agar StrFind = "" Keyin GoTo err If StrMain = "" Keyin Replace97 = StrZam: Funktsiyadan chiqish InStr( 1
, StrMain, StrFind) = 0
pos = InStr( 1
, StrMain, StrFind) StrMain = o'rta (StrMain, 1
,pos- 1
) & StrZam & mid (StrMain, pos + Len(StrFind), Len(StrMain)) Loop Replace97 = StrMain Chiqish funktsiyasi xato: Replace97 = StrMain End Function
3. Sanalardan foydalanish
JADVALDAN * TANLOVCHI ((((Jadval .TimeOpen)=#) 3
/31
/2003
11
:17
:19
#));
VBA
Dim q As Sana q = Hozir strSQL = "SELECT * " _ & "FROM Jadval" _ & "WHERE (((Table.TimeOpen)=#" & Format (q, "mm\/dd\/yy hh\:mm" \:ss" ) & "#)))"
Eslatma:
O'z ichiga olgan bunday qatorni tuzgan SQL buyrug'i, va uni bajarish uchun yuborish xatolikka olib kelishi mumkin. Bunday holda, ushbu satrni disk raskadrovka oynasiga chop eting va unga ko'z bilan qarang. Ehtimol, xato darhol ko'zingizni ushlaydi. Agar u ishlamasa, so'rovlar dizaynerida yangi so'rov yarating, SQL rejimiga o'ting, so'rov matnini u erga kiriting va uni ishga tushiring. Agar xato bo'lsa, u aniqroq ko'rsatiladi.