سؤال

أنا جديد على VBA والوصول بشكل عام ودلعت في هذه المشكلة أثناء محاولة استخدام التنفيذ البديل المقترح من سؤال آخر سأطلبه (DLOOKUP في Access لا يعمل حتى يتم النقر فوق مربع النص في النموذج)

الرمز الذي يتم تشغيله أدناه، المشكلة هي أن Me.Key يختلف عن كل سجل يتم عرضه في النموذج وتشغيل هذا في الحدث المفتوح النموذج يعني أنه يمسك فقط القيمة الأولى التي تم تعيينها لي. كيف يمكنني تشغيل هذا بحيث يختلف Me.Key لكل سجل / خط يتم عرضه؟

قاتمة روبية كما dao.recordset dim db كقاعدة بيانات خافتة QDF ك QueryDEF DIM PRM كمعلمة SET DB = Set CurrentDB ضبط QDF = DB.QueryDefs ([MF الدخل - دفق شهري]) لكل جماعة PRM في QDF.Parameters PRM.Value = EVIV (PRM.NAME) STEME PRM تعيين RS = QDF.OpenRecordset (DBOPENDYNASET) Rs.Findfirst [MyMonth] = 10 و [Org_Type] = '" & me.key & "" me.oct = rs! sumval. .. مهام شهر أخرى
هل كانت مفيدة؟

المحلول

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

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   debug.print me.key
next m_position

لسوء الحظ، سترى لديك Blincker الشاشة أثناء تصفح جميع الخطوط. يمكنك الخروج من الدورة البحث عن بعض المرافق "screenfreezer" ل VBA على الشبكة (هناك واحد يسمى Lockwindowupdate، طالما أستطيع أن أتذكر).

حل آخر هو استعراض استنساخ مجموعة السجلات الأساسية (تصفح مجموعة السجلات سوف تثير نفس سلوك الشاشة كما كان من قبل). يفترض أن تحكم عنصر التحكم ME.KEY إلى عمود "المفتاح" من مجموعة السجلات، يمكن أن يكون الرمز:

Dim rsClone as DAO.recordset
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    Do while not rsClone.EOF
        debug.print rsCLone.fields("Key")
        rsClone.moveNext
    Loop
Endif
set rsClone = nothing

المفضل لدي هو أول واحد، مع إضافة خيار "تجميد". يمكن لرمزك إدارة قيم Seltop و Selheight للنموذج. هذا يعني أنه يمكنك استعراض السجلات على وجه التحديد المحدد من قبل المستخدمين و / أو، بمجرد استعراض جميع السجلات، العودة إلى اختيار السجل الأصلي.

تعديل:

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

إذا كان عنصر التحكم الخاص بك "MySontrol" مرتبط بحقل "MyField" في مجموعة سجلات، فإن أي من الرموز التالية سيزيد قيمة التحكم "MyControl" وقيمة الحقل "MyField" في نفس الوقت. سوف تكون أكثر من القدرة على الحصول على قيمة مختلفة على كل صف:

الحل 1:

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   me.controls("myControl") = m_position
next m_position

الحل 2:

Dim rsClone as DAO.recordset, _
    i as long

set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    i = 1
    Do while not rsClone.EOF
        rsClone.fields("myField") = i
        rsClone.update
        rsClone.moveNext
        i = i+1
    Loop
Endif
set rsClone = nothing

نصائح أخرى

يمكنك تجربة الحدث الحالي للنموذج، كما هو مقترح سابقا :)

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

ثم قم ببناء نموذج صغير بناء على هذا الاستعلام. يمكنك بعد ذلك إسقاط هذا النموذج الصغير في النموذج الحالي وعرض العديد من الحقول من البيانات بناء على إعداد قيمة المفتاح. (فقط تأكد من إعداد إعدادات الرابط وإعدادات الطفل للنموذج الفرعي). هنا يشبه شكل:

alt text
(مصدر: Shaw.ca.)

لذلك، في الفاتورة أعلاه لعرض معلومات العميل بناء على معرف العميل وهي جدول ذي صلة في الفاتورة.

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

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