SQL kodu için yardım rica ediyorum.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

SQL kodu için yardım rica ediyorum.

Mesaj gönderen ikut »

Merhaba

aşağıda doğru ve yanlış çalışan sql kodlarım var. Kodların açıklaması en sonra mevcut. Burda hata nerde olabilir.

bu kod 5 satır döndürüyor

Kod: Tümünü seç

   qryRes.close;
   qryRes.SQL.Clear;
   qryRes.SQL.Add('SELECT   FTD.FWTPFT AS FaturaTipi, FTD.FWNRFT AS FaturaNo,');
   qryRes.SQL.Add('FTD.FWDTFT AS FaturaTarihi, FTD.FWCDCL AS FatMusteriNo,');
   qryRes.SQL.Add('ANC.CDCLI AS MusteriNo, ANC.RASCL AS MusteriUnvani,');
   qryRes.SQL.Add('FTD.FWMCLV AS StokGrKod, FTD.FWCDPD AS StokKodu,');
   qryRes.SQL.Add('FTD.FWNRPA AS Ack1, FTD.FWNRBA AS Ack2, FTD.FWUMVN AS Birim,');
   qryRes.SQL.Add('FTD.FWQTVN AS Miktar, FTD.FWPREZ AS BirimFiyat,');
   qryRes.SQL.Add('FTD.FWIMRG AS Toplam, FTD.FWNRDC AS IrsaliyeNo,');
   qryRes.SQL.Add('FTD.FWDTDC AS IrsaliyeTar, ART.ARMCLV AS StokGrKod,');
   qryRes.SQL.Add('ART.ARCDPD AS StokKodu, ART.ARDSES AS StokAdi');
   qryRes.SQL.Add('FROM ERDDAT.FTDET103 FTD,');
   qryRes.SQL.Add('ERDDAT.ANCLIL02 ANC,');
   qryRes.SQL.Add('ERDDAT.ARTIC00F ART');
   qryRes.SQL.Add('WHERE    FTD.FWCDCL=ANC.CDCLI');
   qryRes.SQL.Add('AND      FTD.FWMCLV=ART.ARMCLV');
   qryRes.SQL.Add('AND      FTD.FWCDPD=ART.ARCDPD');
   qryRes.sql.Add('AND      FTD.FWDTFT>='+QuotedStr(dtbas)+' and FTD.FWDTFT <='+QuotedStr(dtbit));
   if cbbFatTipi.ItemIndex <> -1 then
     begin
       qryRes.sql.Add(' AND  FTD.FWTPFT ='+QuotedStr(Copy(cbbFatTipi.Text,4,2)));
     end;
   if  Length(edtMus.Text) >0 then
     begin
       qryRes.sql.Add(' AND FTD.FWCDCL ='+QuotedStr(edtMus.Text+' '));
     end;
   if cbbGrKod.ItemIndex <> -1 then
     begin
       qryRes.sql.Add(' AND FTD.FWMCLV='+ QuotedStr(Copy(cbbGrKod.Text,1,2)));
     end;
   qryRes.Open;
end;
Bu kod ise 5 satır kayıt ama ek oln kolonları getirmesi gerekirken 100den fazla kayıt getiriyor.

Kod: Tümünü seç

qryRes.close;
   qryRes.SQL.Clear;
   qryRes.SQL.Add('SELECT   FTD.FWTPFT AS FaturaTipi, FTD.FWNRFT AS FaturaNo,');
   qryRes.SQL.Add('FTD.FWDTFT AS FaturaTarihi, FTD.FWCDCL AS FatMusteriNo,');
   qryRes.SQL.Add('ANC.CDCLI AS MusteriNo, ANC.RASCL AS MusteriUnvani,');
   qryRes.SQL.Add('FTD.FWMCLV AS StokGrKod, FTD.FWCDPD AS StokKodu,');
   qryRes.SQL.Add('FTD.FWNRPA AS Ack1, FTD.FWNRBA AS Ack2, FTD.FWUMVN AS Birim,');
   qryRes.SQL.Add('FTD.FWQTVN AS Miktar, FTD.FWPREZ AS BirimFiyat,');
   qryRes.SQL.Add('FTD.FWIMRG AS Toplam, FTD.FWNRDC AS IrsaliyeNo,');
   qryRes.SQL.Add('FTD.FWDTDC AS IrsaliyeTar, ART.ARMCLV AS StokGrKod,');
   qryRes.SQL.Add('ART.ARCDPD AS StokKodu, ART.ARDSES AS StokAdi,');
   qryRes.SQL.Add('CED.CENRDC AS IrsaliyeNo, CED.CEDTDC AS IrsaliyeTar,');
   qryRes.SQL.Add('CED.CECDCL AS IrsaliyeMusNo, ANC.RASCL AS IrsaliyeMusUnv');
   qryRes.SQL.Add('FROM ERDDAT.FTDET103 FTD,');
   qryRes.SQL.Add('ERDDAT.ANCLIL02 ANC,');
   qryRes.SQL.Add('ERDDAT.ARTIC00F ART,');
   qryRes.SQL.Add('ERDDAT.CEDET00F CED');
   qryRes.SQL.Add('WHERE    FTD.FWCDCL=ANC.CDCLI');
   qryRes.SQL.Add('AND      FTD.FWMCLV=ART.ARMCLV');
   qryRes.SQL.Add('AND      FTD.FWCDPD=ART.ARCDPD');
   qryRes.SQL.Add('AND      FTD.FWNRDC=CED.CENRDC');
   qryRes.SQL.Add('AND      ANC.CDCLI=CED.CECDCL');
   qryRes.sql.Add('AND      FTD.FWDTFT>='+QuotedStr(dtbas)+' and FTD.FWDTFT <='+QuotedStr(dtbit));
   if cbbFatTipi.ItemIndex <> -1 then
     begin
       qryRes.sql.Add(' AND  FTD.FWTPFT ='+QuotedStr(Copy(cbbFatTipi.Text,4,2)));
     end;
   if  Length(edtMus.Text) >0 then
     begin
       qryRes.sql.Add(' AND FTD.FWCDCL ='+QuotedStr(edtMus.Text+' '));
     end;
   if cbbGrKod.ItemIndex <> -1 then
     begin
       qryRes.sql.Add(' AND FTD.FWMCLV='+ QuotedStr(Copy(cbbGrKod.Text,1,2)));
     end;
   qryRes.Open;
Yapmak istediğim şu;

istenen fatura tipi, musteri ve tarih ile stoktan filte koymak şartıyla;

Faturadetay dosyasından müşteri no alıp bununla müşteri nosunu müşteri dosyasından müşteri adını çekip join ediyorum. Yine aynı şekilde stok kodunu alıp stokmasterdan stok adını join ediyorum. ancak bazen irsaliye ile fatura farklı yere kesiliyor bizde. İşte bunun içinde irsaliye no ile İRSALİYE DOSYASINDAKİ MÜŞTERİ NODAN TEKRAR müşteri dosyasında irsaliyenin kesildiği adı çekmeye çalışıyorum(bkz. 2. kod bloğu) ama birden kayıt sayısı artıyor. anladığım kod kartezyen çarpım döndürüyor anlamadığım ise bunu nasıl gideririm.

saygılar
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Hata

Mesaj gönderen sabanakman »

Bu hatanın geliş nedeni %99.999 "ERDDAT.CEDET00F CED" tablosunun sorguya eklenip (join) gereken şartın ise eksik bırakılmış olduğunu düşünüyorum. Bu tablo için "AND FTD.FWNRDC=CED.CENRDC AND ANC.CDCLI=CED.CECDCL" şartından başka diğer tablolarla ilişkisi varsa o şartlarıda eklemen gerekecektir.
ikut

Re: Hata

Mesaj gönderen ikut »

sabanakman yazdı:Bu hatanın geliş nedeni %99.999 "ERDDAT.CEDET00F CED" tablosunun sorguya eklenip (join) gereken şartın ise eksik bırakılmış olduğunu düşünüyorum. Bu tablo için "AND FTD.FWNRDC=CED.CENRDC AND ANC.CDCLI=CED.CECDCL" şartından başka diğer tablolarla ilişkisi varsa o şartlarıda eklemen gerekecektir.
Where satırlartında gerekli bağlantı var. bence selectlerde bir fazlalık var ama nasıl yapıcam bilmiyoum
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Formuna 1 adet memo bileşeni ekle ve query nin SQL textini memo ya gönder sonra bak bakalım SQL doğrumu

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla