Kayit problemi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Kayit problemi

Mesaj gönderen mrtblt »

Mesaji buraya yazdigima gore fb 2 kullandigimi belirtmeye geek yok sanirim :lol:

Asagida yazdigim kod ile stok kartlari tablosunun 'bakiye' isimli alanini stok hareket kartlarindaki degerleri sql vasitasi ile hesaplayaip guncellemek istiyorum. Guncelleme islemini baslattigimda guncellemenin yapildigini yani bakiye isimli alanlara hesaplanan degerlein yazildigini gorebiliyorum. Fakat program kapatilip tekrar acildiginda bakiye isimli alandaki degerlerin ucmus oldugunu goruyorum. Yani guncelleme esnasinda sanirim degerler fiziksel olarak db ye yazilmiyor ve hafizada tutuluyor. Program kapatildiginda ise dogal olarak bu veriler ucuyor.
Bu degerlerin guncelleme esnasinda db ye fiziksel olarak yazilimini nasil saglayabilirim.

Kullandigim kod asagidadir.

Not : Eminim Sp kullan diyen arkadaslar olacaktir. Ama DB programciliginda henuz cok yeniyim. SP kullanmayi denedim ama yapamadim.

Kod: Tümünü seç

  dm.lks_items.first;
  while not dm.lks_items.eof do
  begin
    dm.lks_items.edit;
    str1:= dm.lks_items.FieldByName('kod').asstring;
    dm.q_sh.Close;
    dm.q_sh.SQL.Clear;
    dm.q_sh.SQL.Add('select sum(amount*carpan) as bky from lks_stkhar where kod =');
    dm.q_sh.SQL.Add(''''+str1+'''');
    dm.q_sh.Open;
    dm.lks_items.FieldByName('kalan').asbcd :=dm.q_sh.FieldByName('bky').asbcd;
    dm.lks_items.post;
    dm.lks_items.Next;
  end;
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

Bir duzeltme yapayim. Mesajimda belirttigim gibi alan adi 'bakiye' degil 'kalan ' dir.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
:ara transactionn,ibdataset, updatesql
lks_items in tipi nedir. ibdataset mi ibtable mi? ibquery mi ?vs.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

commit yapmazsan kalıcı olarak db ye yazılmış olmaz..

birde öneri;

stok hareketleri olduğu zaman bir trigger ile bakiyeleri düzenlemen daha sağlıklı olur sanırım..
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

lks_items in tipi ibtable dir.
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

Bu sorunu cozmek icin commit falan islemiyo. Sorunu cozmeme yardimci olabilirseniz sevinirim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@aslangeri kardeşimiz ipuçlarını vermiş aramadınız mı :?:

IBTable.Transaction.CommitRetaining; yapmazsanız kalıcı olarak VT ye yansımış olmaz
:idea:

Aslında bu işin kolay yolu şöyle olmalı: Çünkü çok sayıda kayıt varsa bu yöntem çok kastırır. Olayı VT de yapmak lazım :idea:

Kod: Tümünü seç

update stok_kart
set bakiye = (select coalesce(sum(giren), 0) - coalesce(sum(cikan), 0)from stok_hareket where stok_id = stok_kart.id)
Burada giren çıkan tek alanda da olabilir. O zaman da ona göre düzenlemek gerekir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

Sayin simsek

Soyliyebilecegim tek sey " Sizi opuyorum"
Vt de 2 aydir basarmaya calistigim trigger sorununu sizin verdiginiz ornek sayesinde cozdum. Ama asil onemli olan burada Trigger yazarken sorgu mantigini kavramis olmam.

Sonsuz tesekkurler.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Eyvallah, ne demek.. Aslında teşekkürü, paylaşım halkasında kopukluk yapmadan sürdürebilmek olarak tercih ediyoruz.
Hem merak etme kimse öğrenmiş doğmuyor, biz de başkalarından öğrendik :wink: :) :)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla