وصول VBA: خطأ وقت التشغيل 3734
-
08-07-2019 - |
سؤال
ويمكن لأي شخص أن تعطيني تفاصيل
<اقتباس فقرة>خطأ وقت التشغيل 3734
اقتباس فقرة>وفي VBA الوصول.
لمرجعية وأنا على الحصول عليه من التعليمات البرمجية في موضوع التالي
كيفية تشغيل حلقة من الاستعلامات في الوصول <؟ / أ>
Sub plausibt_check()
Dim rs As DAO.Recordset
Dim rs2 As ADODB.Recordset
Dim db As database
Dim strsql As String
Dim tdf As TableDef
Set db = opendatabase("C:\Codebook.mdb")
Set rs = db.OpenRecordset("querycrit")
Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection
For Each tdf In CurrentDb.TableDefs ' in this line the error occurs
المحلول
ويبدو أنك تستخدم ADO في قاعدة البيانات الحالية دون حفظ. يجب حفظ قبل تشغيل التعليمات البرمجية التي تحتوي ADO.
نصائح أخرى
وأنا لا أفهم ما نحاول القيام به. لماذا أنت باستخدام أحد السجلات DAO وADO واحد؟ هذا لا معنى له على الإطلاق. إذا قمت بحفظ الاستعلامات في الواجهة الأمامية الوصول، ثم حتى لو النهاية الخلفية الخاصة بك، مثلا، SQL Server مع الروابط الجدول ODBC، هو في الحقيقة ليس هناك فائدة على الإطلاق في استخدام ADO.
وليس هناك دليل على وجود حلقة في التعليمات البرمجية، لذلك ما لم يتم استدعاء التعليمات البرمجية الخاصة بك عن طريق حلقة، فإنه لا يبدو لي أن التفسير KB المادة سوف تطبق.
وأنا لا أعرف ما هو عليه كنت تريد أن تفعل، ولكن النقطة حول فتح قاعدة البيانات الخاصة بك مرة واحدة، وليس في كل تكرار حلقة الخاص بك، يجب أن يكون واضحا جدا على أي شخص يفكر فيها. إذا كنت تقوم بتشغيل حلقة وبشكل متكرر فتح نفس قاعدة البيانات في كل تكرار للحلقة، وينبغي أن يكون واضحا أن العملية تنتمي خارج الحلقة.
وهذا من شأنه أن يكون شيئا من هذا القبيل:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDB()
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
Set db = Nothing
في هذا الرمز، كنت تستخدم MDB المفتوحة حاليا في واجهة المستخدم، ولكن لا يهم - أيهما قاعدة بيانات كنت فتح وحلقات من خلال أهدافه يجب ان يفتح مرة واحدة فقط، خارج الحلقة
إذا كنت تريد أن يكون حلقة الخاص بك أن تكون في روتين يسمى من التعليمات البرمجية الرئيسي الخاص بك، ثم تمرير المتغير قاعدة بيانات كحجة لروتين الخاص بك. ان روتين يكون شيئا مثل هذا:
Public Sub ProcessQueries(db As DAO.Database)
Dim qdf As DAO.QueryDef
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
End Sub
وكنت أدعو أن هكذا:
Dim db As DAO.Database
Set db = CurrentDB()
Call ProcessQueries(db)
Set db = Nothing
والآن، إذا كنت تصر على الحصول على البيانات المصدر من DAO ثم القيام بشيء معها عبر ادو، وكنت قد حلقة DAO وداخله، وحلقة ADO. وبسبب ذلك، وكنت ترغب في تحديد اتصال ADO الخاص بك خارج حلقة DAO، بدلا من داخله. والاستثناء الوحيد لذلك يكون إذا يحدد البيانات التي تقوم سحب من حلقة DAO الخاص بك قاعدة البيانات التي كنت فتح مع ADO. ونحن لا نعرف ما كنت في الواقع محاولة لتحقيق، انها جميلة من المستحيل الكثير ليعطي نصيحة جيدة على بالضبط ما يجب أن يتغير في التعليمات البرمجية.