PDA

View Full Version : رفع اشكال يك كد



hentjanson
چهارشنبه 09 مرداد 1387, 09:02 صبح
سلام به تمام اساتيد يك سوال داشتم من يك كد جستجو نوشتم كه موقع فيلتر مجموع فعلي dbgrid رو نشون ميده مثلا ميگه 3 تا .

حالا سوال من اينه روند كار درسته ولي وقتي فيلتر از بين ميره اين label مجموع كل بانك رو نشون ميده در صورتي كه بايد چيزي نشون نده اين كد منه ؟


procedure TForm1.MaskEdit9Change(Sender: TObject);
var
FieldName : String;
begin
FieldName := DBGrid1.Columns[ComboBox1.ItemIndex].FieldName;
DataModule2.ADOTable1.Filtered := False;
DataModule2.ADOTable1.Filter := FieldName+' Like '+QuotedStr('%'+MaskEdit9.Text+'%');
IF MaskEdit9.Text <> '' Then
DataModule2.ADOTable1.Filtered := True;
StaticText9.Caption := IntToStr(DataModule2.ADOTable1.RecordCount);
end;


با تشكز از تمام اساتيدي كه در اين بحث شركت مي كنند .

mzjahromi
چهارشنبه 09 مرداد 1387, 09:57 صبح
procedure TForm1.MaskEdit9Change(Sender: TObject);
var
FieldName : String;
begin
FieldName := DBGrid1.Columns[ComboBox1.ItemIndex].FieldName;
DataModule2.ADOTable1.Filtered := False;
DataModule2.ADOTable1.Filter := FieldName+' Like '+QuotedStr('%'+MaskEdit9.Text+'%');
IF MaskEdit9.Text <> '' Then
begin
DataModule2.ADOTable1.Filtered := True;
StaticText9.Caption := IntToStr(DataModule2.ADOTable1.RecordCount);
end
else
statictext2.caption:='';
end;

hentjanson
چهارشنبه 09 مرداد 1387, 13:14 عصر
سلام من از اين كد شما استفاده كردم ولي بازم نشد
برنامه رو ميزارم اگه ميتونيد يك نگاهي بكنيد مشكل رو به من بگيد

saeed_d
چهارشنبه 09 مرداد 1387, 14:04 عصر
سلام
فکر کنم یه اشتباه ناخواسته اتفاق افتاده: توی کدی که جناب mzjahromi نوشته اند یک خط مونده به آخر (خط قبل از End) باید Statictext9 نوشته شود نه StaticText2

dkhatibi
چهارشنبه 09 مرداد 1387, 14:07 عصر
statictext2.caption:=''
بعد از Else در خط آخر به

statictext9.caption:='***';
تغییر دهید.
یک کم حواستونو جمعتر کنید عزیز چان

Hsimple11
چهارشنبه 09 مرداد 1387, 14:30 عصر
وقتي فيلتر از بين ميره

چه زمانی و چگونه فیلتر از بین میره. هر موقع بیلتر از بین رفت Caption لیبل را '' کنید.

hentjanson
چهارشنبه 09 مرداد 1387, 14:32 عصر
سلام دوستان با اين مشكل روبرو ميشم ؟

filter cannot be opened

hentjanson
چهارشنبه 09 مرداد 1387, 15:02 عصر
سلام دوستان من با يك مشكل روبرو شدم كه نتونستم حلش كنم .
با اين خطا مواجه ميشم موقع سرچ برنامم ؟


filter cannot be opened
اين برنامه منه كه طبق نظرات اساتيد تغييراتي در اون انجام دادم ولي الان با اين مشكل روبرو شدم ميشه راهنماييم كنيد .

Hsimple11
چهارشنبه 09 مرداد 1387, 18:08 عصر
این مشکل ربطی به شماش رکوردهایتان ندارد. فیلترگیری شما مشکل دارد. مثلا :


adotable1.Filtered := false;
adotable1.Filter := 'name like'''+ edit1.Text +'%''';
if edit1.Text <> '' then adotable1.Filtered :=true else
adotable1.Filtered := false;

در ضمن چون ستون مورد فیلترگیری را بر اساس ItemIndex کمبوباکس انتخاب میکنید باید حتما یک دور کمبوباکس باز و بسته شود تا ItemIndex صحیح را برگرداند.

hentjanson
چهارشنبه 09 مرداد 1387, 18:57 عصر
سلام دوست من اين كد رو حالا چطئر اصلاح كنم ؟ تا اين مشكلم هم حل بشه


procedure TForm1.MaskEdit9Change(Sender: TObject);
var
FieldName : String;
begin
FieldName := DBGrid1.Columns[ComboBox1.ItemIndex].FieldName;
DataModule2.ADOTable1.Filtered := False;
DataModule2.ADOTable1.Filter := FieldName+' Like '+QuotedStr('%'+MaskEdit9.Text+'%');
IF MaskEdit9.Text <> '' Then
begin
DataModule2.ADOTable1.Filtered := True;
StaticText9.Caption := IntToStr(DataModule2.ADOTable1.RecordCount);
end
else
statictext9.caption:='***';
end;

merced
چهارشنبه 09 مرداد 1387, 21:37 عصر
فقط در حالتی که فیلد عددی رو به روش رشته ای (داخل کوتیشن) فیلتر می کنی این ایراد پیش میاد.
یه جوری باید نوع فیلد رو تشخیص بدی و یه تابع حرفه ای تر برای فیلتر بنویسی

hentjanson
چهارشنبه 09 مرداد 1387, 22:05 عصر
مرسي ميشه تو اين بحث كمكم كنيد تا به اتمام برسونمش .
يا يك مثال برام بزني

Hsimple11
پنج شنبه 10 مرداد 1387, 02:27 صبح
نوع فیلد خود را تغییر دهید.
زمانی که از فیلدی عددی استفاده میکنید نمیتوانید از عملگرهایی مانند Like و یا Quotation یا همان علامت '' استفاده کنید. این علامات مخصوص کار با مقادیر رشته ای می باشند. مثلا اگر فیلد shomareketab از نوع Integer هست، فیلتر آن را تنها به این صورت میتوانید بنویسید :


ADOTable1.Filter := 'shomareketab = ' + (Edit1.Text);

تابع QuotedStr هم که به یک رشته Quotation می دهد یا همان آن را در '' قرار میدهد در مورد فیلدهای Int عمل نخواهد کرد.

dkhatibi
پنج شنبه 10 مرداد 1387, 11:37 صبح
یا نوع فیلتر خود را تغییر دهید. 2 تا فیلتر بگذازید من بیشتر این کار رو می کنم.