مبانی کار با دستورات SQL در اکسس
یکی از قابلیت های مهمی که در دل نرم افزار اکسس نهفته است وجود دستورات SQL در اکسس است.
البته نحوه کار با عبارات و دستورات SQL و اینکه به چه نحو باید از این دستورات در محیط اکسس و نیز در خصوص کاربرد این دستورات در تلفیق با کدهای برنامه نویسی VBA موضوعی است که می تواند همیشه برای کاربران اکسس مورد سواال باشد .
امروز می خواهیم در همین زمینه با هم صحبت کنیم .
می خواهیم بطور اصولی و با زبانی ساده به بررسی مسائل مختلف در زمینه کار با دستورات SQL در اکسس بپردازیم .
البته ما از دستورات SQL در چند جای مختلف می توانیم استفاده کنیم .
یکی از این موارد در محیط های کوئری هاست .
در واقع اصل کوئری هایی که ما در محیط اکسس ایجاد می کنیم بر مبنای کدهای SQL ای است که خود نرم افزار اکسل کار ایجاد انها را برای ما انجام می دهد .
برنامه نویسی و کدهای VBA یکی دیگر از جاهایی است که ما می توانیم از کدهای SQL استفاده کنیم .
فقط نکته ای که باید به آن اشاره کنیم این است که در محیط کوئری ها می توانیم از دستورات SQL بطور خالص و مستقیم استفاده کنیم .
اما در محیط VBA اینگونه نیست .
یعنی ما در محیط برنامه نویسی VBA مجاز به استفاده از دستورات SQL بصورت مستقیم نیستیم .
بلکه باید با رعایت یکسری از قواعد کدهای SQL را کدهای VBA تلفیق و ترکیب کنیم تا در نهایت به نتیجه نهایی مورد نظر خود برسیم .
ما در خصوص نحوه کار با دستورات SQL در محیط کوئری های اکسس قبلا بطور مفصل در مطلب جداگانه ای آموزش های لازم را ارائه داده ایم .
اما امروز و در این مطلب می خواهیم در خصوص کار با دستورات SQL در محیط برنامه نویسی VBA با هم صحبت کنیم .
اینکه چگونه و به چه نحو می توانیم هر دوی این کدها و دستورات را در کنار هم داشته باشیم و از آنها استفاده کنیم.
پس از شما دعوت می کنم که ما را تا انتهای این مطلب همراهی کنید .
نحوه کار با دستورات SQL در اکسس
قبل از اینکه به سراغ کدهای SQL برویم اول نگاهی به نحوه درج متن ها در کدهای VBA بکنیم و ببینیم که چگونه باید از متن ها در ساختار کدهای VBA استفاده کنیم .
طبق یک قاعده و اصل کلی تمامی ساختارهای متنی در داخل کدهای VBA باید در داخل دو جفت کوتیشن قرار بگیرند .
بعنوان مثال به کد های زیر نگاه کنید .
()Sub test Dim i As String "به برنامه کاربردی اگسس خوش آمدید"=i MsgBox i End Sub
در این کدها اول ما یک متغیر تعریف کرده ایم .
در خط بعد یک متن را در داخل این متغیر خود ذخیره کرده ایم .
تکته مهم در اینجا این است که حتما باید متن ما در داخل دو دابل کوتیشن قرار گیرد در غیر اینصورت اجرای این کدها در این حالت ما را با خطا مواجه می کند .
در خط بعد هم توسط یک کادر پیام یا همان Msgbox متن مورد نظر خود را به کاربر نمایش می دهیم .
در اینجا متنی که ما استفاده کردیم یک متن کوتاه بود.
اما به کد زیر نگاه کنید .
Sub test() Dim i As String "به برنامه کاربردی اکسس خوش آمدید. این برنامه برای ثبت اطلاعات کارگزینی شما طراحی شده است .لطفا در وارد کردن اطلاعات خواسته شده نهایت دقت را داشته باشید "=i MsgBox i End Sub
همانطور که مشاهده می کنید طول این متن ما بیش از حد طولانی می باشد .
به گونه این که می تواند از صفحه کاری ما خارج شود .
به نحوی که برای دسترسی و مشاهده همه بخش های این کد ما مجبور میشویم که از صفحه کاری خود مدام به سمت چپ و راست اسکرول کنیم.
اما برای حل این مشکل یک راهکار وجود دارد .
به این ترتیب که می توانیم کدهای خود را در محل های مورد نظر خود بشکنیم و ادامه کدها را در خط بعدی درج کنیم .
حالا کدهای بالا را بصورت زیر بازنویسی می کنیم .
()Private Sub Command1_Click Dim i As String _& "به برنامه کاربردی اکسس خوش آمدید."=i _& "این برنامه برای ثبت اطلاعات کارگزینی شما طراحی شده است" "لطفا در وارد کردن اطلاعات خواسته شده نهایت دقت را داشته باشید ." MsgBox i End Sub
ما در اینجا با استفاده از دو کاراکتر & و زیرخط توانستیم کدهای خود را به چند خط تبدیل کنیم .
اما بیایید همین کدها را اجرا کنیم .
تصویر زیر نتیجه اجرای این کدها می باشد .
در اینجا با یک مشکل جدید مواجه می شویم .
هر چند که ما کدهای خود را در محیط برنامه نویسی به چند خط مجزا تبدیل کردیم اما در خروجی کماکان خطوط متن ما پشت سر هم به نمایش در می آیند .
پس متوجه شدیم که روش که در مرحله قبل استفاده کردیم فقط در سطح کدها و در محیط کد نویسی می تواند کدهای ما را به چند خط تقسیم کند .
اما در خروجی ما تاثیری بر کدها ندارد و متن ها پشت سر هم نمایش داده می شوند .
اگر بخواهیم متن های ما در خروجی نیز در چند خط مستقل نمایش داده شوند باید از روش زیر استفاده کنیم .
()Private Sub Command1_Click Dim i As String _ & vbCrLf &"به برنامه اکسس خوش آمدید."=i _ & vbCrLf & "این برنامه برای ثبت اطلاعات کارگزینی شما طراحی شده است" "لطفا در ورود اطلاعات دقت نمایید ." MsgBox i, vbInformation End Sub
در اینجا ما از ثابت vbcrlf استفاده کردیم ..
این متغیر خطوط متن ما را در خروجی در چند خط مجزا از هم نمایش خواهد شد .
تصویر زیر خروجی کار را به ما نمایش می دهد .
اما اجازه بدهید که که یک مورد دیگر را هم با هم بررسی کنیم و آن هم این است که چگونه می توانیم از متغیرها در ساختار متن خود استفاده کنیم .
بعنوان مثال چگونه می توان تاریخ جاری سیستم را در قالب یک کادر پیغام به کاربر نمایش دهیم .
یک روش این است که تاریخ را بصورت دستی در متن خود وارد کنیم .
به عنوان مثال به کدهای زیر نگاه کنید .
()Private Sub Command13_Click Dim i As String "امروز ۷/۱۳/۲۰۲۰ و هم اکنون ساعت ۵ است " =i MsgBox i End Sub
تا به اینجا که مشکلی نیست .
اما مشکل جایی بروز می کند که کاربر این کادر پیغام ما را در روزی به غیر از تاریخ نمایش داده شده و یا در ساعتی به غیر از ساعت ۵ این پیغام را مشاهده کند .
مسلما قرار نیست که ما هر روز و هر ساعت بخواهیم این پیغام خود را بروز رسانی کنیم .
پس چاره چیست ؟
چاره کار بسیار راحت است .
به کدهای زیر نگاه کنید .
()Private Sub Command13_Click "است" & (()DatePart("h", Now & "هم اکنون ساعت " & Date & "امروز " MsgBox End Sub
در اینجا ما از قابلیت مربوط به توابع داخلی در اکسس استفاده کردیم .
همانگونه که می بینید با استفاده از کاراکتر & می توانیم متن های مورد نظر خود را با توابع و یا متغیرها ترکیب کنیم .
در خصوص آشنایی با انواع توابع در نرم افزار اکسس می توانید از محصول ما در سایت استفاده کنید .
7 ویژگی منحصر به فرد نرم افزار اکسس
حالا که با نحوه کار با متن ها در کدهای VBA آشنا شدیم می توانیم به سراغ کار با دستورات SQl در محیط برنامه نویسی برویم .
نحوه کار با دستورات SQL در اکسس
در یک قاعده کلی باید گفت که ما در محیط کد نویسی SQL نمی توانیم بصورت مستقیم از کدهای SQL استفاده کنیم .
بلکه باید کدهای SQL را در قالب متن در آوریم و سپس از آنها در کدهای خود استفاده کنیم .
اجازه دهید با هم یک پروژه تعریف کنیم و کار را بر مبنای آن پیش ببریم .
برای این کار جدول زیر را در نظر بگیرید .
با توجه به اطلاعات جدول بالا می خواهیم از یکسری از دستورات SQL برای کارهای خود استفاده کنیم .
برای شروع کار فرض کنید می خواهیم کتابهای مربوط به علی شریعتی را انتخاب کنیم .
برای این منظور از کدهای زیر استفاده می کنیم .
Dim sql As String " "علی شریعتی" sql = "SELECT * FROM tbl_books WHERE writer
نکته مهم در مورد این کدها این است که ما عبارت شرطی خود را باید حتما در داخل دو دابل کوتیشن قرار دهیم .
اما برای سهولت بهتر می توانیم از یک متغیر کمک بگیریم .
به این صورت که عبارت شرطی خود را در داخل یک متغیر ذخیره کرده و از این متغیر در ساختار کدهای خود استفاده می کنیم .
به کدهای زیر نگاه کنید .
Dim sql As String Dim strwriter As String "علی شریعتی "=strwriter """" & sql = "SELECT * FROM tblOrder WHERE OrderStatus = """ & strwriter
اما در ساختار کدهای بالا استفاده از تعداد زیاد دابل کوتیشن ها می تواند تبدیل به یک معضل شود .
در اینجا می توانیم یک راه حل جایگزین داشته باشیم .
بعنوان مثال می توانیم کدهای بالا را بصورت زیر باز نویسی کنیم .
Dim sql As String Dim strwriter As String " strwriter = "In Progress "'" & sql = "SELECT * FROM tblOrder WHERE OrderStatus = '" & strwriter
در اینجا ما توانستیم تا حد زیادی تعداد دابل کوتیشن های مورد نیاز برای عبارت خود را کاهش دهیم و به نحوی از سینگل کوتیشن بهره ببریم.
پس تا به اینجای کار متوجه شدیم که چگونه باید یک متن را در داخل یک عبارت SQl به کار ببریم .
اما اگر بخواهیم یک عدد یا مجموعه ای از اعداد را استفاده کنیم چه باید کرد .
استفاده از اعداد در ساختار دستورهای SQl
برخلاف مقادیر متنی که استفاده از آنها در ساختار کدها تابع قوانین خاص خود است که در بخش قبل به آنها پرداختیم .
مقادیر عددی و استفاده از آنها دردسر کمتری را برای ما ایجاد می کنند .
مثلا به کدهای زیر نگاه کنید .
Dim sql As String Dim strprice As Currency strprice > 200009 "sql = "SELECT * FROM tblCustomer WHERE strprice >= 20000
در کدهای بالا می خواهیم تمامی کتابهایی را که قیمت آنها بالاتر از ۲۰۰۰۰ است را انتخاب کنیم .
در حالتی دیگر می توانیم مبلغ مورد نظر خود را در داخل یک متغیر ذخیره کرده و سپس از این متغیر در کدهای خود استفاده کنیم .
Dim price As Long Dim price As String price = 20000 sql = "SELECT * FROM tbl_books WHERE price = " & price
در اینجا ما رقم مربوط به قیمت را بطور مستقیم در کدهای خود وارد کردیم . اما مسلما قرار نیست که کاربر ما همیشه به دنبال یک قیمت خاص باشد . اگر کاربر بخواهد به دنبال کتاب یا کتابهایی با مبلغ کمتر و یا بیشتر از این عدد بگردد چه باید بکند ؟.
بهترین کار این است که عدد مربوط به مبلغ مورد نظر را از کاربر دریافت کرده و بر مبنای آن جستجوی خود را انجام دهیم .
فرض کنید ما فرمی داریم به نام Frm _1 و در داخل آن یک تکس باکس داریم به نام txt_price . کاربر قرار است عدد مورد نظر را در این تکس باکس وارد کند .
حالا ما باید این عدد را به نحوی وارد ساختار کد خود کنیم . برای این منظور می توانیم از کدی همانند کد زیر استفاده کنیم .
Dim price As Long Dim price As String price=forms!frm_1!txt_price sql = "SELECT * FROM tbl_books WHERE price = " & price
در این حالت این کاربر است که عدد مربوط به قیمت را تعیین می کند و ما فقط بر مبنای رقم قیمت وارد شده کار جستجو را برای او انجام می دهیم
استفاده از تاریخ در ساختار دستورهای SQl
کار با داده های نوع تاریخ و زمان در عبارت های SQL همانند عبارت های متنی نیاز به این دارد که در داخل کاراکترهای خاصی قرار گیرند در غیر اینصورت برنامه در حین اجرای کدها از ما خطا خواهد گرفت .
برای اینکه بتوانیم از داده های نوع تاریخ استفاده کنیم حتما باید عبارتی را که اشاره به یک تاریخ خاص می کند را در داخل دو علامت # # قرار دهیم .
در واقع با استفاده از کاراکترهاست که برنامه متوجه می شود که عبارتی که در داخل این دو کاراکتر قرار می گیرد نه یک متن است و نه یک عدد بلکه عبارتی است که مربوط به یک تاریخ و یا زمان خاص می شود
مثلا به کدهای زیر توجه کنید .
.
. ما این مطلب را به تدریج تکمیل تر خواهیم کرد . …………………..
برای مشاهده ترفندهای کار با نرم افزار های آفیس از شما دعوت می کنیم که سری به پیج ما در اینستاگرام بزنید .
دیدگاهتان را بنویسید