Delphi SQL Rapor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Delphi SQL Rapor

Mesaj gönderen ozcank »

Arkadaşlar ;
Netsis Tablolarını kullanarak KDV Hesaplatmak için uğraşıyorum SQL de raporu alabiliyorum ama delphi ye bir türlü uyarlayamadım yardımcı olurmusunuz ?

incorrect syntax near the keyword 'CASE' hatası.

Kod: Tümünü seç

procedure TForm12.BitBtn1Click(Sender: TObject);
begin
NRapor1.Close;
NRapor1.SQL.Clear;
NRapor1.SQL.Add('SELECT TBLFATUIRS.FATIRS_NO,TBLFATUIRS.TARIH,TBLCASABIT.CARI_ISIM,TBLFATUIRS.BRUTTUTAR,TBLFATUIRS.SAT_ISKT + TBLFATUIRS.GEN_ISK1T + TBLFATUIRS.GEN_ISK2T + TBLFATUIRS.GEN_ISK3T FROM TBLFATUIRS,TBLCASABIT');
NRapor1.SQL.Add('(CASE WHEN TBLSTHAR.STHAR_KDV=1 THEN (TBLSTHAR.STHAR_NF*TBLSTHAR.STHAR_KDV*TBLSTHAR.STHAR_GCMIK)/100 ELSE 0 END) [KDV_1],');
NRapor1.SQL.Add('(CASE WHEN TBLSTHAR.STHAR_KDV=8 THEN (TBLSTHAR.STHAR_NF*TBLSTHAR.STHAR_KDV*TBLSTHAR.STHAR_GCMIK)/100 ELSE 0 END) [KDV_8],');
NRapor1.SQL.Add('(CASE WHEN TBLSTHAR.STHAR_KDV=18 THEN (TBLSTHAR.STHAR_NF*TBLSTHAR.STHAR_KDV*TBLSTHAR.STHAR_GCMIK)/100 ELSE 0 END) [KDV_18],');
NRapor1.SQL.Add('TBLFATUIRS.GENELTOPLAM');
NRapor1.SQL.Add('FROM TBLFATUIRS');
NRapor1.SQL.Add('INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO)');
NRapor1.SQL.Add('INNER JOIN TBLCASABIT ON (TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU)');
NRapor1.SQL.Add('WHERE FTIRSIP=1');
NRapor1.Open;
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi SQL Rapor

Mesaj gönderen xxxjedixxx »

Merhaba,

Sanırım yazdığın SQL hatalı. İlk görüşte iki tane "from" sözcüğü geçtiğini görüyorum.

Şöyle bir şey de yapabilirsin;
Formuna bir tane Memo nesnesi koy ve
NRapor1.Open;
satırının yerine
Memo1.Lines.Text := NRapor1.SQL.Text;
yaz ve çalıştır. Sonra Memo içinden metni al ve SQL Server'da dene.
En son xxxjedixxx tarafından 21 May 2014 08:42 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

SQL de yazdım çalışıyor Delphiye uyarlayamadım
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi SQL Rapor

Mesaj gönderen xxxjedixxx »

SQL 'e yazdığın metni yazar mısın? Muhtemelen SQL serverdan Delphi'ye yanlış geçirdin.

Case senin yazdığın şekilde kullanılmaz diye biliyorum. Önceki iletideki dediğimi yapıp denedin mi? Memo içinden alıp çalıştırdığın sorguya SQL kızacaktır.

örn:
select ADI, (case ADI when 'jedi' then YASI * 2 else YASI * 3 end) as SONUC from tablo
ADI ile birlikte Sonucu getir. Fakat sonucu hesaplarken adı 'jedi' ise yaşını 2 ile çarp değilse 3 ile çarp.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

SQL de çalışan cümlem ;

SELECT FATIRS_NO,TARIH, CARI_ISIM, BRUTTUTAR, SAT_ISKT + GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO,
CASE WHEN STHAR_KDV='1' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_1,
CASE WHEN STHAR_KDV='8' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_8,
CASE WHEN STHAR_KDV='18' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_18,
GENELTOPLAM
FROM TBLFATUIRS
INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO)
INNER JOIN TBLCASABIT ON (TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU)
WHERE FTIRSIP='1'
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Delphi SQL Rapor

Mesaj gönderen unicorn64 »

NRapor1.Open; satırına break point koyup NRapor1.SQL.Text i görüntülerseniz muhtemelen hatanızı farkedersiniz,
oluşturduğunuz sql in ilk satırındaki FROM TBLFATUIRS,TBLCASABIT kısmı fazlalık ve sanırım orası AS ISKONTO olması gerek
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
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

Arkadaşlar ;
Ben bu cümleyi uyarlayamadım. Yardımcı olur musunuz?
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi SQL Rapor

Mesaj gönderen xxxjedixxx »

Kod: Tümünü seç

  NRapor1.SQL.Text := 'SELECT FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO, ' +
                        'CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_1, ' +
                        'CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_8, ' +
                        'CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_18, ' +
                        'GENELTOPLAM FROM TBLFATUIRS INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA ' +
                        'AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO) INNER JOIN TBLCASABIT ON ' +
                        '(TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU) WHERE FTIRSIP=''1''';
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

xxxjedixxx ALLAH senden razı olsun kardeşim dbgrid alanlarınıda ayarlamıştım tam oturdu.Senden bir şey daha rica etsem yaparmısın? Grup By ve iki tarih arası ekledim yine string hatası aldım KDV_1,KDV_8,KDV_18 alanlarını Edit1.Text , Edit2.Text , Edit3.Text dip toplam olarak düzeltebilir misin?

Kod: Tümünü seç

NRapor1.Close;
NRapor1.SQL.Clear;
NRapor1.SQL.Text := 'SELECT FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO, ' +
                     'CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_1, ' +
                     'CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_8, ' +
                     'CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_18, ' +
                     'GENELTOPLAM FROM TBLFATUIRS INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA ' +
                     'AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO) INNER JOIN TBLCASABIT ON ' +
                     '(TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU) WHERE FTIRSIP=''1'' AND DateTimePicker1.Date=TARIH AND DateTimePicker2.Date=TARIH'''+
                     'GROUP BY FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T';
NRapor1.Open;
end;
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi SQL Rapor

Mesaj gönderen xxxjedixxx »

Kod: Tümünü seç

// NRapor1.SQL.Clear; Buna gerek yok, eğer NRapor1.Sql.Add('..') şeklinde kullanıyorsan gerekli
// Sadece Tarih kısmı eklenmiş hali
NRapor1.SQL.Text := 'SELECT FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO, ' +
                     'CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_1, ' +
                     'CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_8, ' +
                     'CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_18, ' +
                     'GENELTOPLAM FROM TBLFATUIRS INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA ' +
                     'AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO) INNER JOIN TBLCASABIT ON ' +
                     '(TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU) WHERE FTIRSIP=''1'' AND Tarih between :pTarih1 and :pTarih2 ' +
                     'GROUP BY FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR';
NRapor1.Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
NRapor1.Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
NRapor1.Active := True;

//
// Yazdığından tam olarak anlamadım ama bu da KDV_1, KDV_2 ve KDV_3 gördüğüm yerler Edit text'lerinin eklenmiş hali
NRapor1.SQL.Text := 'SELECT FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO, ' +
                     'CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS ' + Edit1.Text + ', ' +
                     'CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS ' + Edit2.Text + ', ' +
                     'CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS ' + Edit3.Text + ', ' +
                     'GENELTOPLAM FROM TBLFATUIRS INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA ' +
                     'AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO) INNER JOIN TBLCASABIT ON ' +
                     '(TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU) WHERE FTIRSIP=''1'' AND Tarih between :pTarih1 and :pTarih2 ' +
                     'GROUP BY FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR';
NRapor1.Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
NRapor1.Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
NRapor1.Active := True;
Bu sorguda "group by" neden kullanıyorsun anlamadım. Eğer tekrar eden satır varsa bunun çözümü group by değildir. Bunun yerine distinct ifadesini kullanmalısın.
Select distinct fatirs_no, tarih, ......" gibi.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

xxxjedixxx Kardeşim ALLAH Senden razı olsun çok duamı aldın. Neden Grup By çünkü ; TBLSTHAR tablosunda %1 %8 %18 KDV leri ayrı ayrı satırlarda topluyor
ben tek satıra indirip yanyana kdv leri toplatmak istedim.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

"Grup By" de hata verdi bende dediğin gibi DISTINCT kullandım ama sonuç değişmedi

Kod: Tümünü seç

NRapor1.SQL.Text := 'DISTINCT SELECT FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR,SAT_ISKT+GEN_ISK1T+GEN_ISK2T+GEN_ISK3T AS ISKONTO, ' +
                     'CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_1, ' +
                     'CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_8, ' +
                     'CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END AS KDV_18, ' +
                     'GENELTOPLAM FROM TBLFATUIRS INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA ' +
                     'AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO) INNER JOIN TBLCASABIT ON ' +
                     '(TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU) WHERE FTIRSIP=''1'' AND Tarih between :pTarih1 and :pTarih2 ' ;
//                     'GROUP BY FATIRS_NO,TARIH,CARI_ISIM,BRUTTUTAR';
NRapor1.Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
NRapor1.Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
NRapor1.Active := True;

KDV_1 - KDV_2 ve KDV_3 alanlarını formda ayrı biryerde dip toplam aldırtmak için eklermisin dedim.
İki tarih arasındaki dip KDV toplamlarını edit alanlara yazdırmak için.
Edit1.Text
Edit2.Text
Edit3.Text
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Delphi SQL Rapor

Mesaj gönderen xxxjedixxx »

Tam olarak yapmak istediğin nedir?
Sorguna bakınca fatura fatura kayıtları istediğini görüyorum. Ama amacın bir tarih arasındaki cari hesap bazında kesilen faturaların kdv toplamlarını almak ise bu sorgu yanlış. Çünkü toplam istiyorsan fatura irsliye numarası gibi bir tekil alanın bu sorguda işi olmamalıdır. Eğerki bu sorgu doğru diyorsan o zaman sorguyu çalıştırdıktan sonra bir döngü içerisinde bu toplamı kendin yapmak zorundasın. Sana yardım edebilmem için biraz daha konuyu açman lazım. Ayrıca yazdığın bazı ifadeler yanlış. KDV'ler ayrı satılarda geliyor demişsin bu doğru değil ayrı sütunlarda geliyor demen gerekiyor. Çünkü sorgun kdv oranına göre sana sonucu kdv_1, kdv_2 ve kdv_3 olarak ayrı ayrı veriyor. Bir şey daha artık gerek kalmadı ama distinct'i yanlış kullanmışsın. Ben "select distinct ..." demiştim ama sen "distinct select ..." yazmışsın :).
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

xxxjedixxx Kardeşim SQL deki sorgum ve sizin yazdığınız DBGrid deki sorgunun sonucu şu şekilde ;

Kod: Tümünü seç

FATIRS_NO	                TARIH	                           CARI_ISIM	BRUTTUTAR	ISKONTO	KDV_1	KDV_8	KDV_18	GENELTOPLAM	
000000000DENEME	18.05.2014	 BURCU MARKET  ( ABDULLAH BALCI )	6,0200	0,1000	0,0000	0,4040	0,0000	6,4800	
000000000DENEME	18.05.2014	 BURCU MARKET  ( ABDULLAH BALCI )	6,0200	0,1000	0,0000	0,0000	0,1566	6,4800	
        		                                                                       Toplam    12,0400	0,2000	0,0000	0,4040	0,1566    12,9600	
Yapmak istedğim sonuç ise şu şekilde;

Kod: Tümünü seç

FATIRS_NO	               TARIH                                	CARI_ISIM	          BRUTTUTAR	ISKONTO	KDV_1	KDV_8	KDV_18	GENELTOPLAM
000000000DENEME	18.05.2014	 BURCU MARKET  ( ABDULLAH BALCI )	12,0400	0,2000	0,0000	0,4040	0,1566	12,9600
		                                                                               Toplam      12,0400	0,2000	0,0000	0,4040	0,1566	12,9600
Dip toplam daki anlatmam "Toplam " Kısmındaki sonuç.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Delphi SQL Rapor

Mesaj gönderen ozcank »

"Distinct" için özür dilerim buraya sorguyu kopyaladıktan sonra düzelttim dikkat etmemişim. :(
Cevapla