SQL Sorgulama

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

SQL Sorgulama

Mesaj gönderen ozcank »

Arkadaşlar Merhaba ; Iskonto hesaplatmaya uğraşıyorum bir yerde takıldım yardımcı olabilir misiniz?
Iskonto1,Iskonto2,Iskonto3,Iskonto4,Iskonto6,Iskonto6 Çıkarma yaptırmam gerekiyor beceremedim

Kod: Tümünü seç

procedure TForm14.BitBtn1Click(Sender: TObject);
Var
Iskonto1,Iskonto2,Iskonto3,Iskonto4,Iskonto5,Iskonto6:Real;
begin
  Iskonto1:=0;Iskonto2:=0;Iskonto3:=0;Iskonto4:=0;Iskonto5:=0;Iskonto6:=0;
  with IskontoRap do
  begin
  Close;
  SQL.Text :='SELECT A.STOK_KODU, D.STOK_ADI,E.CARI_KOD, E.CARI_ISIM, B.FATIRS_NO, B.TARIH, B.BRUTTUTAR, B.SAT_ISKT,A.STHAR_SATISK,A.STHAR_SATISK2, '+
             'A.STRA_SATISK3, A.STRA_SATISK4, A.STRA_SATISK5, A.STRA_SATISK6, B.GEN_ISK1O, B.GEN_ISK1T, B.GEN_ISK2O, B.GEN_ISK2T, B.GEN_ISK3O, B.GEN_ISK3T, B.KDV, B.GENELTOPLAM, ' +
             'sum(CASE WHEN A.STHAR_SATISK =STHAR_SATISK THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK)/100  ELSE 0 END) AS Iskonto1, '+
             'Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2 - Iskonto1)/100 ELSE 0 END) AS Iskonto2, '+
             'Sum(CASE WHEN A.STRA_SATISK3 =STRA_SATISK3 THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STRA_SATISK3 - Iskonto1+Iskonto2)/100  ELSE 0 END) AS Iskonto3, '+
             'Sum(CASE WHEN A.STRA_SATISK4 =STRA_SATISK4 THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STRA_SATISK4 - Iskonto1+Iskonto2+Iskonto3)/100  ELSE 0 END) AS Iskonto4, '+
             'Sum(CASE WHEN A.STRA_SATISK5 =STRA_SATISK5 THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STRA_SATISK5 - Iskonto1+Iskonto2+Iskonto3+Iskonto4)/100  ELSE 0 END) AS Iskonto5, '+
             'Sum(CASE WHEN A.STRA_SATISK6 =STRA_SATISK6 THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STRA_SATISK6 - Iskonto1+Iskonto2+Iskonto3+Iskonto4+Iskonto5)/100  ELSE 0 END) AS Iskonto6  '+
             'FROM TBLSTHAR AS A INNER JOIN TBLFATUIRS AS B ON B.FATIRS_NO=A.FISNO INNER JOIN TBLSTSABIT AS D ON A.STOK_KODU=D.STOK_KODU INNER JOIN TBLCASABIT AS E ON B.CARI_KODU=E.CARI_KOD '+
             'WHERE B.CARI_KODU=''000165'' AND B.FTIRSIP=''1'' GROUP BY A.STOK_KODU, D.STOK_ADI,E.CARI_KOD, E.CARI_ISIM, B.FATIRS_NO, B.TARIH, B.BRUTTUTAR, B.SAT_ISKT,A.STHAR_SATISK, A.STHAR_SATISK2,'+
             'A.STRA_SATISK3, A.STRA_SATISK4, A.STRA_SATISK5, A.STRA_SATISK6, B.GEN_ISK1O, B.GEN_ISK1T, B.GEN_ISK2O, B.GEN_ISK2T, B.GEN_ISK3O, B.GEN_ISK3T, B.KDV, B.GENELTOPLAM';
    Active := True;
Verdiği Hata

[Hint] Unit14.pas(73): Value assigned to 'Iskonto6' never used
[Hint] Unit14.pas(73): Value assigned to 'Iskonto5' never used
[Hint] Unit14.pas(73): Value assigned to 'Iskonto4' never used
[Hint] Unit14.pas(73): Value assigned to 'Iskonto3' never used
[Hint] Unit14.pas(73): Value assigned to 'Iskonto2' never used
[Hint] Unit14.pas(73): Value assigned to 'Iskonto1' never used
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: SQL Sorgulama

Mesaj gönderen omurolmez »

Hata değil ipucu
[İpucu] Unit14.pas(73): 'Iskonto6' ya atanan değer hiç kullanılmadı.

Anlamı:
Iskonto6 adlı bir değişken tanımlamış ve ona değer atamışsınız. Ancak daha sonra bo değişkeni hiç kullanmamışsınız. Bu mantıksız bir hareket olduğuna göre Kodlama hatası yapmış olabilirsiniz.
Ömür Ölmez
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL Sorgulama

Mesaj gönderen ozcank »

Ömür Ölmez kardeşim ben kodlama da iskontoların çıkarma işlemini yapamadım değişkenleri de o yüzden atadım ama olmadı.
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL Sorgulama

Mesaj gönderen ozcank »

Iskonto1 2. satırda çıkartmam gerekiyor nasıl yapabilirim yardım eder misiniz? veya başka türlü nasıl yapabilirim ?

Kod: Tümünü seç

'sum(CASE WHEN A.STHAR_SATISK =STHAR_SATISK THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK)/100  ELSE 0 END) AS Iskonto1, '+
'Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2 - Iskonto1)/100 ELSE 0 END) AS Iskonto2, '+
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: SQL Sorgulama

Mesaj gönderen yusuf simsek »

yapmak istediğini tam olarak anlayamadım...

Her satırda mı 6 adet iskonto var yoksa ( ör : 3 kalem ürün ) toplam tutarı üzerinden mi 6 iskonto yapacaksın...

her iki durumda da veritabanında VIEW yazarsan, hem program içerisinde ki kodları azaltırsın hem de işin kolaylaşır...
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL Sorgulama

Mesaj gönderen ozcank »

Her satırda 6 iskonto var. 1 Stok için 6 iskonto. View içinde kod yazacam delphi içinde aynı şey ama ben bu kodları kullanmak istiyorum eğer kod değişiklik yaparak yardımcı olursanız çok sevinecem.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: SQL Sorgulama

Mesaj gönderen warder »

"Value assigned to 'Iskonto6' never used" uyarıları sql içinde kullandıklarınızdan değil yukarıda
( Var Iskonto1,Iskonto2,Iskonto3,Iskonto4,Iskonto5,Iskonto6:Real;
begin Iskonto1:=0;Iskonto2:=0;Iskonto3:=0;Iskonto4:=0;Iskonto5:=0;Iskonto6:=0; )
deye tanımlayıp, ilk değerlerini verip sonra kullanmamanızdan kaynaklanıyor.
Bazan kullandığım halde ( hemde kaç yerde) özellikle boolean değişkenlerde bu uyarıyı c++Builder de veriyor. Seçeneklerden Warnings kısmından check ini kaldırıp kurtuluyorum.
Sorun SQL den kaynaklanıyorsa.. SQL içindeki hataya Delphi nin karışacağını sanmam. onun hatası SQL motorunuzdan gelmeli. Onu bulmalısınız.
Sorgunuzu Harici SQL araçlarıyla deneyip başarılı olduktan sonra programda kullanmanız,
Daha sade örneklemle sql oluşturmaya başlamanız sonra derinleştirmeniz (örneğin tek kademe iskonto ile başlayıp 6. kademeye adım adım ilerleseniz)
Gibi yollarla deneyebilirsiniz.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL Sorgulama

Mesaj gönderen ozcank »

Warder kardesim ben kodda Iskonto1 kullaniyorum ipucu mesajinida geciyorum ama program icerisin de Iskonto1 hatasi aliyorum kodu ne sekilde degistirebilirim?
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: SQL Sorgulama

Mesaj gönderen warder »

SQL.Text :='ne yazarsan yaz. Delphi burayı text görüyor... Burada hata varsa sql engine söyler...';
demek istedim.
Sorgunuzu kullandığınız veritabanını destekleyen bir SQL Editor ile test edin, düzgün çalışıyorsa Delphiye text olarak ekleyebilirsiniz.
Kod kısmı ile ilgili zaten hiç bir bilgi vermemişsiniz.
Dolayısıyla delphi uzmanı arkadaşlarda bu bilgiyle size yazdığımdan fazlasını veremezler.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: SQL Sorgulama

Mesaj gönderen SimaWB »

Bu kod bloğunu zaten yukarıda vermiştiniz???
There's no place like 127.0.0.1
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: SQL Sorgulama

Mesaj gönderen warder »

Delphi bilmiyor olabilirim ama burada
SQL.Text := 'sql kodu';
dışında bir şey göremiyorum.
Önceki yazdıklarım gereçli..
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: SQL Sorgulama

Mesaj gönderen thelvaci »

Anladığım kadarı ile Netsis veritabanı üzerinde uğraşıyorsunuz. Bu da SQL Server üzerinde çalışıyorsunuz demek oluyor. Bunları anladım anlamasına da, SUM içinde CASE kullanacak kadar T-SQL biliyor olmanıza rağmen; neden bu Sql cümlesini Delphi içinde yazmaya çalıştığınızı, bunun yerine neden bir stored procedure tercih etmediğinizi anlayamadım açıkçası !!

İnşallah programcılarımız; Delphi içinde SQL ifadeleri yazma gibi saçma alışkanlıklarından bir an evvel kurtulurlar.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: SQL Sorgulama

Mesaj gönderen m_ekici »

thelvaci yazdı: İnşallah programcılarımız; Delphi içinde SQL ifadeleri yazma gibi saçma alışkanlıklarından bir an evvel kurtulurlar.
Neden? Bunu biraz açarmısınız?
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: SQL Sorgulama

Mesaj gönderen m_ekici »

Yukarıdaki kodda iskontoları query içerisinde oluşturduğun için aynı query içinde kullanamazsın. AS Iskonto1 query çalıştığında oluşuyor. biraz uzun olacak ama Iskonto1 kullanmak istedğin yerlere direk iskonto1 için yazdığın kodu (sum(CASE WHEN A.STHAR_SATISK =STHAR_SATISK THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK)/100 ELSE 0 END)) yaz.

Kod: Tümünü seç

'Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2 - Iskonto1)/100 ELSE 0 END) AS Iskonto2, '+
satırı yerine

Kod: Tümünü seç

'Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2 - sum(CASE WHEN A.STHAR_SATISK =STHAR_SATISK THEN  (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK)/100  ELSE 0 END) )/100 ELSE 0 END) AS Iskonto2, '+
kodunu biraz uzatır ama çalışır.
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL Sorgulama

Mesaj gönderen ozcank »

m_ekici kardeşim Allah senden Razı olsun kodunu sql de önce denedim bir hata aldım biraz uğraştım ama hatayı gideremedim sql kodu şöyle ;

Kod: Tümünü seç

Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2 - sum(CASE WHEN A.STHAR_SATISK=STHAR_SATISK THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK)/100  ELSE 0 END))/100 ELSE 0 END) AS Iskonto2,
hata
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

ben şöyle değiştirdim ama sonucu sıfır alıyorum;

Kod: Tümünü seç

'Sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2) /100 ELSE 0 END) - sum(CASE WHEN A.STHAR_SATISK2=STHAR_SATISK2 THEN (A.STHAR_BF * A.STHAR_GCMIK * A.STHAR_SATISK2) /100 ELSE 0 END) AS Iskonto2,'+
ben burda şunu yapmaya çalışıyorum ;
Brut tutarı 500 tl 1. iskonto %10 ise = 50 tl iskontosu yapar buraya kadar tamam 2. iskonto hesaplayabilmem için Brut tutar 500 tl den 1.iskontoyu 50 tl yi çıkarıp 450 tl bulmam gerekiyor 450 tl 2.iskonto %15 =67,5 tl böyle devam ettirecem
Cevapla