متقطعة خطأ عند محاولة التحكم في قاعدة بيانات أخرى في VBA

StackOverflow https://stackoverflow.com/questions/70417

  •  09-06-2019
  •  | 
  •  

سؤال

لدي البرمجية التالية:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing

المشكلة أنا تجريب هو منبثق أن يقول لي Access لا يمكن تعيين التركيز على قاعدة بيانات أخرى.كما يمكنك أن ترى من التعليمات البرمجية, أنا أريد أن تشغيل روتين فرعي في آخر mdb.أي وسيلة أخرى لتحقيق هذا سوف يكون موضع تقدير.

أنا أعمل مع MS Access 2003.

هذا هو خطأ غير متكررة.هذا هو إنتاج التعليمات البرمجية التي سيتم تشغيل مرة واحدة فقط في الشهر ، فإنه من الصعب للغاية على الإنجاب, و لا أستطيع أن أعطيك النص الدقيق و العدد في هذا الوقت.وهذا هو الشهر الثاني من هذا حدث.

وأظن أن هذا قد يحدث عندما يقوم شخص ما هو العمل مع هذا أو قاعدة بيانات أخرى.

البيانات هي تحديث جميع 'المشاريع' مرة واحدة في الشهر في قاعدة بيانات واحدة ثم جعل هذه المعلومات متاحة في قاعدة بيانات أخرى.

ربما لأن من السطر الأول في 'إجراءات' code:إذا vbNo = MsgBox("هل تريد التحديث؟", vbYesNo, "تحديث") ثم خروج وظيفة End If

أنا سوف تجعل آخر فرعي دون MsgBox.

لقد كنت قادرا على إعادة إنشاء هذا السلوك.يحدث عند التركيز على التحول إلى ما يسمى قاعدة البيانات ، ولكن المستخدم مجموعات التركيز ([ALT]+[TAB]) على قاعدة البيانات الأولى.إن "الحل" إلى تثقيف المستخدم.


هذا هو خطأ غير متكررة.هذا هو إنتاج التعليمات البرمجية التي سيتم تشغيل مرة واحدة فقط في الشهر ، فإنه من الصعب للغاية على الإنجاب, و لا أستطيع أن أعطيك النص الدقيق و العدد في هذا الوقت.وهذا هو الشهر الثاني من هذا حدث.

وأظن أن هذا قد يحدث عندما يقوم شخص ما هو العمل مع هذا أو قاعدة بيانات أخرى.

البيانات هي تحديث جميع 'المشاريع' مرة واحدة في الشهر في قاعدة بيانات واحدة ثم جعل هذه المعلومات متاحة في قاعدة بيانات أخرى.

ربما لأن من السطر الأول في 'إجراءات' code:إذا vbNo = MsgBox("هل تريد التحديث؟", vbYesNo, "تحديث") ثم خروج وظيفة End If

أنا سوف تجعل آخر فرعي دون MsgBox.


لقد حاولت ذلك في تطوير قاعدة بيانات يعمل.هذا لا يعني أي شيء مثل رمز آخر أيضا workes بخير في التنمية.

هل كانت مفيدة؟

المحلول 3

لقد كنت قادرا على إعادة إنشاء الخطأ في "التنمية".

"لا يمكن إكمال هذا الإجراء لأن التطبيق مشغول.اختر 'التبديل إلى تفعيل ...."

أنا حقا لا يمكن أن نرى بقية الرسالة ، كما هو وميض سريع جدا.أعتقد أن هذا الخطأ يرجع إلى 'التحول' بين اثنين من قواعد البيانات.وآمل أنه من خلال تثقيف المستخدم ، وهذا سوف تتوقف.

فيليب الجواب بالطبع الصحيح.كنت قد اخترت هذا الطريق إذا لم أكن قد وضعت 'روتينية' مسبقا.

"لقد كنت قادرا على إعادة إنشاء هذا السلوك.يحدث عند التركيز على التحول إلى ما يسمى قاعدة البيانات ، ولكن المستخدم مجموعات التركيز ([ALT]+[TAB]) على قاعدة البيانات الأولى.إن "الحل" إلى تثقيف المستخدم." كما أنه من المستحيل لمنع المستخدم للتبديل إلى تطبيق في ويندوز ، أود أن أختم هذا الموضوع.

نصائح أخرى

أعتقد أن هذه رسالة الخطأ مرتبط دولة واحدة من قواعد البيانات الخاصة بك.كنت تستخدم هنا جت الاتصالات والوصول إلى الأشياء و أنت قد لا تكون قادرة ، لأسباب متعددة (multi-user البيئة ، unability حذف LDB قفل الملف, الخ) بشكل صحيح من قاعدة بيانات نشطة ومفتوحة واحد آخر.لذلك بالنسبة لي الحل هو أن ننسى المحرك النفاث و استخدام آخر بمناسبه لتحديث البيانات في "الآخر" قاعدة البيانات الخاصة بنا.

عندما تقول "تدفق البيانات هي تحديث جميع 'المشاريع' مرة واحدة في الشهر في قاعدة بيانات واحدة ثم جعل هذه المعلومات متاحة في قاعدة بيانات أخرى" أفترض أن دور "روتينية" هو تحديث بعض البيانات إما عن طريق SQL تعليمات أو ما يعادلها recordset التحديثات.

لماذا لا تحاول أن تجعل المقابلة التحديثات عن طريق فتح بمناسبه الأخرى الخاصة بك في قاعدة بيانات (1) وإرسال المقابلة SQL تعليمات أو (2) فتح مجموعة السجلات وتقديم طلب التحديثات ؟

فكرة واحدة قد تكون على سبيل المثال:

Dim cn as ADODB.connexion, 
    qr as string, 
    rs as ADODB.recordset

'qr can be "Update Table_Blablabla Set ... Where ...
'rs can be "SELECT * From Table_Blablabla INNER JOIN Table_Blobloblo  

set cn = New ADODB.connexion
cn.open

You can here send any SQL instruction (with command object and execute method) 
or open and update any recordset linked to your other database, then

cn.close

ويمكن أيضا أن يتم ذلك عن طريق ODBC بمناسبه (داو.مجموعات السجلات) ، بحيث يمكنك اختيار المفضلة لديك الكائنات.

إذا كنت ترغب في وسيلة أخرى من تشغيل وظيفة, حاول القيام بما يلي:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing

حيث 'MyMacro'لديه عمل 'RunCode'مع اسم وظيفة كنت تفضل أن تنفيذ العمل.mdb

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top