accdbExe

accdbExe
لینک سایر سایت‌های آموزش Access

اطلاعات تماس و ارسال نظر

شروع کار از: فروردین 1402

گاهی اوقات می خواهید بررسی کنید که آیا یک فیلد در جدول وجود دارد یا خیر. در اینجا تابعی وجود دارد که به سادگی سعی می کند فیلد مورد نظر را به متغیر DAO.Field اختصاص دهد. اگر فیلد وجود نداشته باشد، منجر به خطای زمان اجرا می شود و اجرای تابع با برچسب پرش fieldExists_Exit به پایان می رسد ، بنابراین false را برمی گرداند. این عملکرد سریع و است، اما مشکل را حل می کند.

Public Function FieldExists(tableName As String, fieldName As String) As Boolean
On Error GoTo fieldExists_Exit

Dim fld As dao.Field

FieldExists = False
Set fld = CurrentDb.TableDefs(tableName).Fields(fieldName)
FieldExists = True

fieldExists_Exit:
Set fld = Nothing

End Function

تابع عمومی FieldExists 

Public Function FieldExists(tableName As String, fieldName As String) As Boolean

Dim db As dao.Database
Dim td As dao.TableDef
Dim fld As dao.Field
Dim i As Long

FieldExists = False
Set db = CurrentDb
Set td = db.TableDefs(tableName)

For i = 0 To td.Fields.Count - 1
If td.Fields(i).Name = fieldName Then
FieldExists = True
Exit For
End If
Next

End Function

اگر فیلد در جدول وجود نداشته باشد و حلقه تا انتهای مجموعه فیلدها اجرا شود، انتظار دارم تابعی که در تمام فیلدها حلقه می زند، به میزان قابل توجهی کندتر باشد. بنابراین یک آزمایش مقایسه عملکرد کوچک را تنظیم کنید. من هر نوع از FieldExists-Function را برای جدولی با 60 فیلد به دنبال یک فیلد غیر موجود در یک حلقه فراخوانی کردم. - شگفت‌انگیز این است که به سختی تفاوتی بین این دو پیاده‌سازی از نظر عملکرد وجود دارد. من باید تعداد اجرای حلقه را به بیش از 100000 برسانم تا اصلاً آن را اندازه گیری کنم. سرانجام با 500000، فرض من به وضوح تأیید می شود. اجرای 1 (با گرفتن خطا) 2 ثانیه طول می کشد تا 500000 بار اجرا شود. پیاده سازی 2 (با حلقه از میان فیلدها) 11 ثانیه طول می کشد. بنابراین نتیجه این است که در حالی که تفاوت عملکردی بین هر دو پیاده‌سازی وجود دارد، اما ناچیز است.