گاهی اوقات می خواهید بررسی کنید که آیا یک فیلد در جدول وجود دارد یا خیر. در اینجا تابعی وجود دارد که به سادگی سعی می کند فیلد مورد نظر را به متغیر 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
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 ثانیه طول می کشد. بنابراین نتیجه این است که در حالی که تفاوت عملکردی بین هر دو پیادهسازی وجود دارد، اما ناچیز است.