View'den veri cekme problemi

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
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

View'den veri cekme problemi

Mesaj gönderen mrtblt »

Merhaba

Nakit Hareketler icin bir tablom var.

Kod: Tümünü seç

CREATE GENERATOR GEN_TBL_FIN_NAKIT_ID;

CREATE TABLE TBL_FIN_NAKIT (
    ID                INTEGER NOT NULL,
    ODEYEN_ID         INTEGER,
    TAHSILDAR_ID      INTEGER,
    TARIH             DATE DEFAULT 'NOW',
    ACIKLAMA          VARCHAR(100),
    MIKTAR_ODEYEN     DECIMAL(12,2) NOT NULL,
    MIKTAR_TAHSILDAR  DECIMAL(12,2) NOT NULL,
    CREATEDON         TIMESTAMP DEFAULT 'NOW' NOT NULL,
    CREATEDBY         INTEGER DEFAULT 1 NOT NULL,
    LASTUPDATEON      TIMESTAMP DEFAULT 'NOW' NOT NULL,
    LASTUPDATEBY      INTEGER DEFAULT 1 NOT NULL
);
Bu tablodaki verileri asagidaki View ile isliyorum

Kod: Tümünü seç

CREATE OR ALTER VIEW V_FIN_HESAP(
    TRNSID,
    HESAP,
    CL_NAME,
    TRNSDATE,
    FLAG,
    TRNSTYPE,
    TRNSAMOUNT,
    CARPAN)
AS
select TRS.ID, TRS.hesap_id, C.CLIENT, TRS.TARIH, 'CHF' as flag, 'TAHSILAT' as trnstype ,TRS.miktar as trnsamount,TRS.carpan from TBL_FIN_TRANSACTIONS TRS left join TBL_FIN_CLIENTS C on C.id = TRS.cari_id where TRS.islem_tipi='TAHSILAT'
UNION
select TRS.ID, TRS.hesap_id, C.CLIENT, TRS.TARIH, 'CHF' as flag, 'ODEME' as trnstype ,TRS.miktar as trnsamount,TRS.carpan from TBL_FIN_TRANSACTIONS TRS left join TBL_FIN_CLIENTS C on C.id = TRS.cari_id where TRS.islem_tipi='ODEME'
UNION
select NKT.ID, NKT.ODEYEN_ID, 'TRANSFER - '||(select hesap_adi from TBL_FIN_HESAPLAR where id=NKT.tahsildar_id)||' *** '||NKT.aciklama, NKT.TARIH, 'NKT' as flag, 'ODEME' as trnstype ,NKT.MIKTAR_ODEYEN as trnsamount,-1 from TBL_FIN_NAKIT NKT left join TBL_FIN_HESAPLAR C on C.id = NKT.odeyen_id
UNION
select NKT.ID, NKT.TAHSILDAR_ID, 'TRANSFER - '||(select hesap_adi from TBL_FIN_HESAPLAR where id=NKT.odeyen_id)||' *** '||NKT.aciklama, NKT.TARIH, 'NKT' as flag, 'TAHSILAT' as trnstype ,NKT.miktar_tahsildar as trnsamount,1 from TBL_FIN_NAKIT NKT left join TBL_FIN_HESAPLAR C on C.id = NKT.tahsildar_id
UNION
select AF.ID, AF.HESAP, 'ACILIS FISI - '||C.HESAP_ADI, AF.TARIH, 'ACL' as flag, 'TAHSILAT' as trnstype ,AF.miktar as trnsamount,AF.carpan from TBL_FIN_ACILIS AF left join TBL_FIN_HESAPLAR C on C.id = AF.HESAP WHERE AF.flag = 'NKT' and AF.carpan=1
UNION
select AF.ID, AF.HESAP, 'ACILIS FISI - '||C.HESAP_ADI, AF.TARIH, 'ACL' as flag, 'ODEME' as trnstype ,AF.miktar as trnsamount,AF.carpan from TBL_FIN_ACILIS AF left join TBL_FIN_HESAPLAR C on C.id = AF.HESAP WHERE AF.flag = 'NKT' and AF.carpan=-1
;
Daha sonra bu View i bir SQL sorgusunda kullaniyorum

Kod: Tümünü seç

SELECT HES.*, GIRIS, CIKIS,BAKIYE FROM TBL_FIN_HESAPLAR HES 
left join (select HESAP, sum(TRNSAMOUNT) as GIRIS from V_FIN_HESAP where TRNSTYPE='TAHSILAT' group by HESAP) as VHARG
on HES.ID=VHARG.HESAP
left join (select HESAP, sum(TRNSAMOUNT) as CIKIS from V_FIN_HESAP where TRNSTYPE='ODEME' group by HESAP) as VHARC
on HES.ID=VHARC.HESAP
left join (select HESAP, sum(TRNSAMOUNT*CARPAN) as BAKIYE from V_FIN_HESAP group by HESAP) as VHARB
on HES.ID=VHARB.HESAP
ORDER BY HESAP_ADI
Sorunum su sekilde. TBL_FIN_NAKIT tablosuna bir kayit ekleyip TBL_FIN_HESAPLAR tablosunun bir gride bagli oldugu formu acmaya calistigimda access violation hatasi aliyorum.

Sorunun cozumu icin yardimci olursaniz memnun olurum

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

Re: View'den veri cekme problemi

Mesaj gönderen mrtblt »

Daha sonra view'i aradan cikarip queryi direkt TBL_FIN_NAKIT dosyasindan veri cekerek olusturdum fakat sorun aynen devam ediyor

Kod: Tümünü seç

SELECT HES.*, GIRIS, CIKIS FROM TBL_FIN_HESAPLAR HES 
left join (select TAHSILDAR_ID, sum(MIKTAR_TAHSILDAR) as GIRIS from TBL_FIN_NAKIT group by TAHSILDAR_ID) as VHARG
on HES.ID=VHARG.TAHSILDAR_ID
left join (select ODEYEN_ID, sum(MIKTAR_ODEYEN) as CIKIS from TBL_FIN_NAKIT group by ODEYEN_ID) as VHARC
on HES.ID=VHARC.ODEYEN_ID
ORDER BY HESAP_ADI

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: View'den veri cekme problemi

Mesaj gönderen Kuri_YJ »

Selamlar,

Access Violation hatasını DB'den almazsınız. Delphi'den alıyorsunuz. Bu kısma dikkat edin. Access Violation demek, olmayan bir nesneyi kullanmaya çalışıyorsunuz veya olmayan bir özelliğe erişmeye çalışıyorsunuz demektir. Çözümü Delphi üzerindeki kodlarınızda arayın.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

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

Re: View'den veri cekme problemi

Mesaj gönderen mrtblt »

Merhaba

Peki neden 'sadece' ilgili tabloya baska bir formda veri insert edildikten sonra formu actigimda bu hatayi aliyorum? Update, delete vs yapildiginda yada hicbirsey yapilmamisken form acilmasinda bir sorun yok

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: View'den veri cekme problemi

Mesaj gönderen Kuri_YJ »

Selamlar,

Orasını bilemem çünkü kodunuzu görmedim. Mutlaka bir yerlerde bir işlem ardından bir şekilde Free ettiğiniz bir object vardır ve siz ardından bu objeye erişiyorsunuzdur. Şimdi ekran tasarımınız ve kodlamanızı da bilmediğimden bu sorunuzu ancak siz yanıtlayabilirsiniz. Ama sonuçta 'sorun' sizin olmayan bir nesneye Delphi tarafından erişmeye kalkmanızdan kaynaklı. Database'den Access Violation hatası alamazsınız. Aldığınız hata eğper DB Engine'den gelen bir hata ise zaten siza DB Error olarak döner Access Violation olarak dönmez.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

AfterPost
Üye
Mesajlar: 127
Kayıt: 12 Tem 2014 10:22

Re: View'den veri cekme problemi

Mesaj gönderen AfterPost »

mrtblt yazdı:Merhaba

Peki neden 'sadece' ilgili tabloya baska bir formda veri insert edildikten sonra formu actigimda bu hatayi aliyorum? Update, delete vs yapildiginda yada hicbirsey yapilmamisken form acilmasinda bir sorun yok
oluşturmaya çalıştığınız form create edilmemil olabilir
form1:=TForm1.create(application) olduğundan emin misiniz? bir de formun close olayına action:cafree mı?

Cevapla