salehamr قام بنشر سبتمبر 1, 2007 قام بنشر سبتمبر 1, 2007 كيف يمكن عمل مربعات تحرير وسرد الأول يظهر أسماء الجداول في قاعدة البيانات والثاني يظهر حقول الجدول المختار في مربع التحرير والسرد الأول والثالث يظهر سجلات الحقل المختار في مربع التحرير والسرد الثاني 1
Dream_Works قام بنشر سبتمبر 1, 2007 قام بنشر سبتمبر 1, 2007 أرجو أن يكون هذا طلبك للأسف لا يمكن التنزيل في المنتدى لذلك أرجو القيام بالتالي 1- إنشاء قائمتين منسدلتين Combo Boxes اسمهما CboTables , CboFields 2- إنشاء قائمة عادية ListBox اسمها LstRecords 3- نسخ الكود التالي كله عندك بالفورم 4- التأكد من وضع كلمة Event Procedure على كل قائمة في الحدث المطلوب ... كما هو موضح في بداية كل جزء من الكود Private Sub CboFields_AfterUpdate() Dim FieldName As String, TableName As String, Query As String With Me FieldName = "[" & .CboFields & "]" TableName = "[" & .CboTables & "]" Query = "Select " & FieldName & " From " & TableName .LstRecords.RowSource = Query .LstRecords.Locked = False End With End Sub Private Sub CboTables_AfterUpdate() Dim TableName As String Dim I As Byte Dim rs As dao.Recordset TableName = Me.CboTables.Value Set rs = CurrentDb.OpenRecordset(TableName) With Me.CboFields For I = 0 To rs.fields.Count - 1 .AddItem rs.fields(I).Name Next I .Value = .Column(0, 0) rs.Close .Locked = False End With End Sub Private Sub Form_Load() Dim tbl As dao.TableDef With Me .CboTables.RowSourceType = "Value List" .CboFields.RowSourceType = "Value List" .LstRecords.RowSourceType = "Table/Query" .CboFields.Locked = True .LstRecords.Locked = True End With With Me.CboTables For Each tbl In CurrentDb.TableDefs If Left(tbl.Name, 4) <> "MSys" Then .AddItem (tbl.Name) End If Next tbl .Value = .Column(0, 0) Set tbl = Nothing End With End Sub بالتوفيق إن شاء الله
salehamr قام بنشر سبتمبر 2, 2007 الكاتب قام بنشر سبتمبر 2, 2007 (معدل) تحية وإحتراماً فقد جربت الكود وكان هو المطلوب فعلاً ، ولي سؤال إن تكرمتم توضيح معنى الجمل التالية لتتعمق الفكرة لدي . كما ولا يسعني إلا أن أشكر جميع المشرفين على هذا المنتدى الخيري وجميع الخيرين من الأعضاء أمثالك الذين يجدون بما أنعم الله عليهم من العلم والمعرفة ليستفيد منها المبتدئين أمثالي . For Each tbl In CurrentDb.TableDefs If Left(tbl.Name, 4) <> "MSys" Then .AddItem (tbl.Name) End If Next tbl .Value = .Column(0, 0) Set tbl = Nothing تم تعديل سبتمبر 2, 2007 بواسطه عمار زيد
Dream_Works قام بنشر سبتمبر 2, 2007 قام بنشر سبتمبر 2, 2007 راح أحاول أشرح لك سطر سطر ... For Each tbl In CurrentDb.TableDefs طبعا أنت شفت إني عرفت متغير (Variable) اسمه tbl في بداية الكود و نوعه TableDef Dim tbl As dao.TableDef TabDef = Table Definition هذا المتغير قادر على تخزين جدول في مرحلة الDesign بحيث تتحكم فيه كما تريد قبل أن تقوم بتخزينه مره أخرى... الرجاء النظر في الصورة على الرابط جدول في مرحلة التصميم CurrentDb = Current Database هذا متغير موجود في الأكسيس و يشير دائما إلى قاعدة البيانات الحالية CurrentDb.Tabdefs هذا التعبير يقوم باسترجاع جميع الجداول الموجودة في قاعدة بياناتك و بالتالي فإن معنى السطر بالكامل هو ... لكل Table Definition موجود في قاعدة البيانات الحالية CurrentDB قم بعمل الآتي ... (يتم تخزين كل جدول في المتغير tbl) ... و يستمر في استرجاع الجداول واحد واحد If Left(tbl.Name, 4) <> "MSys" Then توجد جداول مخفية في كل قاعدة بيانات ... غير الجداول التي التي يتم إنشاؤها من المستخدم ... ولاحظت أنها دائما تبدأ بكلمة MSys ... الرجاء النظر في الصورة على الرابط الجداول المخفية في الأكسيس لذلك كان يجب أن أتأكد من عدم إدراجها في القائمة المنسدلة ... فاستخدمت التعبير Left(tbl.Name, 4) <> "MSys" حتى أتأكد من أن اسم الجدول لا يبدأ بهذه الأربع حروف ... هنالك عيب في هذه الطريقة وهو لو أنشأ المستخدم جدولا يبدأ بهذه الأربع حروف فلن يظهر في القائمة المنسدلة طبعا لاحظت أخوي إن الدالة Left تستخدم في استرجاع الحروف من اليسار إلى اليمين ... لذلك استخدمتها و استرجعت أربعة حروف فقط من اسم الجدول ... .AddItem (tbl.Name) هذا السطر يضيف اسم الجدول إلى القائمة المنسدلة ... و طبعا لأن نوعها ValueList فيمكنني التحكم في القيم التي بها أما لو كانت تعتمد على استعلام Table/Query فلن يمكنني ذلك End If نهاية الجملة الشرطية Next tbl هذا السطر يعود إلى بداية ال For loop ( أول سطر شرحناه ) مع تخزين الجدول التالي في المتغير Tbl .. و هكذا إلى أن تنتهي الجداول .Value = .Column(0, 0) بعد أن تم وضع جميع أسماء الجداول المطلوبة في القائمة المنسدلة ... يتم اختيار قيمة من بينها ووضعها في القائمة المنسدلة ك - بداية .. Initialize Value و أنا اخترت القيمة الأولى طبعا لو تتخيل محتويات القائمة المنسدلة ك مصفوفة تحتوي على صفوف و أعمدة ... فهي تحتوي في هذه الحالة على عمود واحد و عدة صفوف ... الرجاء النظر في الصورة على الرابط وضعية الأعمدة و الصفوف في القائمة المنسدلة Set tbl = Nothing أنواع المتغيرات الخاصة ... كالمتغير الذي يشير إلى جدول أو يشير إلى مجموعة سجلات Record Set .. عادة تأخذ مساحة ملحوظة من ذاكرة الجهاز .... و أحيانا تبقى في الذاكرة إلى أن يتم إغلاق قاعدة بياناتك ... لذلك يستحسن التأكد من مسحها من الذاكرة بعد الانتهاء منها مباشرة أرجو أن يكون الشرح واضح ... و أي سؤال أو استفسار لديك ... سأحاول إجابته قدر استطاعتي بالتوفيق إن شاء الله ...
عمار زيد قام بنشر سبتمبر 2, 2007 قام بنشر سبتمبر 2, 2007 السلام عليكم ورحمة الله وبركاته جزاك الله خيراً أخي Dream Works شرح جيد وعطاء غير محدود , جعله الله في ميزان حسناتك
salehamr قام بنشر سبتمبر 3, 2007 الكاتب قام بنشر سبتمبر 3, 2007 السلام عليكم ورحمة الله وبركاته جزاك الله خيراً أخي Dream Works وأثقل بها ميزان حسناتك وللشهادة أني أحببت هذا المنتدى لوجود الخيرين أمثالك من مشرفين وخبراء وأعضاء جزاكم وجزاهم الله عنا كل خير . وأرجوا أن تسمحوا لي بالسؤال التالي تكملة للموضوع أعلاه : كيف يمكن تغيير مصدر النموذج الفرعي إستناداً لما يتم إختياره في مربع التحرير والسرد المسمى CboTables ؟ .
Dream_Works قام بنشر سبتمبر 3, 2007 قام بنشر سبتمبر 3, 2007 يمكنك ببساطة فلترة بيانات النموذج الفرعي دون الحاجة إلى تغيير مصدر البيانات فمثلا With Me.subformName.Form .Filter = "[TableField] = 'TableName' " .FilterOn = true End With و توجد أيضا طرق أخرى ... فإذا أمكنك رفع قاعدة بياناتك إلى أي موقع رفع ملفات كالتالي رفع ملفات أو على الأقل توضيح المطلوب بمزيد من التفصيل سأحاول إيجاد أنسب طريقة لقاعدة بياناتك
salehamr قام بنشر سبتمبر 3, 2007 الكاتب قام بنشر سبتمبر 3, 2007 جزيل الشكر لك أخي Dream Works على سرعة إستجابتك المعذرة ما المقصود بـــ .Filter = "[TableField] = 'TableName' " وللتوضيح أخي : قاعدة البيانات تحوي أكثر من جدول ..... النموذج الرئيسي يحوي : 1- قائمتين منسدلتين Combo Boxes الأولى CboTables , والثانية CboFields تعتمد على CboTables 2- قائمة عادية ListBox اسمها LstRecords تعتمد على CboFields 3- نموذج فرعي أريد أن تتم تحديد أو تصفية ( فلترة ) سجلاته بحسب ما يتم إختياره من قائمة ListBox
Dream_Works قام بنشر سبتمبر 3, 2007 قام بنشر سبتمبر 3, 2007 أخي الكريم لدي بعض التساؤلات أرجو الرد عليها هل النموذج يحتوي على بيانات مسبقا ... أم تريد أن عرض البيانات حسب الاختيار من القائمة ؟ ... طريقتك تدل على أنك تريد عرض أي بيانات من أي جدول ... في نموذج فرعي واحد هل هذا صحيح ؟ .... هل يمكنك استخدام موقع رفع الملفات الذي أشرت إليه في مشاركتي السابقة لتنزيل ملفك
salehamr قام بنشر سبتمبر 4, 2007 الكاتب قام بنشر سبتمبر 4, 2007 لك الشكر الجزيل على تفاعلك وإهتمامك أخي نعم أريد أن أعمل : قاعدة بيانات بها أكثر من جدول وأكثر من إستعلام ونموذج رئيسي يحتوي على : 1- زرين إختيار : الأول : جداول الثاني : إستعلام 2 - قائمة منسدلة CboTables تستعرض الجداول و/ أو الإستعلام فقط ( حسب الإختيار أعلاه ) 3 - قائمة منسدلة CboFields تستعرض فقط حقول الجدول / الإستعلام الذي تم إختياره من القائمة CboTables 4 - قائمة عادية ListBox تستعرض فقط بيانات الحقل الذي تم إختياره من القائمة CboFields 5 - زرين إختيار : الأول : تحديد الثاني : تصفية 6 - نموذج فرعي واحد فقط بحيث أتمكن من : 1- إستعراض بيانات أي ( جدول / إستعلام ) يتم إختياره من القائمة المنسدلة CboTables 2 - تحديد و/ أو تصفية السجلات على ضوء الحقل الذي يتم إختياره من القائمة المنسدلة CboFields و معيار التصفية الذي يتم إختياره من القائمة ListBox أرجو المعذرة أخي 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.