پرش به محتوای اصلی

آموزش کار با کوئری‌های ذخیره‌شده و Viewها در SQL اکسس

کوئری‌های ذخیره‌شده و Viewها در SQL اکسس

در بسیاری از سیستم‌های مدیریت پایگاه داده، «View» یا نمای دید، یک جدول مجازی است که بر اساس نتایج یک دستور SQL شکل می‌گیرد. در نرم‌افزار مایکروسافت اکسس، معادل دقیق View همان کوئری ذخیره‌شده (Saved Query) است که در کدنویسی با نام شیء QueryDef شناخته می‌شود. در این آموزش به نحوه مدیریت و کار با این کوئری‌های ذخیره‌شده می‌پردازیم.

تصویر مفهومی برای کوئری های ذخیره شده در اکسس در محیط اکسس و VBA
مدیریت و اجرای کوئری‌های ذخیره‌شده به‌عنوان جداول مجازی (Views) برای گزارش‌گیری امن و بهینه.
Did you know:

SQL یکی از اصلی‌ترین زبان‌های مدیریت داده در نرم‌افزار اکسس است. با استفاده از آن می‌توانید داده‌ها را به شکل دقیق دسته‌بندی و فیلتر کنید. از ترکیب کوئری‌های SQL با جداول مختلف اکسس برای ایجاد گزارش‌های سفارشی استفاده کنید و تحلیل‌های پیچیده‌تری انجام دهید. یکی از مزایای اصلی SQL در اکسس، امکان ترکیب داده‌های چندین جدول و استخراج اطلاعات به شکلی ساده و سریع است که فرآیند تصمیم‌گیری را آسان‌تر می‌کند.

کوئری ذخیره‌شده یا View چیست؟

کوئری ذخیره‌شده، در واقع همان منطق متنی SQL است که به‌طور فیزیکی در ساختار فایل پایگاه داده ذخیره شده است. این موجودیت دقیقاً مانند View در SQL Server عمل می‌کند. هرگاه این کوئری را اجرا کنید، در لحظه داده‌های به‌روزشده را از جداول پایه استخراج می‌کند. شما می‌توانید فرم‌ها و گزارش‌های خود را مستقیماً به این کوئری‌ها متصل کنید.

چرا استفاده از آن‌ها ضروری است؟

استفاده از کوئری‌های ذخیره‌شده پایه‌های معماری اصولی دیتابیس هستند:

  • استفاده مجدد از کد: یک‌بار منطق پیچیده اتصال جداول (JOIN) را می‌نویسید و همه‌جا از آن استفاده می‌کنید.
  • امنیت: دسترسی کاربران را محدود می‌کنید تا به‌جای دیدن جداول اصلی خام، فقط نمایی فیلترشده را مشاهده کنند.
  • سرعت و بهینه‌سازی: اکسس کوئری‌های ذخیره‌شده را از قبل کامپایل (پیش‌پردازش) می‌کند؛ بنابراین سریع‌تر از رشته‌های متنی SQL درون کدهای VBA اجرا می‌شوند.

ساختار و نحوه استفاده

هرچند اکسس از طریق پروتکل‌های ADO از دستور CREATE VIEW پشتیبانی می‌کند، اما راه استاندارد و قدرتمند در محیط بومی اکسس، استفاده از رابط کاربری Query Designer یا کدنویسی اشیاء DAO QueryDef است.

متن یک کوئری ساده می‌تواند به این شکل باشد:

SELECT Employees.LastName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DeptID = Departments.DeptID;

مثال‌های کاربردی VBA

در این قطعه کد، از طریق برنامه نویسی VBA یک کوئری دائمی (معادل View) در فایل دیتابیس می‌سازیم:

Option Explicit

Sub CreateSavedQuery()
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim strSQL As String
    Dim queryName As String
    
    Set db = CurrentDb()
    queryName = "vw_EmployeeDepartments"
    
    strSQL = "SELECT E.LastName, D.DepartmentName " & _
             "FROM Employees AS E INNER JOIN Departments AS D " & _
             "ON E.DeptID = D.DeptID;"
             
    ' برای جلوگیری از خطا، در صورت وجود نسخه قبلی آن را حذف می‌کنیم
    On Error Resume Next
    db.QueryDefs.Delete queryName
    On Error GoTo 0
    
    ' ساخت شیء QueryDef جدید (ذخیره در دیتابیس)
    Set qdf = db.CreateQueryDef(queryName, strSQL)
    
    MsgBox "کوئری / View با موفقیت ساخته و ذخیره شد!", vbInformation
    
    Set qdf = Nothing
    Set db = Nothing
End Sub

توضیح کد

ابتدا اشیاء اصلی پایگاه داده و QueryDef تعریف می‌شوند. دستور SQL برای اتصال (JOIN) دو جدول آماده می‌گردد. از آنجایی که اکسس اجازه ساخت نام تکراری را نمی‌دهد، با کمک On Error Resume Next تلاش می‌کنیم کوئری قبلی را حذف کنیم. در نهایت CreateQueryDef دستور متنی را به یک شیء فیزیکی و قابل مشاهده در منوی کناری اکسس تبدیل می‌کند.

خطاهای رایج

  • تلاش برای ذخیره کوئری با نامی که در حال حاضر به عنوان یک جدول یا فرم در سیستم وجود دارد (خطای ۳۰۱۲).
  • صدا زدن کوئری از طریق VBA در حالی که کاربر مستقیماً نام آن را در رابط کاربری تغییر داده یا آن را حذف کرده است.

بهترین روش‌ها (Best Practices)

  • یک قانون نام‌گذاری سخت‌گیرانه وضع کنید. کوئری‌های ذخیره‌شده را با پیشوند qry_ یا vw_ نام‌گذاری کنید تا در بین جداول اصلی گم نشوند.
  • به‌جای پراکنده کردن ده‌ها رشته متنی SQL داخل کدهای VBA، منطق واکشی داده را در قالب QueryDefs ذخیره کنید. مدیریت یک کوئری متمرکز بسیار راحت‌تر است.

موضوعات مرتبط

  • ارسال پارامتر به کوئری‌ها از طریق VBA
  • انواع اتصالات JOIN در SQL

سؤالات متداول درباره کوئری‌های ذخیره‌شده اکسس

آیا اکسس مفهومی به نام View دارد؟

بله، اگرچه در رابط کاربری اکسس به آن Saved Query گفته می‌شود، اما این کوئری‌ها دقیقاً عملکرد و نقش یک View در سیستم‌هایی مانند SQL Server را ایفا می‌کنند.

آیا می‌توانم از دستور CREATE VIEW استفاده کنم؟

اگر با اتصالات ADO یا OLE DB کدنویسی می‌کنید بله، اما استانداردترین راه در خود برنامه اکسس، استفاده از متد CreateQueryDef در کتابخانه DAO است.

سرعت کوئری‌های ذخیره‌شده بیشتر است یا کدهای داخل VBA؟

کوئری‌های ذخیره‌شده سریع‌ترند. اکسس پیشاپیش مسیر اجرای آن‌ها را محاسبه و کامپایل می‌کند، اما کدهای متنی داخل ماژول‌ها باید در لحظه ارزیابی و پردازش شوند.

آیا می‌توان از طریق Viewها اطلاعات جداول را آپدیت کرد؟

در صورتیکه কোئری شما ساختاری قابل بروزرسانی (Updatable) داشته باشد (مانند یک Join ساده)، می‌توانید. اما کوئری‌های حاوی توابع جمع‌بندی فقط-خواندنی هستند.

چگونه کوئری را در کد VBA فراخوانی کنم؟

دقیقاً مانند جداول فیزیکی؛ کافیست نام کوئری را در متد OpenRecordset قرار دهید، به عنوان مثال: db.OpenRecordset("vw_Report").

جمع‌بندی

تبدیل جستجوهای تکراری و پیچیده به کوئری‌های ذخیره‌شده یکی از نمادهای برنامه‌نویسی حرفه‌ای در اکسس است. این کار کدنویسی VBA شما را خلوت‌تر، امنیت سیستم را بیشتر و سرعت بارگذاری گزارش‌ها را بهینه می‌کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تأیید امنیتی هنگام تعامل با فرم بارگذاری می‌شود.