stored procedure için yardım

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ı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

stored procedure için yardım

Mesaj gönderen bobasturk »

Merhabalar, herkeze hayırlı sabahlar.

Kod: Tümünü seç

CREATE PROCEDURE SPI_AIDAT_ODEME (
    BINA_ADI VARCHAR(40),
    DAIRE_NO INTEGER,
    KALAN FLOAT)
AS
DECLARE VARIABLE DLR_KAYIT_SAYISI INTEGER;
begin 
  select count(*) 
    from DAIRE_DURUM where BINA_ADI =:BINA_ADI and DAIRE_NO=:DAIRE_NO
    INTO DLR_KAYIT_SAYISI;
    if (DLR_KAYIT_SAYISI=0) then
    insert into DAIRE_DURUM(BINA_ADI,DAIRE_NO,BORCU) values(:BINA_ADI,:DAIRE_NO,0);
  update DAIRE_DURUM set
    BORCU = BORCU+:KALAN where
    BINA_ADI = :BINA_ADI and  DAIRE_NO=:DAIRE_NO;
End
yukarıdaki sp de yapmak istediğim dairelerin aidat giriş lerini tutmak ve daire durum tablosunda ödeme toplamlarını, ödemesi gerekenler toplamını ve bunların fark durumlarını tutmak isteme amacı ile yaptım. stok takibi benzeri bişi. sp ler durum tablosuna otomatik topluyor ve farklarını alıyorum.

amacım paket prg. yapmaktı ve sp nin insert, delet veya update esnasında bina adı ve daire no ile işlem yapması idi.

yukarıdaki sp çalışıyor. nasıl çalışıyor bina adı değişince aynı daire no olanları ayırıp işlem yapabiliyor fakat bina adı aynı olunca iş karışıyor ve işlem yapmayıp exception hatası veriyor.

tablolar şöyle

DAİRE BİLGİ
idno
binaadı
daireno
adısoyadı

AİDATODEME
idno
binaadı
daireno
aidattutarı
odenenaidat

BORCODEME
idno
binaadı
daireno
odenentutar

DAİREDURUM
binaadı
daireno
aidattoplamı
od-aidattoplamı
borcu

bu sp yi nasıl düzenlemeliyim ki işlemlerini bina adı ve daire no yu göz önüne alarak yapsın. yani kontrolu iki alan ile yapsın.
şimdilik durumu değiştirip paket prg den çıkardım diğer tek alanlı olarak yapıyorum.

teşekkür ve saygılarımla
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

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

Mesaj gönderen rsimsek »

Merhaba hocam, bina adları aynı olsa da normalde blok adı ile birbirlerinden ayrılmaları gerekir. Yine de en iyi kullanım string key ler kullanmayıp bina isimlerinin olduğu bir tabloda ID verip isimleri kaydetmek ve detay tablosunda da bu ID ye bağlı daire no ve ilgili kişi isimlerini kaydetmek. Böylece veritabanına hem perfomans sağlarsın (çünkü sayısal alanlarda daha az işlem gerektirdiğinden hızlı çalışır) hem de aynı isimli binalar olsa da primary key ID olduğundan unique liği bozmamış olursun. :idea: İki tablo bu söylediklerim için, bir tablo da daire isimlerini master tablo olarak kullanacak ödeme detay tablosu toplam üç tablo işini görecektir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba ustam,

bu meşgul durumunda dahi cevap verdiğin için teşekkürler. utanıyorum falan desen yetmez heralde ama yapamıyorum dediğim şey kullanıcı hatası imiş yani benim hatam meğersem tanımlaması yapılmamış daireye işlem yapmaya çalışıyormuşum. o bölüme hemen mesaj verdirmeliyim.

peki ustam yukarıdaki sp de bi aksilik yok dimi. çalışıyor ama usta gözü ile bakınca diye soruyorum. çalışıyor olması en uygun kod olduğu anlamına gelmiyor.

sp de yapmak istediğim çalışırken iki alanı birden kontrol etsin iki alan uyuşuyorsa üzerine işlemi yapsın uyuşmuyorsa yeni satır açsın. bilmem anlatabildimmi? :oops: :oops: :oops:

yeni bir sorunum daha çıktı formun birini ana menuden tıklayınca açıyor iyi güzel kapatıp tekrar açmak isteyince access violation hatası alıyorum. prg kapatıp açmam gerekiyor. nerde yanlış var bulamadım ama baya uğraştıracak heralde.

teşekkür ve saygılarımla
kolay gelsin.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Cevapla