Arkadaşlar merhaba
aşşagıdaki kodu kısaltmanın bir yolu varmı? 63 kere aynı işi yapınca memory hatası veriyorda
kesinlikle delphi hatalı. bende hata yok
procedure TForm1.BitBtn1Click(Sender: TObject);
var
k : integer;
i ,E : string;
begin
if listbox2.Count -1 = -1 then
begin
ShowMessage('Lütfen Mal Grubu Seçiniz !');
exit;
end;
begin
AdoTable1.Active := True;
Adotable1.Filtered := False;
E := '';
for k := 0 to listbox1.items.count -1 do
E := E + 'CATEGORY = '+ chr(39) + trim(listbox1.Items[k])+ chr(39) + ' OR ' ;
delete (E,length(E)-3,length (E));
Adotable1.Filter := E;
Adotable1.Filtered := True;
end;
// listbox2
begin
if listbox2.Count -1 = -1 then
begin
ShowMessage('Lütfen Mal Grubu Seçiniz !');
exit;
end;
begin
AdoTable2.Active := True;
Adotable2.Filtered := False;
E := '';
for k := 0 to listbox2.items.count -1 do
E := E + 'CATEGORY = '+ chr(39) + trim(listbox2.Items[k])+ chr(39) + ' OR ' ;
delete (E,length(E)-3,length (E));
Adotable2.Filter := E;
Adotable2.Filtered := True;
end;
// listbox3
begin
....
....
...
...
const
lbcount=63;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
k : integer;
i ,E : string;
mylb:Tcomponent;
begin
for a:=1 to lbcount do
begin
mylb:=findcomponent('listbox'+inttostr(a));
if (mylb as tlistbox).Count -1 = -1 then
begin
ShowMessage('Lütfen Mal Grubu Seçiniz !');
exit;
end;
AdoTable1.Active := True;
Adotable1.Filtered := False;
E := '';
for k := 0 to (mylb as tlistbox).items.count -1 do
E := E + 'CATEGORY = '+ chr(39) + trim((mylb as tlistbox).Items[k])+ chr(39) + ' OR ' ;
delete (E,length(E)-3,length (E));
Adotable1.Filter := E;
Adotable1.Filtered := True;
end;//for
end;
kodda ufak tefek hatalar olabilir netekim delphide yazmadım. ama {eğer doğru anladimsa }böle bişi olması lazım.
iyi çalışmalar...
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Tekrar selam.
Eğer table larının hepsi aynı anda açık olacaksa makinenin ramini arttırmayı dene.
şaka bir yana eğer hepsi aynı anda açık olacaksa var kısmında birtane
myadotable:=findcomponent('table'+inttostr(i));
if not (myadotable is Tadotable) then
begin
//bulduğun tablo adotable değil. kontrol işlemi gibisinden bişey yapabilirsin.
end;
(myadotable as Tadotable).filter:=.....
end;
gibi bişi olur.
ama eğer tabloların hepsinin aynı anda açık olması gerekmiyorsa sql kullanarak daha başarılı sonuçlar alabilirsin.
kolya gelsin..