Recent

Author Topic: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects  (Read 1449 times)

Al-Eid

  • New Member
  • *
  • Posts: 30

السلام علكيم
وجدت في إحدى الدورات طريقة لملأ comboxBox بهذه الطريقة
Code: Pascal  [Select][+][-]
  1. for i := 0 to ZQuery1.RecordCount-1 do
  2. Begin
  3. Combobox1.AddItem(ZQuery1.FieldByName('FieldName'),TObject(ZQuery1.FieldByName('FieldKey')));
  4. ZQuery1.Next;
  5.  end;
  6.  
  7.  

وعند تغيير قيمة combobx يمكن أن نتعرف على قيمة الحقل الأساسي
بالطريقة التالية
Code: Pascal  [Select][+][-]
  1. Integer(Combobox1.Items.Objects[Combobox1.ItemIndex]);
  2.  
  3.  

السؤال
هذه الطريقة صلحت معي مع الحقول الرقمية ولكن عندما يكون الحقل
الرئيسي حرفي varchar فإنها لا تصلح مع العلم أن الكود الذي أستخدمته كما يلي

Code: Pascal  [Select][+][-]
  1. Edit1.text :=string(Combobox1.Items.Objects[Combobox1.ItemIndex]);
  2.  

عند الترجمة كل شيئ تمام ولكن عند التنفيذ يحدث حطأ
ممكن حل لهذه المشكلة وشكرا


nouzi

  • Moderator
  • Full Member
  • *****
  • Posts: 229
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #1 on: September 12, 2021, 08:25:37 pm »
اهلا العيد كيف الحال
بخصوص طلبك هناك مكونات مخصصة لهذا الغرض اطلاع على
DBComboBox
DBLookupComboBox
my english is  bad
Lazarus 2.0.6 free pascal 3.0.4
Lazarus trunk  free pascal trunk 
System : linux mint 19.3 64bit  windows 7 64bit

Al-Eid

  • New Member
  • *
  • Posts: 30
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #2 on: September 13, 2021, 08:11:56 am »
اهلا العيد كيف الحال
بخصوص طلبك هناك مكونات مخصصة لهذا الغرض اطلاع على
DBComboBox
DBLookupComboBox

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

nouzi

  • Moderator
  • Full Member
  • *****
  • Posts: 229
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #3 on: September 14, 2021, 01:40:44 am »
الامثل
DBComboBox
my english is  bad
Lazarus 2.0.6 free pascal 3.0.4
Lazarus trunk  free pascal trunk 
System : linux mint 19.3 64bit  windows 7 64bit

Al-Eid

  • New Member
  • *
  • Posts: 30
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #4 on: September 18, 2021, 11:34:09 am »
السلام عليكم

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

مثلا عندي جدول لمجموعة من التلاميذ بحيث كل مجموعة  تنتمي إلى قسم ما مرتبيطن بهذا القسم عن طريق حقل ID_class
أريد أن أضع combobox بها أسماء الأقسام وعند إختيار قسم يظهر لي تلاميذ القسم في DBGrid

الكود الذي وجدته يصلح مع حقل ID من integer  ولكن لم يصلح مع حقل varchar

وإذا كان يمكن عن طريق DBCombobox فكيف ذلك
وشكرا مسبقا

Zaher

  • Hero Member
  • *****
  • Posts: 640
    • parmaja.org
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #5 on: September 18, 2021, 10:22:52 pm »
انت تقوم بتعبئة الكومبو بعنوان الحقل وليس قيمة الحقل
استغرب ان يترجم معك
يجب ان تمرر قيمة الحقل لا الحقل نفسه عند النص
ZQuery1.FieldByName('FieldName').AsString

Code: Pascal  [Select][+][-]
  1. Combobox1.AddItem(ZQuery1.FieldByName('FieldName'),TObject(ZQuery1.FieldByName('FieldKey')));


الحل هكذا
Code: Pascal  [Select][+][-]
  1. Combobox1.AddItem(ZQuery1.FieldByName('FieldName').AsString, TObject(ZQuery1.FieldByName('FieldKey').AsInetger));

اما بالنسبة للنص لا يمكن وضع النص في محل TObject كما فعلنا مع الرقم

يفضل أن تلجا لحل آخر
« Last Edit: September 18, 2021, 10:41:03 pm by Zaher »

Zaher

  • Hero Member
  • *****
  • Posts: 640
    • parmaja.org
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #6 on: September 18, 2021, 10:30:04 pm »
أو اذا تركت الكود نفسه  هنا انت خزنت بهذا السطر اسم و الحقل الخاص بالمفتاح و ليس قيمة المفتاح
Code: Pascal  [Select][+][-]
  1. Combobox1.AddItem(ZQuery1.FieldByName('FieldName').AsString,TObject(ZQuery1.FieldByName('FieldKey')));
يمكنك استعمال ال TField المخزن
Code: Pascal  [Select][+][-]
  1. TField(Combobox1.Items.Objects[Combobox1.ItemIndex]).AsInteger;
وهنا كنص اذا كان من نوع النص
Code: Pascal  [Select][+][-]
  1. TField(Combobox1.Items.Objects[Combobox1.ItemIndex]).AsString;

Al-Eid

  • New Member
  • *
  • Posts: 30
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #7 on: September 19, 2021, 10:09:03 am »
أخي Zaher
لقد نسيت أن أكتب .AsInteger و .AsString يبدو أنه عليا أن أركز أكثر في كتابة مشاركاتي   :D

أما بالنسبة لـ TField فهي تخرج لي رسال خطأ سواء مع الأنواع Integer و String هذه هي الرسالة :
Project Project1 raised exception class EXternal SIGSEGV'
In file 'Unit1.pas at line 61

أنا حاليا أستخدم إثنين من combobox أحدها تحمل الإسم والثانية تأخد قيم حقل المفتاح وأجعل الثانية مخفية
شكرا لكم جميعا

Zaher

  • Hero Member
  • *****
  • Posts: 640
    • parmaja.org
Re: سؤال حول إستخدام Combobox1.AddItem و Combobox1.Items.Objects
« Reply #8 on: September 19, 2021, 11:17:53 am »
توقعت هذا الشيء، لكن علي التنويه لانه هنالك من سيقرأ في المستقبل
Quote
أنا حاليا أستخدم إثنين من combobox أحدها تحمل الإسم والثانية تأخد قيم حقل المفتاح وأجعل الثانية مخفية
يفضل استعمال مصفوفة داخلية بدل من عنصر

 

TinyPortal © 2005-2018