Incorrect syntax near the keyword HATASI

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

Incorrect syntax near the keyword HATASI

Mesaj gönderen ozcank »

Arkadaşlar Merhaba; Faturanın tipi ni DBGRID ekranına yazdırmak istedim SQL de sorunsuz çalıştırdım ama Delphi içerisine eklediğimde şu hatayı veriyor

Kod: Tümünü seç

Incorrect syntax near the keyword 'CASE'
Yardımcı olabilir misiniz?

Eklediğim alan ;

Kod: Tümünü seç

                                             '(CASE WHEN a.TIPI=''2'' Then '+#39+'Açık Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''1'' Then '+#39+'Kapalı Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''4'' Then '+#39+'İade Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''3'' Then '+#39+'Muhtelif Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''5'' Then '+#39+'Zayi İade Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
Delphi deki koda eklediğim alan ;

Kod: Tümünü seç

begin
  with NRapor1 do
  begin
   Close;
   SQL.Text := 'SELECT a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T) AS GENEL_ISKonto,' +
               'a.GENELTOPLAM,sum(CASE WHEN b.STHAR_KDV=''1'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END ) ' +
               'AS KDV1, Sum(CASE WHEN b.STHAR_KDV=''8'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV8, ' +
               '(CASE WHEN b.STHAR_KDV=''18'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV18,a.TIPI, ' +
              				     '(CASE WHEN a.TIPI=''2'' Then '+#39+'Açık Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''1'' Then '+#39+'Kapalı Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''4'' Then '+#39+'İade Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''3'' Then '+#39+'Muhtelif Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
					     '(CASE WHEN a.TIPI=''5'' Then '+#39+'Zayi İade Fatura'+#39+' ELSE 0 END) AS FaturaTipi'+
               'FROM (TBLFATUIRS as a inner join TBLSTHAR as b on a.FATIRS_NO = b.FISNO) AS FaturaTipi'+
               'Inner Join TBLCASABIT as c on a.cari_kodu = c.cari_kod ' +
               'WHERE a.FTIRSIP=''1'' and a.Tarih between :ptarih1 and :ptarih2 ' +
               'Group by a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T), a.geneltoplam,a.TIPI';

    Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
    Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
    Active := True;
    if not IsEmpty then
    begin
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Incorrect syntax near the keyword HATASI

Mesaj gönderen ertank »

Merhaba,

Her satırı ayrı ayrı ekleyip deneyebilir misiniz? Örneğin;

Kod: Tümünü seç

SQL.Clear();
SQL.Add('SELECT a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T) AS GENEL_ISKonto,');
SQL.Add('a.GENELTOPLAM,sum(CASE WHEN b.STHAR_KDV=''1'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END )');
Bu şekilde aynı SQL Manager'da olduğu gibi olacaktır. Sizin mevcut yönteminiz sanki SQL Manager içinde tek bir satıra herşeyi yazmışsınız gibi oluyor. Bu şekilde hazırladığınız SQL komutlarında kod editörü içinde her bir satırın sonunda sabit metin bilgisinin son tırnak işaretini kapatmadan önce boşluk bırakmanız gerekli. Bunu her satır için yapmamışsınız. "FROM (TBLFATUIRS" ifadesi ile Bir üst satır son kelime olan "FaturaTipi" yapışık olacaktır. Aynı şekilde "Inner Join" öncesindeki "FaturaTipi" ile yapışık olacaktır.

Bu tür hataları anlamanın bir yolu, SQL.Text atamasını yaptıktan sonra debug ortamında değeri kopyalayıp SQL Manager'a yapıştırmak olabilir.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Incorrect syntax near the keyword HATASI

Mesaj gönderen ozcank »

ertank kardeşim bu şekilde değiştirdim ama yine olmadı ;

Kod: Tümünü seç

begin
  with NRapor1 do
  begin
   Close;
   SQL.Text := 'SELECT a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T) AS GENEL_ISKonto,' +
               'a.GENELTOPLAM,sum(CASE WHEN b.STHAR_KDV=''1'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END ) AS KDV1,' +
               'Sum(CASE WHEN b.STHAR_KDV=''8'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV8,' +
               'CASE WHEN b.STHAR_KDV=''18'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV18, a.TIPI,' +
               'Case a.TIPI '+
               'When ''2'' Then ''Açık Fatura'','+
					     'When ''1'' Then ''Kapalı Fatura'','+
					     'When ''4'' Then ''İade Fatura'','+
					     'When ''3'' Then ''Muhtelif Fatura'','+
					     'When ''5'' Then ''Zayi İade Fatura'''+
               'Else 0 End' +
               'FROM (TBLFATUIRS as a inner join TBLSTHAR as b on a.FATIRS_NO = b.FISNO)'+
               'Inner Join TBLCASABIT as c on a.cari_kodu = c.cari_kod ' +
               'WHERE a.FTIRSIP=''1'' and a.Tarih between :ptarih1 and :ptarih2 ' +
               'Group by a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T), a.geneltoplam,a.TIPI';

    Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
    Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
    Active := True;
    if not IsEmpty then
    begin

ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Incorrect syntax near the keyword HATASI

Mesaj gönderen ertank »

Yazdığımı anlamamışsınız sanırım. Yukarıdaki cevabımı tekrar okumanızda fayda var.

Aşağıdaki şekilde çalışması gerekli ancak database erişimim olmadığı için kesin emin olamıyorum:

Kod: Tümünü seç

begin
  with NRapor1 do
  begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT');
    SQL.Add('	a.fatirs_no,');
    SQL.Add('	a.gib_fatirs_no,');
    SQL.Add('	a.tarih,');
    SQL.Add('	c.cari_isim,');
    SQL.Add('	a.bruttutar,');
    SQL.Add('	a.SAT_ISKT,');
    SQL.Add('	( a.GEN_ISK1T+ a.GEN_ISK2T+ a.GEN_ISK3T ) AS GENEL_ISKonto,');
    SQL.Add('	a.GENELTOPLAM,');
    SQL.Add('	SUM ( CASE WHEN b.STHAR_KDV= ''1'' THEN ( b.STHAR_NF* b.STHAR_KDV* b.STHAR_GCMIK ) / 100 ELSE 0 END ) AS KDV1,');
    SQL.Add('	SUM ( CASE WHEN b.STHAR_KDV= ''8'' THEN ( b.STHAR_NF* b.STHAR_KDV* b.STHAR_GCMIK ) / 100 ELSE 0 END ) AS KDV8,');
    SQL.Add('	( CASE WHEN b.STHAR_KDV= ''18'' THEN ( b.STHAR_NF* b.STHAR_KDV* b.STHAR_GCMIK ) / 100 ELSE 0 END ) AS KDV18,');
    SQL.Add('	a.TIPI,');
    SQL.Add('CASE');
    SQL.Add('	a.TIPI');
    SQL.Add('	WHEN ''2'' THEN');
    SQL.Add('	''Açık Fatura''');
    SQL.Add('	WHEN ''1'' THEN');
    SQL.Add('	''Kapalı Fatura''');
    SQL.Add('	WHEN ''4'' THEN');
    SQL.Add('	''İade Fatura''');
    SQL.Add('	WHEN ''3'' THEN');
    SQL.Add('	''Muhtelif Fatura''');
    SQL.Add('	WHEN ''5'' THEN');
    SQL.Add('	''Zayi İade Fatura'' ELSE 0');
    SQL.Add('END');
    SQL.Add('FROM');
    SQL.Add('	( TBLFATUIRS AS a INNER JOIN TBLSTHAR AS b ON a.FATIRS_NO = b.FISNO )');
    SQL.Add('	INNER JOIN TBLCASABIT AS c ON a.cari_kodu = c.cari_kod');
    SQL.Add('WHERE');
    SQL.Add('	a.FTIRSIP= ''1''');
    SQL.Add('	AND a.Tarih BETWEEN :ptarih1');
    SQL.Add('	AND :ptarih2');
    SQL.Add('GROUP BY');
    SQL.Add('	a.fatirs_no,');
    SQL.Add('	a.gib_fatirs_no,');
    SQL.Add('	a.tarih,');
    SQL.Add('	c.cari_isim,');
    SQL.Add('	a.bruttutar,');
    SQL.Add('	a.SAT_ISKT,');
    SQL.Add('	( a.GEN_ISK1T+ a.GEN_ISK2T+ a.GEN_ISK3T ),');
    SQL.Add('	a.geneltoplam,');
    SQL.Add('	a.TIPI');
    Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
    Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
    Active := True;
    if not IsEmpty then
    begin    
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Incorrect syntax near the keyword HATASI

Mesaj gönderen ozcank »

ertank kardeşim çok teşekkür ederim yüreğine sağlık. Yazdığın kodu örnek alarak şu şekilde yaptım ;

Kod: Tümünü seç

 with NRapor1 do
  begin
   Close;
   SQL.Text := 'SELECT a.fatirs_no,a.gib_fatirs_no,a.tarih, c.cari_isim, a.bruttutar, a.SAT_ISKT, (a.GEN_ISK1T+a.GEN_ISK2T+a.GEN_ISK3T) AS GENEL_ISKonto,' +
               'a.TIPI,a.GENELTOPLAM,sum(CASE WHEN b.STHAR_KDV=''1'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END ) AS KDV1, ' +
               'Sum(CASE WHEN b.STHAR_KDV=''8'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV8, ' +
               'Sum(CASE WHEN b.STHAR_KDV=''18'' THEN (b.STHAR_NF*b.STHAR_KDV*b.STHAR_GCMIK)/100 ELSE 0 END) AS KDV18, ' +
               'CASE a.TIPI ' +
               'WHEN ''1'' THEN (''Kapalı Fatura'') ' +
               'WHEN ''2'' THEN (''Açık Fatura'') ' +
               'WHEN ''3'' THEN (''Muhtelif Fatura'') ' +
               'WHEN ''4'' THEN (''İade Fatura'') ' +
               'WHEN ''5'' THEN (''Zayi İade Fatura'') End As FATURATIPI ' +

               'FROM (TBLFATUIRS as a inner join TBLSTHAR as b on a.FATIRS_NO = b.FISNO) ' +
Cevapla