XML --> UDF --> DB /*yapmaya çalışırken hata*/ :(

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ı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

XML --> UDF --> DB /*yapmaya çalışırken hata*/ :(

Mesaj gönderen huseyinkucuk »

Arkadaşlar, merhaba...
Delphi tarafında oluşturacağım XML formatında bir yazıyı firebird'e gönderiyorum...
misal:

Kod: Tümünü seç

<KAYIT>
<SATIR>
<HESAP_ID>30</HESAP_ID>
<FIS_TURU>3</FIS_TURU>
<OLUSTURAN_KISI>1</OLUSTURAN_KISI>
<TARIH>25.03.1982</TARIH>
<ACIKLAMA>AÇIKLAMALAR, FALAN DA FİLAN DA...</ACIKLAMA>
<BORC_TUTARI>1500</BORC_TUTARI>
<ALACAK_TUTARI></ALACAK_TUTARI>
</SATIR>
<SATIR>
<HESAP_ID>30</HESAP_ID>
<FIS_TURU>3</FIS_TURU>
<OLUSTURAN_KISI>1</OLUSTURAN_KISI>
<TARIH>25.03.1982</TARIH>
<ACIKLAMA>BİŞEYLER...</ACIKLAMA>
<BORC_TUTARI></BORC_TUTARI>
<ALACAK_TUTARI>1500</ALACAK_TUTARI>
</SATIR>
</KAYIT>
Yaptığım birçok udf ile bu xml'nin uygunluğunu ve ayrışmasını sağlıyorum...

Örneğin 1. UDF_KONTROL_ET; UDF'si XML uygusna "UYGUN XML" gibisinden bir mesaj döndürüyor, uygun değilse probleme göre farklı mesajlar döndürüyor...
2. UDF_SATIRLARA_AYIR; UDF'si XML'nin ilk <SATIR>....</SATIR> bloğunu geri döndürüyor...
3. UDF_ILK_SATIRI_CIKART; UDF'si de UDF_SATIRLARA_AYIR UDF'si ile ilk satırı alınmış XML'den ilk <SATIR></SATIR> bloğunu siliyor
4. SP_HUCRELERE_AYIR stored procunun içinde de birçok UDF mevcut ve bunlar da BORC_TUTARI, ALACAK_TUTARI, FIS_NO vb. hücrelerin değerini tek tek geri döndürüyor...

Bunlarla birlikte yazdığım formül (en azından geçici olarak, deneme amaçlı yazdığım Stored Procedurenin içeriği) yaklaşık olarak aşağıdaki gibidir:

Kod: Tümünü seç

select UDF_KONTROL_ET(XML) from RDB$DATABASE
into :L_UYGUN_MU;
if (:L_UYGUN_MU<>"UYGUN XML") then
exception HATAVER;

/*BURADA İLK SATIR L_SATIR DEĞİŞKENİNE ALINIYOR...*/
select UDF_SATIR_DONDUR(XML) from RDB$DATABASE
into :L_SATIR;

/*YUKARIDA ALINAN İLK SATIR XML İÇERİĞİNDEN SİLİNİYOR*/
select UDF_ILK_SATIRI_CIKART(XML) from RDB$DATABASE
into:XML;

/*L_SATIR boş değil ve null değil ise döngüye devam...*/
while ((L_SATIR<>'') and (not(L_SATIR is null))) do
begin

     /*L_SATIR içindeki hücre bilgilerini ayır ve değişkenlere al*/
      select 
                hesap_id,
                fis_turu,
                olusturan_kisi,
                tarih,aciklama,
                borc_tutari,
                alacak_tutari
        from
            SP_HUCRELERE_AYIR(:L_SATIR)
        into 
             :l_hesap_id,
             :l_fis_turu,
             :l_olusturan_kisi,
             :l_tarih,
             :l_aciklama,
             :l_borc_tutari,
             :l_alacak_tutari;


      /*DEĞİŞKENLERE ALINMIŞ BİLGİLERİ TABLOYA KAYDET*/
      insert into tbl_yevmiye_defteri(
                        HESAP_ID,
                        FIS_TURU,
                        OLUSTURAN_KISI,
                        TARIH,
                        ACIKLAMA,
                        BORC_TUTARI,
                        ALACAK_TUTARI)
             values(
                        :l_fis_turu,
                        :l_olusturan_kisi,
                        :l_tarih,
                        :l_aciklama,
                        :l_borc_tutari,
                        :l_alacak_tutari;
                       );

/*İLK SATIR L_SATIR DEĞİŞKENİNE ALINIYOR...*/
select UDF_SATIR_DONDUR(XML) from RDB$DATABASE
into :L_SATIR;

/*YUKARIDA ALINAN İLK SATIR XML İÇERİĞİNDEN SİLİNİYOR*/
select UDF_ILK_SATIRI_CIKART(XML) from RDB$DATABASE
into:XML;
end;
Bu prosedürü çalıştırdığımda 10 saniye kadar SQL kumsaatini görüyorum, kum saati gidiyor ve 15-20 saniye sonra bana şu hata mesajı ve altında iki adet düğme geliyor;
Hata Mesajı: "Connection was lost to database:
MUHASEBE (D:\Belgeler\Bilgisayarla İlgili\Delphi Uygulamalarım\Muhasebe1\Veri Tabani\VeriTabani.fdb)"
1. düğme "close database"
2. düğme "restore connection"

Bunun sebebi ne olabilir? Ben 3 günden beri çeşitli şekillerde denedim ama bir türlü başaramadım... Sonsuz döngüye girmesinden şüpheleniyorum fakat veri tabanımın boyutunda herhangi bir artış yok, kayıtlarda herhangi bir artış yok...
UDF'leri oluşturan DLL dosyalarını da tek tek kontrol ettim, herhangi bir problem yok? Bunun sebebi ne olabilir? Bu konuda bana yardımcı olursanız sevinirim... Herkese iyi çalışmalar...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

ibexpertin parali surumunde stored procedurleri adim adim izleyebiliyor, degiskenlenlerin anlik degerlerini gorebiliyorsunuz.
deneme surumunu probleminizi cozmek icin kullanabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Üstad. Cevap için teşekkürler, fakat adımlarda -benim mantığıma göre- herhangi bir hata yok (yine de ib expert'in söylediğiniz sürümünü arayıp indiricem).
Peki sizce böyle bir kullanımda hata var mı?
Yani UDFler Veri tabanıyla bu derece hızlı çalışabilir mi normalde?
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Arkadaşlar, problemi çözdüm... Basit bir hataymış... null değeri paraya çevirmeye çalışıyormuşum... Herkese kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Cevapla