birden fazla güncelleme işlemi yapabilmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

birden fazla güncelleme işlemi yapabilmek

Mesaj gönderen a_o »

merhaba arkadaşlar

projemde ilk olarak kayıt yapıyorum. daha sonra aynı ürünle ilgili kayıt yapacaksam önce veritabanımdan kontrol ettiriyorum. o ID ye sahip bilgiler daha önce kaydolmuşmu olmamışmı? eğer olmamışsa veri kaydetme işlemleriyle kaydediyorum. eğer daha önce kayıt yapılmışsa o ID ye sahip ürün üzerinde güncelleme yapılıyor.
işlemleri baştan yapalım. yeni bi ürün için kayıt yaptım. aynı ürün üzerinde güncelleştirme yapıyorum. buraya kadar sorun yok. eğer bir kez daha güncelleme yapmak istersem bana aşağıdaki hata msjını veriyor.
project Teklifformu.exe raised exception class EDatabaseError with message 'sorguktaksit: CommandText does not return a result set'. Process stopped. Use Step or Run to continue.
program bu hatayı verdikten sonra aşağıdaki kodda takılıp kalıyor.

Kod: Tümünü seç

veri.sorguktaksit.Close;
öyle olunca bende try except bloğu içine aldım kodlarımı. istediğim hatayı verdirebiliyorum.ama sorunumu çözmüyo bu :(

kodlarımın tamamı;

Kod: Tümünü seç

var s1:string;
begin
try
veri.sorguktaksit.Active:=false;
veri.sorguktaksit.Active:=true;
veri.sorguktaksit.Close;
veri.sorguktaksit.SQL.Clear;
veri.sorguktaksit.SQL.Add('select * from STKTAKSITKREDI where ID='+QuotedStr(mmenu.kod.Text));
veri.sorguktaksit.Open;

if veri.sorguktaksit.RecordCount=0 then
begin
veri.ktaksit.Insert;
veri.ktaksit.FieldByName('ID').AsString:=mmenu.kod.Text;
veri.ktaksit.FieldByName('TOPLAMTUTAR').AsFloat:=TUTAR;
veri.ktaksit.FieldByName('AYSAYISI').AsInteger:=ay;
veri.ktaksit.FieldByName('AYLIKTUTAR').AsFloat:=TUTAR/AY;
veri.ktaksit.FieldByName('BANKA').AsString:=banka;
veri.ktaksit.Post;
end
else
begin
s1:=Format('update STKTAKSITKREDI set TOPLAMTUTAR=%18.2f, AYSAYISI=%d, AYLIKTUTAR=%18.2f, BANKA=%s where ID=%s',[TUTAR,ay,TUTAR/ay,QuotedStr(banka),QuotedStr(mmenu.kod.Text)]);
  with veri.sorguktaksit do
    begin
       close;
       sql.clear;
       sql.text:=s1;
       execsql;
    end;

    end;

except
 begin
  showmessage('Hata!');
 end;
bunu nasıl düzeltebilirim? yani kullanıcılar 1 den fazla güncelleme işlemi yapabilirler. 1 kez güncelleme yapılabilmesini nasıl önlerim?

herkese ii çalışmalar
kolay gelsin
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Kodun hatalı.

Kod: Tümünü seç

veri.sorguktaksit.Active:=false; 
veri.sorguktaksit.Active:=true; 
veri.sorguktaksit.Close;
Active ile Close aynı işlemi yapar. Sen bir sonraki işlemde ExecSQL yaptığın şeyi Active := TRUE yaparak açmaya çalışıyorsun.
Yukarıdaki kodun son iki satırı fazla. Sadece:

Kod: Tümünü seç

veri.sorguktaksit.Active:=false; 
yazman gerekiyor.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam çok tşk ederim . dediğiniz gibi yapınca hata vermeden çalıştı. :)
kolay gelsin
ii çalışmalar
Cevapla