Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
cvheneburi
Üye
Mesajlar: 95 Kayıt: 07 Eki 2010 03:55
Mesaj
gönderen cvheneburi » 26 Ağu 2016 07:23
s.a.
arkadaşlar müşteri ve hesap cari adında iki tablom var
ben bakiyesi carisınır dan büyük veya eşit olan kayıtları listelemek istiyorum
Kod: Tümünü seç
select MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE FROM MUSTERI,HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO AND MUSTERI.CARISINIR>=BAKIYE
GROUP BY MUSTERI.HESAPKODU
bu şekilde bir sorgu yazdım fakat bakiye diye alan bulunamadı hatası verdi yardımcı olabilir misiniz...
boreas
Üye
Mesajlar: 120 Kayıt: 05 Tem 2007 12:39
Konum: Ankara
Mesaj
gönderen boreas » 26 Ağu 2016 09:27
Bu şekilde yapamazsın senin bakiye olarak belirttiğin veri sorgu esnasında oluşuyor. Öyle bir veriyide koşulda kullanamazsın. Yapman gereken view oluşturman. View oluşturduğun zaman sorgu esnasında oluşturduğun veri sanki tablonun kaydıymış gibi olur ve "where " komutuyla erişebilirsin.
....
boreas
Üye
Mesajlar: 120 Kayıt: 05 Tem 2007 12:39
Konum: Ankara
Mesaj
gönderen boreas » 26 Ağu 2016 09:28
Not olarak açtığın yerin yanlış olduğunu düşünüyorum. Programlamadan çok veritabanı sorusu bu.
....
erdogan_ozkaya
Üye
Mesajlar: 839 Kayıt: 03 Eki 2007 02:00
Mesaj
gönderen erdogan_ozkaya » 26 Ağu 2016 09:44
Merhaba,
belki aşağıdaki kod işine yarayabilir.
Kod: Tümünü seç
procedure TCARI_HESAP_BAKIYELERI.btn1Click(Sender: TObject);
var
Bookmark : TBookmark;
BORC : Real;
ALACAK : Real;
BAKIYE : Real;
begin
chkFATURALAR.Checked:=True;
label6.Caption:='Giriş/Çıkış Faturaları ';
qryHESAP_HAREKETLERI_DB.Close;
qryHESAP_HAREKETLERI_DB.SQL.Clear;
qryHESAP_HAREKETLERI_DB.SQL.Add(' declare @bakiyeler table '
+' (FIRMA_KIMLIK bigint,HESAP_KODU nvarchar(500),CALISILAN_FIRMA_KIMLIK nvarchar(500),FIRMA_TEL_1 nvarchar(500),'
+' FIRMA_UNVANI nvarchar(500),BORC numeric(18,2),ALACAK numeric(18,2),BAKIYE numeric(18,2),DURUM nvarchar(500)) '
+' insert into @bakiyeler '
+' select ct.FIRMA_KIMLIK,ct.HESAP_KODU,ct.CALISILAN_FIRMA_KIMLIK,ct.FIRMA_TEL_1,ct.FIRMA_UNVANI, '
+' sum(ch.FIS_GENEL_TOP_BORC) as BORC,sum(ch.FIS_GENEL_TOP_ALACAK) as ALACAK , '
+'(sum(ch.FIS_GENEL_TOP_BORC) - sum(ch.FIS_GENEL_TOP_ALACAK)) as BAKIYE, ct.FIRMA_UNVANI '
+' from HESAP_HAREKETLERI as ch, FIRMALAR as ct where ch.CARI_KART_KIMLIK = ct.FIRMA_KIMLIK '
+' AND ct.DURUMU = '+#39+'Aktif'+#39+'');
if chkFATURALAR.Checked=True
then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+' or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+' or ch.FIS_TIPI <> '+#39+'Firma Zimmet'+#39+')');
if chkFATURALAR.Checked=False
then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+' or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+' or ch.FIS_TIPI = '+#39+'Firma Zimmet'+#39+')');
// if chkZIMMETLER.Checked=True
// then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Firma Zimmet'+#39+' or ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+'or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+')');
// if chkZIMMETLER.Checked=False
// then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI <> '+#39+'Firma Zimmet'+#39+' or ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+'or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+')');
{
+' /*AND
+' CHMUSTERITIP='Alıcı+Satıcı' OR '
+' CHMUSTERITIP='Alıcı' OR '
+' CHMUSTERITIP='Satıcı' '
+' */
}
qryHESAP_HAREKETLERI_DB.SQL.Add(' group by ct.FIRMA_KIMLIK , ct.FIRMA_TEL_1, ct.HESAP_KODU,ct.CALISILAN_FIRMA_KIMLIK,ct.FIRMA_UNVANI Order By FIRMA_KIMLIK ASC '
+' declare @borclular table (FIRMA_KIMLIK bigint); '
+' insert into @borclular select FIRMA_KIMLIK from @bakiyeler where BAKIYE > 0 '
+' declare @alacaklilar table (FIRMA_KIMLIK bigint); '
+' insert into @alacaklilar select FIRMA_KIMLIK from @bakiyeler where BAKIYE < 0 '
+' declare @temizler table (FIRMA_KIMLIK bigint); '
+' insert into @temizler select FIRMA_KIMLIK from @bakiyeler where BAKIYE = 0 or BAKIYE = null '
+' update @bakiyeler set durum = '+#39+'Borçlu'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @borclular ) '
+' update @bakiyeler set durum = '+#39+'Alacaklı'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @alacaklilar ) '
+' update @bakiyeler set durum = '+#39+'-'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @temizler ) '
+' select * from @bakiyeler ');
qryHESAP_HAREKETLERI_DB.Open;
begin
edit_TOPLAM_BORC.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
BORC := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
BORC := BORC + qryHESAP_HAREKETLERI_DB.fieldbyname('BORC').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_BORC.Text := FloatToStr(BORC) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
begin
edit_TOPLAM_ALACAK.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
ALACAK := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
ALACAK := ALACAK + qryHESAP_HAREKETLERI_DB.fieldbyname('ALACAK').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_ALACAK.Text := FloatToStr(ALACAK) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
begin
edit_TOPLAM_BAKIYE.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
BAKIYE := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
BAKIYE := BAKIYE + qryHESAP_HAREKETLERI_DB.fieldbyname('BAKIYE').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_BAKIYE.Text := FloatToStr(BAKIYE) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
end;
end;
end;
end;
erdogan_ozkaya
Üye
Mesajlar: 839 Kayıt: 03 Eki 2007 02:00
Mesaj
gönderen erdogan_ozkaya » 26 Ağu 2016 09:48
Kod: Tümünü seç
procedure TCARI_HESAP_BAKIYELERI.cbb1Change(Sender: TObject);
var
Bookmark : TBookmark;
BORC : Real;
ALACAK : Real;
BAKIYE : Real;
begin
if cbb1.ItemIndex=1
then qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'Borçlu'+#39;
if cbb1.ItemIndex=2
then qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'Alacaklı'+#39;
if cbb1.ItemIndex=3
then qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'-'+#39;
qryHESAP_HAREKETLERI_DB.Filtered:=true;
begin
edit_TOPLAM_BORC.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
BORC := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
BORC := BORC + qryHESAP_HAREKETLERI_DB.fieldbyname('BORC').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_BORC.Text := FloatToStr(BORC) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
begin
edit_TOPLAM_ALACAK.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
ALACAK := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
ALACAK := ALACAK + qryHESAP_HAREKETLERI_DB.fieldbyname('ALACAK').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_ALACAK.Text := FloatToStr(ALACAK) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
begin
edit_TOPLAM_BAKIYE.Text :='0';
qryHESAP_HAREKETLERI_DB.Open;
Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
qryHESAP_HAREKETLERI_DB.DisableControls;
BAKIYE := 0;
try
qryHESAP_HAREKETLERI_DB.First;
while not qryHESAP_HAREKETLERI_DB.EOF do
begin
BAKIYE := BAKIYE + qryHESAP_HAREKETLERI_DB.fieldbyname('BAKIYE').Value;
qryHESAP_HAREKETLERI_DB.Next;
edit_TOPLAM_BAKIYE.Text := FloatToStr(BAKIYE) ;
end;
finally
qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
qryHESAP_HAREKETLERI_DB.EnableControls;
end;
end;
end;
end;
end;
vkamadan
Kıdemli Üye
Mesajlar: 1935 Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:
Mesaj
gönderen vkamadan » 26 Ağu 2016 12:33
Merhabalar ,
Kullandığınız database nedir belirtmemişsiniz ancak MySQL ve MSSQL de yer alan "Derived SQL" yapısı nı destekleyen bir database motoru kullanıyorsanız aşağıdaki gibi kullanabilirsiniz.
Kod: Tümünü seç
select * from (select MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE FROM MUSTERI,HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO AND MUSTERI.CARISINIR>=BAKIYE
GROUP BY MUSTERI.HESAPKODU) as yenitablo order by bakiye
Bu noktada yaptığımız sizin ilşk yazdığınız SQL i "yenitablo" adında bir veri setine dönüşltürdük en üstte ki SELECT ifademizle tüm sahalarınızı seçtik ve sonunda bakiye isimli sahaya sıralam yaptırdık.
esistem
Üye
Mesajlar: 464 Kayıt: 02 Eki 2007 11:22
İletişim:
Mesaj
gönderen esistem » 26 Ağu 2016 12:53
Selam aşağıdaki şekilde HAVING kullanarak çalışabilir belki, denemedim kodu.
Kod: Tümünü seç
select
MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,
SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE
FROM MUSTERI, HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO
GROUP BY MUSTERI.HESAPKODU
HAVING (SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK))>=MUSTERI.CARISINIR
vkamadan
Kıdemli Üye
Mesajlar: 1935 Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:
Mesaj
gönderen vkamadan » 26 Ağu 2016 01:50
Merhaba ,
ben sorunun başlığından doğrudan bakiyeye göre SIRALAMA ya kanalize olup sorunuzu sonuna kadar okumadan cevap vermişim kusura bakmayın
@esistem in önerisine katılıyorum sadece minik bir düzeltme having kısmı tüm veri seti oluştuktan sonra çalıştığı için ve sizin veri setinizde hesaplanmış olarak "bakiye" sahası yer aldığı için having de birdaha hesaplatmanıza gerek olmadan direk aşağıdaki gibi kullanabilirsiniz. (zaten veritabanı yeniden hesaplamayacak ama yazımı daha sade olmuş olacak)
Kod: Tümünü seç
select
MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,
SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE
FROM MUSTERI, HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO
GROUP BY MUSTERI.HESAPKODU
HAVING BAKIYE>=MUSTERI.CARISINIR
thelvaci
Kıdemli Üye
Mesajlar: 770 Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:
Mesaj
gönderen thelvaci » 28 Ağu 2016 12:53
MUSTERI.HESAPKODU alanına göre gruplama yapılıyor ise, gruplanmamış alanlar yalın halde select sorgusunun içinde alan olarak bulunamazlar. Aggragate fonksiyonlar ile sarmalanmaları gerekir yada group by kısmında gruplanmış olmaları gerekir.