الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الإداة TDBLookupComboBox لا تعمل فما الحل الأمثل؟

بدأه red_scorpion1 في 11 فبراير 2010 · 25 رد · 1,992 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

لدى قاعدة بيانات مصممة بأكسس وقمت بعمل نموذج بواسطة الدلفى ووضعت فيه الأدوات التالية

ADOTable1 وهو مرتبط بـ Datasource2

وكذلك وضعت ADOQuery1 وهو مرتبط بـ DataSource1 وهذا كان بغرض البحث وهو يعمل بشكل سليم

وأردت أن أظهر الخانات الخاصة بالجدول ADOTabel1 لكى اقوم بإستعراض محتوياته والتعديل عليها فى حالة الإحتياج قفمت بإضافة الأداه TDBEdit1 وهكذا وتم ربطهم ويعملو بشكل سليم لإسعراض البيانات ولكن هناك بعض الحقول أحتاج إلى أن تظهر الإختيارات المتاحه بها كمثلا نوع الشخص ( مساهم - غير مساهم ) فوجدت طبعا أن الحل يستدعى إدراج الأداة TDBLookupComboBox والموجودة فى Data Controls وقمت بإدراجها وربطها بـ DataSource2 والمربوطة بالجدول ما ذكرت وقمت بإختيار الفيلد المطلوب ظوره فى القائمة ولكن المشكلة أن القائمة فى الفورم غير فعالة ولا تفتح مع العلم أن الجدول أكتف وهذا ما سبب الإتصال بشكل سليم مع باقى المكونات وحاولت الدخول على الموضوع المشابه بالمنتدى هنا ولكن نفس المشكلة فقد تبعت الخطوات ولم يحدث جديد

لذا أتمنى من الإخوة الأفاضل شرح الطريقة المثلى للربط أو إعطائى المعلومة الناقصة

#2

للرفع للرفع للرفع

#3

اترك DataSource فارغا

في listSource قم باختيار DataSource المرتبط مع ADOTable

وفي listfield و keyfield اختر اسم الحقل التي تريد عرضها

#5

قمت بالتجربة إخوانى الأفاضل وإليكم النتائج:

أولا: قاعدة البيانات لدى مصممة بأكسس وبها الجداول الأتيه:

Items

يحتوى على الحقول itm_nm - itm_ty - pay_ty

Items_TY

يحتوى على الحقول ty_id - itm_ty

pay_TY

يحتوى على الحقول pay_id - pay_ty

قمت بتصميم فورم جديد من البداية ( رابع مرة ) ووضعت به الأدوات التالية:

ADOQuery1 وقمت بعمل كونكشن سترنج له وربطه بالداتا بيز وكتبت جملة السيكول التالية فى الـ String

select *from Items, Items_TY, pay_TY ;

ثم قمت بإضافة DataSource وربطه مع ADOQuery1

ثم وضعت DBCombobox1 - DBCombobox2

ثم ربطت الأول مع الداتا سورس واخترت الفيلد itm_nm من جدول الأصناف - ثم ربطت الثانى مع نفس الداتا سورس وإخترت الفيلد Itm_ty من جدول أنواع الأصناف.

ثم كتبت الكود كالتالى:


procedure TForm3.Formcreate(Sender: TObject);
const
Rqst1 = 'select itm_nm FROM Items';
Rqst2 = 'select itm_ty FROM Items_TY';

begin

with ADOQuery1 do begin
//Getting records from the first table and putting them in DBComboBox1
active := false;
SQL.Clear;
SQL.Add(Rqst1);
Active := true;
DBComboBox1.Items.Clear;
while NOT EOF do begin
DBComboBox1.Items.Add(FieldByName('itm_nm').AsString);
Next;
end;//while
// Doing the same with Items_TY
active := false;
SQL.Clear;
SQL.Add(Rqst2);
Active := true;
DBComboBox2.Items.Clear;
while NOT EOF do begin
DBComboBox2.Items.Add(FieldByName('itm_ty').AsString);
Next;
end;
end;
end;
end.

ثم عملت كومبيل ولكن حدث الأتى:

لم تظهر جميع الحقول بجميع الكومبو بوكس ولا ادرى اين المشكلة فما اريده بإختصار شديد هو

الحقول itm_ty - pay_ty بالجدول الأول فارغة واريد ان تكون فى الفورم تلك الحقول تستدعى بياناتها من الجدول الثانى والثالث بحيث عند اختيارها يتم تسجيلها تلقائيا فى الجدول الأول.

وأخير أسف للإطالة أخوانى الكرام بارك الله لنا فيكم

#6

قم بتعديل الكود مع مثالك

DBComboBox1.Clear;

ADOQuery1.DisableControls;

try

ADOQuery1.Open;

ADOQuery1.First;

while not ADOQuery1.Eof do

begin

DBComboBox1.Items.Add(DataSource1.DataSet.FieldValues['name']);

ADOQuery1.Next;

end;

finally

ADOQuery1.EnableControls;

end;

#7
format82 كتب:

قم بتعديل الكود مع مثالك

DBComboBox1.Clear;

ADOQuery1.DisableControls;

try

ADOQuery1.Open;

ADOQuery1.First;

while not ADOQuery1.Eof do

begin

DBComboBox1.Items.Add(DataSource1.DataSet.FieldValues['name']);

ADOQuery1.Next;

end;

finally

ADOQuery1.EnableControls;

end;

الرجاء التوضيح أكثر أخى الفاضل وهو اترك الخطوات السابقة كما هى

#8

امسح الكود المكتوب واكتب هذا الكود بدلا منه

DBComboBox1.Clear;

ADOQuery1.DisableControls;

try

ADOQuery1.Open;

ADOQuery1.First;

while not ADOQuery1.Eof do

begin

DBComboBox1.Items.Add(ADOQuery1.FieldByName('itm_nm').AsString);

ADOQuery1.Next;

end;

finally

ADOQuery1.EnableControls;

end;

////////

DBComboBox2.Clear;

ADOQuery1.DisableControls;

try

ADOQuery1.Open;

ADOQuery1.First;

while not ADOQuery1.Eof do

begin

DBComboBox2.Items.Add(FieldByName('itm_ty').AsString);

ADOQuery1.Next;

end;

finally

ADOQuery1.EnableControls;

end;

#9

format82 كتب:

امسح الكود المكتوب واكتب هذا الكود بدلا منه


ADOQuery1.DisableControls;
try
ADOQuery1.Open;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
DBComboBox1.Items.Add(ADOQuery1.FieldByName('itm_nm').AsString);
ADOQuery1.Next;
end;
finally
ADOQuery1.EnableControls;
end;
////////
DBComboBox2.Clear;
ADOQuery1.DisableControls;
try
ADOQuery1.Open;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
DBComboBox2.Items.Add(FieldByName('itm_ty').AsString);
ADOQuery1.Next;
end;
finally
ADOQuery1.EnableControls;
end;
DBComboBox1.Clear;

قمت بالتجربة وإليك النائج ولكن اليس الآتى صحيحا:

1. يتم ربط الكومبو بوكس الاول مع حقل اسم الصنف من جدول الاصناف.

2. يتم ربط الكومبو بوكس الثانى مع حقل نوع الصنف من جدول انواع الاصناف.

3. يتم ربط الكومبو بوكس الثالث مع حقل نوع السداد من جدول انواع السداد.

وهكذا لباقى الكومبوبوكس

وهل بهذا الكود سوف يتم تسجيل نوع الصنف ونوع سداده فى الجدول الأول ( جدول الأصناف )

تم استدعاء جدول الاصناف من الكومبوبوكس الاول ولكن كل صنف يظهر مرتين أو أكثر!!؟؟؟

تم إستدعاء جدول انواع الأصناف من الكومبوبوكس التانى ولكن كل نوع يظهر مرتين أو أكثر أيضا !! وهذا بسبب تكرار أسماء الأصناف على ما اعتقد

عندما اخترت صنف واخترت له نوع سداد على سبيل التجربة لم يحدث شىء وجدول الاصناف الذى مفترض ان يتم التخزين به كما هو

قمت بإرفاق الملف أخى الفاضل وهو مصمم بدلفى 2010

Pro 1.rar

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 15 فبراير 2010 في 02:21

#10

قم بربط ADOQuery مع جدول واحد فقط ثم ربطها مع DBComboBox

اي يصبح ليك 3 (DBComboBox) و 3 (ADOQuery)

لقد قمت بتعديل المثال

Pro 1.rar

#11
format82 كتب:

قم بربط ADOQuery مع جدول واحد فقط ثم ربطها مع DBComboBox

اي يصبح ليك 3 (DBComboBox) و 3 (ADOQuery)

لقد قمت بتعديل المثال

اخى الفاضل بارك الله فيك ولكن :

عندما اخترت الصنف كيتوفان - نوع الصنف اقماع - نوع السداد اجل

لم يحدث أى تسجيل لتلك البيانات بالجدول Items وما اريده هو عندما اختار تلك الانواع يتم تسجيل كل واحدة فى حقلها فى الجدول Items

#12

عسي هذا ما تريده

انظر لمشاركة الاخ طلال بلال

قمت بتعديل المرفق علي حسب ما فهمت

Pro 1.rar

#13
format82 كتب:

عسي هذا ما تريده

انظر لمشاركة الاخ طلال بلال

قمت بتعديل المرفق علي حسب ما فهمت

نعم اخى الفاضل هذا هو المطلوب بارك الله لك ولكن هل هناك ربط بين الجداول أم لا وهل هناك رابط لشرح الطريقة

2. هل من الممكن إضافة إسم الصنف إيض كى أعلم أى صنف أقوم بإدراج بياناته

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 15 فبراير 2010 في 11:08

#14
red_scorpion1 كتب:

نعم اخى الفاضل هذا هو المطلوب بارك الله لك ولكن هل هناك ربط بين الجداول أم لا وهل هناك رابط لشرح الطريقة

2. هل من الممكن إضافة إسم الصنف إيض كى أعلم أى صنف أقوم بإدراج بياناته

نعم قم باضافة TDBLookupComboBox ثالث ثم قم بربطها مع الحقول المعنية

اضغط كلك علي TDBLookupComboBox

في DataSource اختر DataSource1

وفي datafield اختر الحقل المراد حفظ البيانات فيها علي ما اذن (itm_nm)

وفي listDataSource اختر DataSource مرتبط مع الجدول مراد عرض البيانات منها

وفي listfield اختر الحقل المراد عرضها

وفي keyfield الحقل الذي تريد حفظها من هذا الجدول في الحقل المرتبط في DataSource

سوف تجد الشرح في رد الاخ طلال بلال

#15
format82 كتب:

نعم قم باضافة TDBLookupComboBox ثالث ثم قم بربطها مع الحقول المعنية

اضغط كلك علي TDBLookupComboBox

في DataSource اختر DataSource1

وفي datafield اختر الحقل المراد حفظ البيانات فيها علي ما اذن (itm_nm)

وفي listDataSource اختر DataSource مرتبط مع الجدول مراد عرض البيانات منها

وفي listfield اختر الحقل المراد عرضها

وفي keyfield الحقل الذي تريد حفظها من هذا الجدول في الحقل المرتبط في DataSource

سوف تجد الشرح في رد الاخ طلال بلال

في DataSource اختر DataSource1

وفي datafield اختر الحقل المراد حفظ البيانات فيها علي ما اذن (itm_nm)

وفي listDataSource اختر DataSource مرتبط مع الجدول مراد عرض البيانات منها هل هو ( DataSource1 )

وفي listfield اختر الحقل المراد عرضها ( itm_nm )

وفي keyfield الحقل الذي تريد حفظها من هذا الجدول في الحقل المرتبط في DataSource - اليس المقترض انها DataSource1

ولكن أعتقد أن هناك خطأ وقعت به ولا أدرى ما هو لذا ارفق الملف إليك سيدى الفاضل

Pro 1_2.rar

#16

أخى الفاضل

بعد محاولات عديدة ومحاولة فهم كيف يتم إستدعاء البيانات تم بحمد لله الوصول إلى المطلوب ولكن هناك طلب

إذا أردت أن أعمل ( تشيك بوكس أو ليست بوكس ) بدلا ( الكومبوبوكس ) وذلك لأنواع السداد حيث أننى أريد أن أختار أكثر من نوع سداد للصنف الواحد فكيف يمكن ذلك؟

[ قمت بتجربة الليست بوكس وظهرت بها البيانات تماما مثل الكومبوبوكس ولكن لا اعرف كيف اختار اكثر من إختيار ولا أعرف أيضا كيف سيتم تسجيله فى الجدول فى قاعدة البيانات ]

وهل إذا تم إضافة أنواع أخرى سوف تدرج تلقائيا أم أحتاج إلى إضافتها لأنه يوجد لدى أكثر من 15 نوع سداد لجميع الأصناف

Pro 1_2.rar

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 16 فبراير 2010 في 16:46

#17

يتم التعامل معهم نفس التعامل مع الادوات السابقة

لقد قمت بتعديل المثال

Pro 1_2.rar

تم تعديل هذه المشاركة بواسطة format82 في 17 فبراير 2010 في 22:30

#18
format82 كتب:

يتم التعامل معهم نفس التعامل مع الادوات السابقة

لقد قمت بتعديل المثال

اخى الفاضل

إن ما اقصده هو اذا ارت مثلا لصنف من الاصناف ان يكون انواع سداده هى ( نقدى - شهرى - اجل ) فكيف استطيع ان اختار اكثر من نوع سداد لكل صنف وهى عند اضافة انواع جديدة سوف تدرج تلقائيا للقائمة التى اختار منها واتمنى ان تكون تشيك بوكس واسف لتعبك ولكن يمكنك عمل مثال صغير وسوف اقوم بعون الله بإستكمال الباقى ووفقك الله فى عملك واشكرك لسرعة ردك

#19

red_scorpion1 كتب:

أخى الفاضل

بعد محاولات عديدة ومحاولة فهم كيف يتم إستدعاء البيانات تم بحمد لله الوصول إلى المطلوب ولكن هناك طلب

إذا أردت أن أعمل ( تشيك بوكس أو ليست بوكس ) بدلا ( الكومبوبوكس ) وذلك لأنواع السداد حيث أننى أريد أن أختار أكثر من نوع سداد للصنف الواحد فكيف يمكن ذلك؟

[ قمت بتجربة الليست بوكس وظهرت بها البيانات تماما مثل الكومبوبوكس ولكن لا اعرف كيف اختار اكثر من إختيار ولا أعرف أيضا كيف سيتم تسجيله فى الجدول فى قاعدة البيانات ]

وهل إذا تم إضافة أنواع أخرى سوف تدرج تلقائيا أم أحتاج إلى إضافتها لأنه يوجد لدى أكثر من 15 نوع سداد لجميع الأصناف

للرفع للرفع للرفع

#20

تقوم بعمل جدول جديد وتحفظ فيها جميع الانواع (نقدى - شهرى - اجل,الخ ) واذا كان هنالك بيانات جديدة تقوم بحفها من جديد

ثم تضيف ComboBox لجلب البيانات

اكتب هذا الكود في onCreate

ComboBox1.Clear;
ADOTable1.DisableControls;
try
ADOTable1.Open;
ADOTable1.First;
while not ADOTable1.Eof do
begin
ComboBox1.Items.Add(ADOTable1.FieldByName('itm_nm').AsString);
ADOTable1.Next;
end;
finally
ADOTable1.EnableControls;
end;

لقد قمت بتعديل المثال

Pro 1.rar

#21

اخى الفاضل ليس هذا هو ما اقصده وانما اود ان تكون ListBox لدى مثل الشكل التالى حيث يمكننى إختيار أكثر من نوع سداد للصنف الواحد

cl3.JPG

فكيف أصل لذلك بارك الله لكم

#22

غير في خصائص ListBox

Multiselect = True

Extendselect =False

#23
format82 كتب:

غير في خصائص ListBox

Multiselect = True

Extendselect =False

اين اجد تلك الخصائص رغم اننى استحدم دلفى 2010 و اضفت DBLookupListBox ولم اجد ذلك فى خصائصه وهل بذلك سوف تظهر بالشكل السابق حيث هذا هو المطلوب? ام ان هناك اداة اخرى تقوم بالمطلوب لأنى وجدت أداه تسمى CheckListBox ولكن لم استطيع ربطها مع الداتا بيزا حيث أننى اريد أن أستبدل الكومبوبوكس الذى اوضحت فكرته لى بجعله ليست بوكس يمكن فيها اكثر من اختيار ويكونوا على هيئة تشيك بوكس كما فى الصورة

cl3.JPG

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 20 فبراير 2010 في 01:20

#24

انا اعمل بدلفي 7 سوف تجدها في STANDARD لم اعمل بدلفي 2010 من قبل ليس لدي فكرة

غير في خصائص ListBox العادية

Multiselect = True

Extendselect =False

وليس لدي CheckListBoX يمكنك استعمالها بدلا من ListBox العادية

انا لا افهم ما غرض من اختيار اكثر من اجابة لن تسطيع حفظ اكثر من قيمة في حقل واحد راجع تصميم الجداول

#25

format82 كتب:

انا اعمل بدلفي 7 سوف تجدها في STANDARD لم اعمل بدلفي 2010 من قبل ليس لدي فكرة

غير في خصائص ListBox العادية

Multiselect = True

Extendselect =False

وليس لدي CheckListBoX يمكنك استعمالها بدلا من ListBox العادية

انا لا افهم ما غرض من اختيار اكثر من اجابة لن تسطيع حفظ اكثر من قيمة في حقل واحد راجع تصميم الجداول

الغرض من اختيار امثر من نوع سداد هو انه بعض تلك الاصناف تخرج مع نوع نقدى فورى و اجل -- والبعض الاخر مثلا يخرج مع اجل فقط وهكذا

كنت افكر بأن يم تسجيل بيانات السداد فى جدول اخر او فى نفس الجدول على هيئة ارقام وعند عمل استعلام يتم ظهور اسمائها ولكن لا ادرى كيف

وصلت لخصائص اليست بوكس ولكن كيف اقوم بتعبئتها بالبيانات جيث انها لا يوجد لها اى مسار للبيانات

مواضيع مشابهة