8. Seminer soruları - değişkene değer atama

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

8. Seminer soruları - değişkene değer atama

Mesaj gönderen loxka »

8.nci seminerde böyle bir sql tanımlama var, firebird de derleyemedim, derleyemediğim içinde FIRMA_HESAP tablomdaki FIRMA_NO alanı, GELEN_FATURA tablomdaki FIRMA_NO alanı ile eşleşmiyor,

Seminerdeki SQL kod:

Kod: Tümünü seç

select @dlr_firma_no=firma_no 
from gelen_fatura 
where gelen_fatura=@gelen_fatura

Malum SP şu şekilde :

Kod: Tümünü seç

ALTER PROCEDURE SPI_GELEN_FATURA_URUN (
    gelen_fatura_no integer,
    urun_no integer,
    adet integer,
    birim_fiyat numeric(4,2))
as
declare variable dlr_kayit_sayisi integer;
declare variable dlr_firma_no 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;

(bu şekilde derlemeye çalıştım ama, beceremedim)

 select  count(*)
  from gelen_fatura
  where  gelen_fatura_no =:gelen_fatura_no
    INTO DLR_KAYIT_SAYISI;
 

 select count(*)
  from FIRMA_HESAP
  where FIRMA_NO = :dlr_firma_no
  INTO DLR_KAYIT_SAYISI;
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:dlr_firma_no,0,0);

        update FIRMA_HESAP set
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:birim_fiyat where
    FIRMA_NO = :dlr_firma_no;
end

Malum Trigger ise şu şekilde:

Kod: Tümünü seç

ALTER TRIGGER gelen_fatura_urun_ai0
active after insert position 0
AS
begin
execute procedure spi_gelen_fatura_urun ( new.gelen_fatura_no,NEW.URUN_NO, NEW.adet,new.birim_fiyat);
end
yardımlarınız için teşekkür ederim..
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 »

Arkadaşlar, sorunum üzerinde denemediğim şey kalmadı, hala problemim aynen devan ediyor. Yardımlarınızı ve fikirlerinizi sabırla bekliyorum.
Bu muazzam programın içinde ben neyim?, sadece bir label..

Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul
İletişim:

Mesaj gönderen lazio »

bahsettiğim örneği hatırlamıyorum ama;

Kod: Tümünü seç

select @dlr_firma_no=firma_no
from gelen_fatura
where gelen_fatura=@gelen_fatura
bu kod sanırım Firebird için değil SYBase için.

Bildiğim kadarıyla Firebird için ;

Kod: Tümünü seç

select firma_no from gelen_fatura
where gelen_fatura.gelen_fatura = :gelen_fatura
into dlr_firma_no;
şeklinde düzünlemen gerekir..
Resim

..::|YeşilMavi|::..

loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

Deli olacam ama.. :evil: ne denediysem olmuyor. hocam sizin vediğini kodda olmadı. Parametre hatası veriyor.

Fahrettin abinin verdiği SYBase kodu şu şekilde :

Kod: Tümünü seç

SELECT @DLR_FIRMA_NO =FIRMA_NO
FROM GELEN_FATURA
WHERE GELEN_ FATURA_NO=@GELEN_FATURA_NO
Firebirde uyarlamak istediğimde aşağıdaki gibi:

Kod: Tümünü seç

select firma_no  from gelen_fatura
where gelen_fatura_no = :gelen_fatura_no
into dlr_firma_no; 
The insert failed because a column definition includes validation constraints.
validation error for column FIRMA_NO, value "*** null ***".
hatası alıyorum hep.


hazır kod olsun istemiyorum mantığını anladım ama firebirdde derleyemiyorum, bir bakıp hatam nerde söylermisiniz.
Bu muazzam programın içinde ben neyim?, sadece bir label..

Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul
İletişim:

Mesaj gönderen lazio »

The insert failed because a column definition includes validation constraints.
validation error for column FIRMA_NO, value "*** null ***".
bu hatanın öncekiyle alakası yok, burada bir tabloya kayıt eklerken not null bir alana değer vermediğinizi söylüyor. hatta field ın adı FIRMA_NO..
SP nin içinde INSERT işleminin yapıldığı yerleri inceleyin.
Resim

..::|YeşilMavi|::..

loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

Hocam SP aynen böyle Commit ettiğimde hiç bir problem yok SQL çalışıyor, Insertten önceki ve sonraki durumları inceliyorum, bir sorun yok gibi geliyor bana. Size zahmet incelermisiniz.
Saat 00:25 artık yoruldum.

Kod: Tümünü seç

ALTER PROCEDURE SPI_GEL_FAT_UR_FATURA_HESAP (
    dlr_firma_no integer,
    birim_fiyat numeric(4,2),
    adet integer,
    gelen_fatura_no integer)
as
declare variable dlr_kayit_sayisi integer;
begin

 select firma_no from gelen_fatura
where gelen_fatura_no= :gelen_fatura_no
into dlr_FIRMA_NO;

  select count(*)
  from FIRMA_HESAP
  where FIRMA_NO = :dlr_firma_no
  INTO DLR_KAYIT_SAYISI;
  if (DLR_KAYIT_SAYISI=0) then 
    insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:dlr_firma_no,0,0);

    update FIRMA_HESAP set
    TOPLAM_ALACAK = TOPLAM_ALACAK+:ADET*:birim_fiyat where
    FIRMA_NO = :dlr_firma_no;

END
Bu muazzam programın içinde ben neyim?, sadece bir label..

Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul
İletişim:

Mesaj gönderen lazio »

insert into FIRMA_HESAP(FIRMA_NO,TOPLAM_BORC,TOPLAM_ALACAK) values(:dlr_firma_no,0,0);
bu satırsa :dlr_firma_no nun değerini kontrol edin, muhtemelen null geliyor..
...
...
select firma_no from gelen_fatura
where gelen_fatura_no= :gelen_fatura_no
into dlr_FIRMA_NO;
// burada dlr_FIRMA_NO nun değerinin null olup olmadığını kontrol edip eğer null ise bir exception fırlatabilirsin..
...
....
Resim

..::|YeşilMavi|::..

loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

Mesaj gönderen loxka »

Projeyi şimdi açıp çalışma fırsatı buldum, Bir anlam veremedim ama herşey normal, yani çalışıyor, sevinmedim desem yalan olur.:)
hocam yardımlarınız ve ilgiliniz için teşekkrüler..
Bu muazzam programın içinde ben neyim?, sadece bir label..

mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Mesaj gönderen mrtblt »

Belki alakasi yok ama bende bisey sormak istiyorum. Alan adi degeri diyelimki integer ben onu trigger icinde kod yazarken nasil string e donusturebilirim. Cunku bu degeri baska bir tabloda string olarak kaydedecegim.

Yani delphide str(x,y) procedure kullanarak yaptigimiz gibi birseyi trigger icerisinde nasil yapilabilecegi sormak istedigim

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

Mesaj gönderen aslangeri »

s.a.
cast komutu var onu bir incele.
ancak integer bir alanı direk stringin içine yazabilirsin zaten. bi dönüştürme yapmana gerek yok. (diye biliyorum)
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

cast veya convert fonksiyonlari bu isi yapiyor....

Kod: Tümünü seç

cast(ALAN1 as varchar(20))
gibi mesela....

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)

Cevapla