PDA

View Full Version : نمایش رکوردهای یک تیبل در یک کامبو باکس



aminzadeh_mojtaba
دوشنبه 12 مرداد 1383, 19:17 عصر
من می خواهم رکوردهای یک تیبل را در یک کامبو باکس نشان دهم.من این کار رو از طریق خواندن تمامی رکوردها و اضافه کردن آنها به کامبوباکس انجام دادم. (در حین ایجاد فرم این کار انجام می شود)ولی مشکل این است که اگر تعداد این رکوردها زیاد شود آیا سرعت اجرای برنامه کاهش نمی یابد.
اگر راهی به نظرتان می رسد یا کامپوننتی دارید لطفا دریغ نفرمایید

عنوان را متناسب با محتوی انتخاب کنید!
سپیدار

سار
دوشنبه 12 مرداد 1383, 19:26 عصر
از DBLookupComboBox استفاده کن.

nasr
دوشنبه 12 مرداد 1383, 19:38 عصر
سلام
یه جستجو بکنید
من یک بار در مورد همین موضوع مشکل داشتم

اون تاپیک می تونه به شما کمک کنه

موفق باشید

moradi_am
دوشنبه 12 مرداد 1383, 21:52 عصر
از DBLookupComboBox استفاده کن.
با عرض معذرت در این حالت باید از DBComboBox استفاده شود .DBLookupComboBox برای ارتباط بین دو جدول استفاده میشود .

سار
سه شنبه 13 مرداد 1383, 00:43 صبح
از DBLookupComboBox استفاده کن.
با عرض معذرت در این حالت باید از DBComboBox استفاده شود .DBLookupComboBox برای ارتباط بین دو جدول استفاده میشود .ارتباط بین دو جدول؟
ولی برای نمایش فیلدی از یک جدول هم ازش استفاده کردم.
میشه بیشتر شرح بدید؟

orion188
سه شنبه 13 مرداد 1383, 01:23 صبح
سلام
منم وقتی از DBComboBox معمولی استفاده کردم، جواب نداد. فقط فیلد فعال رو نشون میده.
البته ...DBLookup رو هنوز تست نکردم

vatal
سه شنبه 13 مرداد 1383, 01:27 صبح
با سلام .......................... :roll:
من هم فکر میکنم مطلبی رو که جناب moradi_am درسته !
به این جهت که فقط فیلدها رو میخواهد نمایش بده :shock:
معمولا وقتی از DBLookup combobox استفاده میشه که فیلد Lookup هم
برای ارتباط دو جدول وجود داشته باشه !!!!!!!!!!!!!1 :idea: :flower: :heart:

moradi_am
سه شنبه 13 مرداد 1383, 08:40 صبح
لازمست توضیحی در این مورد بدم .
همه دوستان به نحوی راست میگویند .
dbcombobox برای وقتی مناسب است که تعداد آیتمهای مختلف یک فیلد کم هست مثل فیلد جنسیت که فقط دو آیتم دارد و یا مدرک تحصیلی که 7-8 آیتم بیشتر ندارد.در اینصورت مقادیر مختلف را در خاصیت items میریزیم و در موقع ورود اطلاعات ازش استفاده میکنیم . مقدار انتخاب شده در رکورد جاری ذخیره میشود.
dblookupcombobox دو کارکرد میتواند داشته باشد : یکی همین موضوع که آیتمها زیاد است و میخواهیم آنرا از یک جدول بیاوریم . در اینصورت لازمست که خاصیتهای listsource,listfield,keyfield را مقدار دهی کنیم .با انتخاب یک آیتم نشانگر رکورد هم در جدول مربوطه جابجا میشود .
حالت دوم اینکه میخواهیم با انتخاب یک آیتم فیلد دیگری از جدول دیگر مقدار دهی شود .مثلا با انتخاب نام کالا در فایل اصلی انبار، مقدار کد کالا در جدول فاکتور ذخیره شود . در اینصورت باید علاوه بر خواص قبلی خاصیتهای datasource,datafeild نیز مقدار دهی شود که مربوط به جدول و فیلد مورد نظر دیگر است .
بنابراین جواب دوستمان همان جواب جناب سار هست (dblookupcombobox) حالت اول . و با عرض معذرت بنده اشتباه کردم .

_alish_
سه شنبه 13 مرداد 1383, 09:24 صبح
دوست عزیر سلام
خدمتتان عرض کنم که من در Source کامپوننت dblookupcombobox که دیدم چطور دارد اضافه می کنم دیدم که اونهم از While استفاده کرده فقط تفاوت آن لین بود که از TList برای تغییر مستقیم استفاده می کرد
فقط دقت کنید که ombobox برای لیست کردن مقدار بسیار زیاد فیلدها نمی باشد حال بستگی به برنامه شما دارد و حال که اینقدر دقت دارید شاید بتوانید از Thread ها استفاده کنید برای پر کردن کامبو ولی مطمئن باشید که سرعت کامپیوتر زیاد است و تاثیر آنچنانی در اضافه کردن یکی یکی در Combo موجب نمی شود


کد کامپوننت dblookupcombobox
که به این نتیجه رسیدم که اشتباه است ذکر نمایید

DataSet := FListLink.DataSet;
FKeyField := GetFieldProperty(DataSet, Self, FKeyFieldName);
try
DataSet.GetFieldList(FListFields, FListFieldName);
except
DatabaseErrorFmt(SFieldNotFound, [Self.Name, FListFieldName]);
end;

procedure TDataSet.GetFieldList(List: TList; const FieldNames: string);
var
Pos: Integer;
Field: TField;
begin
Pos := 1;
while Pos <= Length(FieldNames) do
begin
Field := FieldByName(ExtractFieldName(FieldNames, Pos));
if Assigned(List) then List.Add(Field);
end;
end;