insufficient memory for this operation hatası

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
mbzsoft
Üye
Mesajlar: 1
Kayıt: 27 Haz 2022 07:56

insufficient memory for this operation hatası

Mesaj gönderen mbzsoft »

Dostlar günaydın;
Ben resmi dairede çalışıyorum. Delphi7 de geliştirdiğim Aile hekimleri yerleştirme programında "insufficient memory for this operation" hatası alıyorum.
Programın mantığı şöyle;
2 ayrı bilgisayardan işlem yapılıyor. 1 tanesi yönetim paneli, 1 tanesi de slayt makinesinde bağlı ekrana yansıtıyor. Problemde yansıtan bilgisayarda.
SHAREDMEMSIZE : 8192, SHAREDMEMLOCATOIN:0x5BDE yaptım.

hekimler.dbf alanlar; SIRADAKI, HAREKET, ADI .....
Yönetim panelinde SIRADAKI alanına X işareti ekliyoruz. ekrana yansıtan bilgisayar 2 adet Timer nesnesiyle çalışıyor. try except kullandım, hatayı yakaladım ama bir türlü aşamadım. Kodlar aşağıda veriyorum. Yardımcı olursanız sevinirim.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
try
dt.bul.Active:=False;
dt.bul.SQL.Clear;
dt.bul.SQL.Add('Select * From Hekimlistesi Where ID=:xid and SIRADAKI= :xsiradaki');
dt.bul.ParamByName('xid').AsInteger:=dt.donemID.AsInteger;
dt.bul.ParamByName('xsiradaki').AsString:='X';
dt.bul.ExecSQL;
dt.bul.Active:=True;
if dt.Hekimler.Locate('TC_NO', dt.bulTC_NO.AsString, [loCaseInsensitive]) then
Begin
Timer1.Enabled:=False; // sıradaki hekimde bekle
Timer2.Enabled:=True; // Hareket alanında değişiklik varmı
End
else
Begin
Label6.Caption:='Tercih yapacak kişi kalmadı';
dt.bul.Active:=False;
End;
except
Timer1.Enabled:=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
try
//TrimAppMemorySize;
// değişiklik varmı bak
dt.q1.Active:=False;
dt.q1.SQL.Clear;
dt.q1.SQL.Add('Select * From Hekimlistesi Where ID=:xid and TC_NO= :xtc');
dt.q1.ParamByName('xid').AsInteger:=dt.donemID.AsInteger;
dt.q1.ParamByName('xtc').AsString:=dt.HekimlerTC_NO.AsString;
dt.q1.ExecSQL;
dt.q1.Active:=True;
if (dt.q1HAREKET.AsString<>dt.HekimlerHAREKET.AsString) then
Begin
if dt.q1HAREKET.AsString='YR' then // yerleşti
Begin
Timer2.Enabled:=False; // sıradaki hekimin işlemi tamamlandı
FrmUyari.ShowModal;
Timer1.Enabled:=True; // sıradaki hekimi bul
dt.Hekimler.First;
dt.Hekimler.Refresh;
End
else if dt.q1HAREKET.AsString='YD' then // yer değiştirdi
Begin
Timer2.Enabled:=False; // sıradaki hekimin işlemi tamamlandı
FrmUyari.ShowModal;
Timer1.Enabled:=True; // sıradaki hekimi bul
dt.Hekimler.First;
dt.Hekimler.Refresh;
End
End
else
Begin
Timer2.Enabled:=True;
Timer1.Enabled:=True;
End
except
Timer2.Enabled:=False;
Timer1.Enabled:=True;
end;

end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: insufficient memory for this operation hatası

Mesaj gönderen freeman35 »

mbzsoft yazdı: 27 Haz 2022 08:18 Dostlar günaydın;
Ben resmi dairede çalışıyorum. Delphi7 de geliştirdiğim Aile hekimleri yerleştirme programında "insufficient memory for this operation" hatası alıyorum.
Programın mantığı şöyle;
2 ayrı bilgisayardan işlem yapılıyor. 1 tanesi yönetim paneli, 1 tanesi de slayt makinesinde bağlı ekrana yansıtıyor. Problemde yansıtan bilgisayarda.
SHAREDMEMSIZE : 8192, SHAREDMEMLOCATOIN:0x5BDE yaptım.

hekimler.dbf alanlar; SIRADAKI, HAREKET, ADI .....
Kodlarını <code> tag ına alırsan daha okunaklı olur.
yanlış hatırlamıyorsam dbf network desteklemiyor, Yani db localde tek bağlantı için tasarlanmış. Local db de dahi bu kadar eski şeyleri kullanmayın. sqlite çok daha verimli. LAN kullanımı için de firebird herzaman en iyisidir benim kanâtim.

Kod: Tümünü seç

dt.bul.Active:=False;
dt.bul.SQL.Clear;
dt.bul.SQL.Add('Select * From Hekimlistesi Where ID=:xid and SIRADAKI= :xsiradaki');
dt.bul.ParamByName('xid').AsInteger:=dt.donemID.AsInteger;
dt.bul.ParamByName('xsiradaki').AsString:='X';
dt.bul.ExecSQL;
dt.bul.Active:=True;
Bu kullanım bana göre gereksiz, ve hatalı. Her kullanımda, aynı TQuery ve SQL cümlesi kullanılacaksa bunu designtime da tanımlamak daha mantıklıdır.
ExecSQL result dönmeyecek sql cümllerinde kullanılır. ".Active:=" yerine ".Open;" yada ".Close;" daha anlaşılır olacaktır. İşlev değişmez, delphi nin code'u takip ederseniz anlaşılacaktır. Birde hangi bileşen transaction kullanıyor mu? bilmiyorum ve dbf bunu destekliyor mu? bunlara göre kodu düzenlemek gerekebilir.

Kod: Tümünü seç

dt.bul.Close;
dt.bul.ParamByName('xid').AsInteger:=dt.donemID.AsInteger;
dt.bul.ParamByName('xsiradaki').AsString:='X';
dt.bul.Open;
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla