ورود

View Full Version : مشکل با اعمال فیلتر بر روی جداول DBISAM



Mohammad S
سه شنبه 27 مرداد 1383, 13:17 عصر
با سلام خدمت تمامی دوستان عزیز
مشکلی که من دارم مربوط به اعمال فیلتر روی جداول از نوع DBISAM هست. دستوری که برای فیلتر نوشتم اینه:

DM.DBISAMKarmandan.Filter:='Family = '+QuotedStr(Karmandan_Show.Edit1.Text+'**');
علت اینکه دو تا * گذاشتم اینکه وقتی یکی بود، هنگام فیلتر کردن، اولین حرف فامیلی که زده می شد، مثل این بود که شما حرف اشتباه تایپ کرده اید ولی وقتی حرف دوم را میزدم، پیدا می کرد ؟! :?
من هم دو تا * گذاشتم و مشکل حل شد.
حالا مشکلی که دارم اینه: چون من در OnDrawDataCell مربوط به DBGrid، با استفاده از کدهای زیر، رکوردهای دو رنگی شده اند:

if (DM.DBISAMKarmandan.RecNo mod 2) = 0 then
Karmandan_Show.DBISAMDBGrid1.Canvas.Brush.Color := $00D6FCFC // Ñä ÒÑÏ ÈÑÇí ÑÏíÝ
else
Karmandan_Show.DBISAMDBGrid1.Canvas.Brush.Color := $00FFBFBF ; // Ñä ÈäÝÔ ÈÑÇí ÑÏíÝ

if gdSelected in State then
begin
DBISAMDBGrid1.Canvas.Brush.Color := clWhite; // Ñä Òãíäå ÓØÑí ˜å Ñæí Âä ˜áí˜ ÔÏå
DBISAMDBGrid1.Canvas.Font.Color := clRed; // Ñä ÓØÑí ˜å Ñæí Âä ˜áí˜ ÔÏå
end;

Karmandan_Show.DBISAMDBGrid1.Canvas.FillRect(Rect) ;
Karmandan_Show.DBISAMDBGrid1.DefaultDrawDataCell(R ect, Field, State);
گویا مشکل Table در DBISAM اینه که پس از اعمال فیلتر، پروسیجر فوق دوباره اجرا نمی شده همچنین OnCalcField هم گویا اجرا نمی شه چون من فیلدی به نام ردیف تعریف کردم که در واقع شماره رکورد جدول هست که پس از اعمال فیلتر، تغییر نمی کنه.
حالا من برای این مشکل عجیب غریب باید چکار کنم؟ :roll:

با تشکر :oops:

Mohammad S
چهارشنبه 28 مرداد 1383, 00:42 صبح
ورژن DBISAM که استفاده می کنم 4.01 هست.
یکی از مشکلاتم رو تونستم حل کنم (همون 2 تا ستاره *)
فقط باید در قسمت FilterOptions، گزینه foCaseInsensitive را برابر با True قرار می دادم
برای مشکل دوم یعنی عدم رفرش به موقع و اجرای فیلدهای محاسباتی یه برنامه نوشتم ولی چون حجمش زیاد بود نتونستم بذارم اینجا.

مشکل دوم اینکه بعد از انجام فیلتر، OnCalcFields دوباره اجرا نمی شه (در حالی که توسط ClietDataSet انجام می شه) .
لطفا اگر کسی می داند راه حل این مشکل چیست از بنده حقیر دریغ نفرماید :oops:

اگر بتوان بعد از عمل فیلتر، OnCalcField را دوباره اجرا کرد هم احتمالا مشکلم را حل خواهد کرد که باز راه حل آن را نمی دانم.
با تشکر

Mohammad S
پنج شنبه 29 مرداد 1383, 13:39 عصر
مشکل دوم اینکه بعد از انجام فیلتر، OnCalcFields دوباره اجرا نمی شه (در حالی که توسط ClietDataSet انجام می شه) .
نبود آقا!