memory hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

memory hatası

Mesaj gönderen Armani »

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 :) :) :)

Kod: Tümünü seç

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
....
....
...
...

Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

AdoTable ve filtre yerine, AdoDataset ve SQL kullan.

Kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Eğer listbox sayın çoksa döngü ile halledebilirsin.

Kod: Tümünü seç

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 :D 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
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

aslangeri selam
bu kod listbox için iyi ama adotable dende 63 tane var
gülmeyin :oops:
bunuda herseferinde bir döngüye soksak çalışınca yine memoryi yemezmi.

arkadaşlar. bir arkadaşım öneri yaptı. Sabitlerini unit2 ye al değişkenleri normal unitinde yaz dedi. bu sizce çözüm olabilirmi
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

Tekrar selam.
Eğer table larının hepsi aynı anda açık olacaksa makinenin ramini arttırmayı dene. :D
şaka bir yana eğer hepsi aynı anda açık olacaksa var kısmında birtane

Kod: Tümünü seç

var
myadole:Tcomponent
bunuda diğeri gib find ettir.

Kod: Tümünü seç

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..
Cevapla