Firebird - Seminer8 - Yanlış hesap sorunu

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
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Firebird - Seminer8 - Yanlış hesap sorunu

Mesaj gönderen loxka »

8. Seminerdeki örnek üzerinde çalışıyorum, FIRMA_HESAP tablosundaki TOPLAM_ALACAK alanına, anlatıldığı üzere GELEN_FATURA bakiyesini aktaracaktım, ancak işin içine BIRIM_FIYAT alanı işin içine girince karıştım biraz. Bunun için hazırladığım SP şu şekilde

Kod: Tümünü seç

 select count(*) 
  from FIRMA_HESAP where FIRMA_NO = :FIRMA_NO
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:FIRMA_NO,0,0);
  update FIRMA_HESAP set
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:birim_fiyat where
    FIRMA_NO = :FIRMA_NO;
   suspend;
Input Parameters de ise

Kod: Tümünü seç

 
birim_fiyat numeric(4,2),
firma_no integer,
adet integer
tanımlı..

sorunum burda başlıyor. SP yi tetiklemek için yazdığım Triger çalışmıyor bir türlü :

Kod: Tümünü seç

execute procedure SPI_GEL_FAT_UR_FATURA_HESAP  NEW.ADET, new.BIRIM_FIYAT;
aşağıdaki gibi bir hata alıyorum;

Kod: Tümünü seç

Invalid token.
invalid request BLR at offset 36.
parameter mismatch for procedure SPI_GEL_FAT_UR_FATURA_HESAP.
Şimdi, SP de bir sorun var ama ben çıkamadım işin içinden :oops:
Firebird'e yeni başladığım için, semineri izlerken kaçırdığım bişeyler var ama defalarca izlememe rağmen takıldım kaldım.
Yardımlarınız için teşekkür ederim
En son loxka tarafından 26 Şub 2007 11:39 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bu muazzam programın içinde ben neyim?, sadece bir label..
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
procedureye parametreleri parantez içinde göndermeniz lazım.
sanırım parantezleri unutmuşsunuz. verdiği mesajda parametreleri unutmuşsunuz diyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

hocam, parametreleri firebird içinden tanımlıyorum, COMMIT etmeden önceki görüntüsü şu şekilde;

Kod: Tümünü seç

ALTER PROCEDURE SPI_GEL_FAT_UR_FATURA_HESAP (
    birim_fiyat numeric(4,2),
    firma_no integer,
    adet integer)
as
declare variable dlr_kayit_sayisi integer;
begin
  select count(*) 
  from FIRMA_HESAP where FIRMA_NO = :FIRMA_NO
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:FIRMA_NO,0,0);
  update FIRMA_HESAP set
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:birim_fiyat where
    FIRMA_NO = :FIRMA_NO;
   suspend;
end
Bu muazzam programın içinde ben neyim?, sadece bir label..
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

SP nin son hali şu şekilde, trigerıda aşağıdaki gibi düzenleyince çalıştı. Ancak bu sefer yapması gerekeni yapmıyor yani FIRMA_HESAP tablosundaki TOPLAM_ALACAK alanına ADET*BIRIM_FİYAT yapması gerekirken ADET*URUN NO (gelen faturadaki ürün_no) yapıyor.
Bunu neden yapıyor anlamış değilim.

Kod: Tümünü seç

ALTER PROCEDURE SPI_GEL_FAT_UR_FATURA_HESAP (
    gelen_fatura_no integer,
    birim_fiyat numeric(4,2),
    firma_no integer,
    adet integer)
as
declare variable dlr_kayit_sayisi integer;
begin
  select count(*) 
  from FIRMA_HESAP where FIRMA_NO = :FIRMA_NO
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:FIRMA_NO,0,0);
  update FIRMA_HESAP set
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:BIRIM_FIYAT where
    FIRMA_NO = :FIRMA_NO;
    GELEN_FATURA_NO = :gelen_fatura_no;
   suspend;
end 
TRIGER

Kod: Tümünü seç

execute procedure SPI_GEL_FAT_UR_FATURA_HESAP NEW.BIRIM_FIYAT, NEW.ADET, NEW.GELEN_FATURA_NO, NEW.URUN_NO ;
Bu muazzam programın içinde ben neyim?, sadece bir label..
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

execute procedure SPI_GEL_FAT_UR_FATURA_HESAP(NEW.BIRIM_FIYAT, NEW.ADET, NEW.GELEN_FATURA_NO, NEW.URUN_NO);
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

Hocam değişen bişe olmadı maalesef.
Galiba ben şurda birşeyde yanlış yapıyorumda nasıl çözeceğimi bilmiyorum .
GELEN_FATURA_URUN tablomun AfterInsert olayına iki SP atıyorum.
SP URUN_STOK tabloma toplam ürünü hesaplıyor.

Kod: Tümünü seç

ALTER PROCEDURE SPI_GELEN_FATURA_URUN (
    urun_no integer,
    adet integer)
as
declare variable dlr_kayit_sayisi integer;
begin
  select count(*) from URUN_STOK
  where URUN_NO = :URUN_NO 
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into URUN_STOK(URUN_NO,TOPLAM_GIRIS,TOPLAM_CIKIS) values(:URUN_NO,0,0);
  update URUN_STOK set 
    TOPLAM_GIRIS = toplam_giris+:adet where
    URUN_NO = :URUN_NO;
end
İkinci SP yine after insertta:

Kod: Tümünü seç

ALTER PROCEDURE SPI_GEL_FAT_UR_FATURA_HESAP (
    gelen_fatura_no integer,
    birim_fiyat numeric(4,2),
    firma_no integer,
    adet integer)
as
declare variable dlr_kayit_sayisi integer;
begin 
  select count(*) 
  from FIRMA_HESAP where FIRMA_NO = :FIRMA_NO 
  INTO DLR_KAYIT_SAYISI; 
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:FIRMA_NO,0,0); 
  update FIRMA_HESAP set 
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:BIRIM_FIYAT where 
    FIRMA_NO = :FIRMA_NO; 
    GELEN_FATURA_NO = :gelen_fatura_no; 
   suspend; 
end
Herhalde karışıklık burda bu iki SP işlemi yapınca firma_no lar Urun_No lar birşekilde karışıyor. sonuçta URUN_STOK tablomda yanlış sonuç veriyor, FIRMA_HESAP Tablomda. Kafam çok karıştı, Yardımlarınızı bekliyorum.
Bu muazzam programın içinde ben neyim?, sadece bir label..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

TRIGGER lerde bu SP leri nasıl kullanıyorsun :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

GELEN_FATURA_URUN_AI0 Trigerı

Kod: Tümünü seç

execute procedure spi_gelen_fatura_urun NEW.ADET, NEW.URUN_NO;
GELEN_FATURA_URUN_HESAP_AI0 Trigerı

Kod: Tümünü seç

execute procedure SPI_GEL_FAT_UR_FATURA_HESAP(NEW.BIRIM_FIYAT, NEW.ADET, NEW.GELEN_FATURA_NO, NEW.URUN_NO);
Bu muazzam programın içinde ben neyim?, sadece bir label..
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Çünkü SPI_GEL_FAT_UR_FATURA_HESAP için SP deki parametre sırası ile triggerdan çağırdığınız sıra karışık olmuş...

SP tanımında : gelen_fatura_no, birim_fiyat, firma_no, adet
triggerdan cagirirken : BIRIM_FIYAT, ADET, GELEN_FATURA_NO, URUN_NO

SP tanımına gore birim_fiyat ile adeti çaparacakken. Bu parametrelere ADET ile URUN_NO yu gonderince bunlari çarpmasi çok normal ;)

Kolay gelsin...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

Abi teşekkür ederim, sorunum halloldu. Demekki sıralamayada özen göstermek gerekiyor. Kolay gelsin.
Bu muazzam programın içinde ben neyim?, sadece bir label..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

loxka yazdı:Abi teşekkür ederim, sorunum halloldu. Demekki sıralamayada özen göstermek gerekiyor. Kolay gelsin.
Sıralamadan kasıt; birinci parametre ne ise onu göndermek, ikinci ne ise onu göndermek tabi ki :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

elma isteyene armut vermek gibi... :D
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

kadirkurtoglu yazdı:elma isteyene armut vermek gibi... :D
Vermemek diyecektin herhalde :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

rsimsek yazdı:
kadirkurtoglu yazdı:elma isteyene armut vermek gibi... :D
Vermemek diyecektin herhalde :wink:
evet... :)
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Cevapla