View Full Version : فیلتر کردن ADO براساس دانستن شماره ردیف
یوسف زالی
یک شنبه 03 اردیبهشت 1391, 19:34 عصر
سلام.
فرض کنید جدولی داریم که "هیچ" فیلد یونیکی نداره مثلا اسم فقط توشه.
حالا در گرید می خواهیم بگیم از ردیف 3 تا 10 رو فیلتر کنه.
آیا این کار شدنی هست؟
چگونه؟
ممنون
hamid-nic
یک شنبه 03 اردیبهشت 1391, 22:11 عصر
سلام
از خاصیت filtered اون جدولی (ado table) که استفاده کردید می توانید استفاده کنید .
یوسف زالی
دوشنبه 04 اردیبهشت 1391, 09:38 صبح
عزیز من، این مورد رو که می دونم.
صورت سوال رو لطفا کامل بخون دوست من.
فیلد یونیکی وجود نداره و از recno نمی شه تو فیلتر استفاده کرد.
به دلایلی نمی تونم از رویداد onfiltered هم استفاده کنم.
ممنون از توجهت
mohsen24000
دوشنبه 04 اردیبهشت 1391, 10:47 صبح
نمیشه یه کوئری بزنی با فیلدهای مورد نظرت و یک فیلد Row بهش اضافه کنی و بعد فیلتر و یا...
یوسف زالی
دوشنبه 04 اردیبهشت 1391, 12:20 عصر
نه. قرار هست فقط با دونستن شماره ردیف هاش یا در نهایت بوک مارک هاش این فیلتر انجام بشه.
tiphooo
چهارشنبه 06 اردیبهشت 1391, 02:17 صبح
شاید این کد به دردتون بخوره
var
FBookMarkList: array of TVarRec;
i: Integer;
begin
ADOTable1.DisableControls;
// انتخاب رکوردهاي مورد نظر بر روي گريد
while not ADOTable1.Eof do
begin
if (ADOTable1.RecNo > 3) and (ADOTable1.RecNo <10 ) then
DBGrid1.SelectedRows.CurrentRowSelected:=True;
ADOTable1.Next;
end;
// تعيين سايز بوک مارک
SetLength(FBookMarkList, DBGrid1.SelectedRows.Count);
// ساخت آرايه از بوک مارک بر روي رکوردهاي انتخابي
for i:=0 to DBGrid1.SelectedRows.Count - 1 do
begin
FBookMarkList[i].VType := vtPointer;
FBookMarkList[i].VPointer := Pointer(DBGrid1.SelectedRows[i]);
ADOTable1.GotoBookMark(FBookMarkList[i].VPointer);
end;
// فيلتر رکوردهاي انتخاب شده
ADOTable1.FilterOnBookmarks(FBookMarkList);
ADOTable1.EnableControls;
ابتدا رکوردها را با استفاده از RecNo روی Grid انتخاب می کنیم بعدش رکوردهای انتخاب شده از Grid را با استفاده از Bookmark نشانه گذاری می کنیم
بعدش رکوردهای BookMark شده را فیلتر می کنیم
البته با یک مقدار تغییر احتمالا نیازی به انتخاب رکوردها از روی گرید نداشته باشید و مستقیم خود رکوردها رو Bookmark کنید
یوسف زالی
چهارشنبه 06 اردیبهشت 1391, 14:15 عصر
این کد اگر اشتباه نکنم پیمایش روی بوک مارک هاست نه فیلتر خروجی گرید.
البته راه جالبی هست.
راهی که رفتم این بود که در نهایت باز از Filtered استفاده کردم و در اون از accept بهره بردم.
این کد فیلتر نمی کنه درسته؟
ممنون
سعید صابری
چهارشنبه 06 اردیبهشت 1391, 14:18 عصر
چرا فیلتر هم انجام می دهد.
tiphooo
چهارشنبه 06 اردیبهشت 1391, 16:55 عصر
دستور
ADOTable1.FilterOnBookmarks(FBookMarkList);
همین کار را انجام می دهد یعنی رکوردهای بوک مارک شده را فیلتر می کند
چون دستور دارد روی ADOTable1 عمل می کند نه Grid
بعد از اجرای این دستور خاصیت Filtered جدول به صورت خودکار True می شود
یعنی اگر بخواهیم دوباره به حالت قبل از فیلتر و نمایش کل رکوردها برگردیم باید خاصیت Filtered را False کنیم دقیقا همان کاری که برای فیلتر معمولی انجام می دهیم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.