firebird de değişkeni field gibi kullanma

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
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

firebird de değişkeni field gibi kullanma

Mesaj gönderen burakb44 »

merhaba arkadaşlar,

firebirde de trigger içinde tanımladığım bi alanı field gibi kullanmak istiyorum kod aşağıdaki gibi yardımcı olursanız sevinirim.

AS
declare variable DepoNumarasi VarChar(100);
begin
DepoNumarasi = ' ';
DepoNumarasi = 'Depo_'+Cast(New.depokodu As varchar(100));
Update Stok Set DepoNumarasi = COALESCE(DepoNumarasi,0) - new.miktari where stok_kodu = new.stok_kodu;
end
anemos
Üye
Mesajlar: 110
Kayıt: 02 Nis 2007 07:51
Konum: Sakarya / Hendek

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen anemos »

Kod: Tümünü seç

AS
declare variable DepoNumarasi VarChar(100);
begin
DepoNumarasi = ' ';
DepoNumarasi = 'Depo_'+Cast(New.depokodu As varchar(100));
execute statement 
'Update Stok Set ' || DepoNumarasi  || '= COALESCE(' || DepoNumarasi || ',0) - new.miktari where stok_kodu = new.stok_kodu;'
end
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen burakb44 »

anemos yazdı:

Kod: Tümünü seç

AS
declare variable DepoNumarasi VarChar(100);
begin
DepoNumarasi = ' ';
DepoNumarasi = 'Depo_'+Cast(New.depokodu As varchar(100));
execute statement 
'Update Stok Set ' || DepoNumarasi  || '= COALESCE(' || DepoNumarasi || ',0) - new.miktari where stok_kodu = new.stok_kodu;'
end

kodu aynen yazdığımda triggeri oluşturdu ancak kayıt girince şöyle bi hata verdi

Error Message:
----------------------------------------
Overflow occurred during data type conversion.
conversion error from string "Depo_".
At trigger 'PESINSATISDETAY_AI0' line: 9, col: 3.

neyi convert etmeye çalıştığını açıkçası anlamadım,
bakma imkanınız varsa sevinirim. kolay gelsin.
anemos
Üye
Mesajlar: 110
Kayıt: 02 Nis 2007 07:51
Konum: Sakarya / Hendek

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen anemos »

Aşağıdaki gibi deneyin.

Kod: Tümünü seç

DepoNumarasi = 'Depo_' || Cast(New.depokodu As varchar(100));
execute statement
'Update Stok Set ' || DepoNumarasi  || '= COALESCE(' || DepoNumarasi || ', ''0'') - new.miktari where stok_kodu = new.stok_kodu;'
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen burakb44 »

anemos yazdı:Depo numarası null ise "0" ata demişsiniz. Bundan olabilir. Aşağıdaki gibi kullanırsanız sanırım olacak.

Kod: Tümünü seç

'Update Stok Set ' || DepoNumarasi  || '= COALESCE(' || DepoNumarasi || ', ''0'') - new.miktari where stok_kodu = new.stok_kodu;'

ondan değil sanırım yukarıda depo numarasını 'Depo_' sonuna ekleme çalıştığım satır ile ilgili bi hata veriyor söylediğiniz gibi yapap denedim yine aynı şekilde hata verdi
bakabilirmisiniz tekrar
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen unicorn64 »

biraz konu dışı ama her bir deponuz için stok tablonuzda depo_ ile başlayan bir alanınız mı var?
neden ayrı bir tabloda takip etmek yerine stok tablosunda bir alandan takip ediyorsunuz ki, yeni bir depo eklendiğinde alan eklemeniz gerekcektir...

ayrıca aldığınız hatanın sebebi de sql tarafındaki string birleştirmesinde + değil || işareti kullanmanız gerek. + yı görünce toplama işlemi yapmaya çalışıyor ve 'Depo_' yu sayıya çeviremediği için patlıyor...

Kod: Tümünü seç

DepoNumarasi = 'Depo_' || Cast(New.depokodu As varchar(100));
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen burakb44 »

şöyle söyleyeyim yeni depo açılışında scriptle program içinden stok tablosuna o fieldi creat ediyorum. ekleme veya çıkartmalardada anemos un verdiği destek ile hangi depoya eklenip çıkaralcağını parametrik yaptım yani işlem yapılırken hangi deponun numarası girilmişse depo_ nin sonuna depo numarasını ekleyip o fieldi artırıp azaltıyorum .

her ikinizede verdiğiniz değerli cevaplar için teşekkür ederim. kolay gelsin
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen unicorn64 »

eğer program henüz sahada uygulanmaya başlanmadıysa veya sınırlı sayıda kullanılıyorsa yapıyı gözden geçirmekte fayda var derim...
ileriye dönük düşündüğünüzde beklenmedik sıkıntılar; raporlamalarda, hesaplamalarda gereksiz uğraşlarla sıkıntılarla yüzleşmek durumunda kalabilirsiniz şuanki yapıyla...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Re: firebird de değişkeni field gibi kullanma

Mesaj gönderen burakb44 »

unicorn64 yazdı:eğer program henüz sahada uygulanmaya başlanmadıysa veya sınırlı sayıda kullanılıyorsa yapıyı gözden geçirmekte fayda var derim...
ileriye dönük düşündüğünüzde beklenmedik sıkıntılar; raporlamalarda, hesaplamalarda gereksiz uğraşlarla sıkıntılarla yüzleşmek durumunda kalabilirsiniz şuanki yapıyla...

anladım henüz sahaya sürmedik :) aslında tek depo mantığıyla çalışan bi yazılımımımz var zaten bunu çoklu depo ile başka şehirlerde şubeleri olan firmalar için hazırlıyorum ihtiyaç nedeniyle, henüz tamamlanmadı yazılım , sizin ne gibi bi öneriniz olabilir peki çoklu depo ve seyyar araç kullanımı ile ? değerli fikirlerinizi yazarsanız sevinirim.
Cevapla