sadece hareketi olan cari kartları nasıl listelerim?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

sadece hareketi olan cari kartları nasıl listelerim?

Mesaj gönderen serkan »

selam arkadaşlar..
iki tablom var klasik..

CARİ TABLO
FİRMA KODU ÜNVANI PLASİYER
1000 SERKAN ÖZKAN MEHMET ÖZCAN
2000 AHMET AK TAYFUN

HAREKET TABLOSU
FİRMA KODU TARİH TUTAR HAREKET TİPİ
2000 01.01.2006 1.000 TAHSİLAT
1000 15.01.2006 2.000 FATURA

yapmaya çalıştığım şey iki tarih arasında hareket görmüş, plasiyeri mehmet olan cari kartları listelemek..

aşağıdaki kodu kullanıyorum ama plasiyer kısmını dikkate almıyor.almıyor derken plasiyeri mehmet olanları getiriyor ama plasiyere ABC yazınca hepsini getiriyor halbuki ABC diye bir plasiyer yok.

Kod: Tümünü seç

carikartrpr.Close;
carikartrpr.SelectSQL.Clear;
carikartrpr.SelectSQL.Add('select  h.carikod,m.firmakodu,m.firmaadi from carihrk h,musteri m where h.carikod is not null');
if e1.Text<>''  then  carikartrpr.SelectSQL.Add('and M.FIRMAKODU>='+Quotedstr(''+E1.Text+''));
if e4.Text<>''  then  carikartrpr.SelectSQL.Add('AND M.FIRMAKODU<='+Quotedstr(''+E4.Text+''));
if e2.Text<>''  then  carikartrpr.SelectSQL.Add('and M.FIRMAADI>='+Quotedstr(''+E2.Text+''));
if e5.Text<>''  then  carikartrpr.SelectSQL.Add('AND M.FIRMAADI<='+Quotedstr(''+E5.Text+''));
if D1.Text<>''  then carikartrpr.SelectSQL.Add('and h.tarih >='+#39+(D1.Text)+#39);
if D2.Text<>''  then carikartrpr.SelectSQL.Add('and h.tarih <='+#39+(D2.Text)+#39);
if depoedit.Text<>''  then carikartrpr.SelectSQL.Add('and M.depo<='+Quotedstr(''+depoedit.Text+''));
carikartrpr.SelectSQL.Add(' and M.FIRMAKODU = h.CARIKOD');
carikartrpr.SelectSQL.Add('group by h.carikod,m.firmakodu,m.firmaadi');
carikartrpr.SelectSQL.Add('order by M.FIRMAKODU');
carikartrpr.Open;
iqprog

Mesaj gönderen iqprog »

select firmakodu, firmaadi from musteri
where exists (
select * from carihrk where tarih between
'01.01.2006' and '15.01.2006'
and carihrk.firmakodu=musteri.firmakodu
and plasiyer='mehmet')
En son iqprog tarafından 09 Kas 2006 03:53 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

hocam firebird kullanıyorum exist'i kabul etmedi onun yerine in kullansak nolur aynı işi yapmazmı?
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Exists ile in tamamen farklı... Exists ile verilen subquery eğer en az bir satır donerse ana sorguda o satır kabul edilir donmez ise kabul edilmez.... Ayrıca exists in Firebird de olması lazım yazım hatası vs... olabilir bence...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

evet hocam yazım hatası

Kod: Tümünü seç

where firmakodu exists
yazan bölümde firmakodunu kaldırınca oluyor.ibexpertte denedim daha delphi içinde kullanmadım..
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

selam..iqprog dediğin gibi yaptım oldu teşekkür.ama benim soruda yazan kodda gözüktüğü üzere m.depo<= yapmışım o yüzden olmayan plasiyerlerde geliyomuş.neyse her işte bir hayır vardır programcılık hayatımda ilk kez exists komutu kullanmış oldum bu sayede vatana millete hayırlı olsun.
iqprog

Mesaj gönderen iqprog »

ya sqli hayali yazdım tabi iki tane imla hatası yapmışım düzelttim.
kolay gele.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

hocam yeni topic açmıyım dedim subqery kullanınca subquery'i birden fazla satırda nasıl kullancaz yani sorumdaki sql cümlesi gibi editleri kontrol edip ...text<>'' şeklinde sorgu eklemem lazım subquerye ama syntaxı çözemedim.bunu nasıl yapcaz.
iqprog

Mesaj gönderen iqprog »

yardımcı olabilmem için soruyu net olarak örnekle yazsan iyi olur.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

hocam kusura bakma vakit olmadığından basitçe anlatcam mesela senin verdiğin ilk cevapta bir sql cümlesi örneği vermişsin.

aşağıdaki gibi;

Kod: Tümünü seç

select firmakodu, firmaadi from musteri 
where exists (select * from carihrk where tarih between 
'01.01.2006' and '15.01.2006' and carihrk.firmakodu=musteri.firmakodu 
and plasiyer='mehmet')
yukarıdaki kodda yer alan tarih alanlarını ve plasiyeri edit textlerden almam lazım.ayrıca mesela tarih1 editine tarih girilmiş ise dikate alınması lazım eklenmemişse tüm tarihleri getirmesi lazım.yani benim sorumda verdiğim koddaki gibi..
iqprog

Mesaj gönderen iqprog »

tabi ben sana örnek sql yazdım sen bunu parametrik hale getirebilirsin.

select firmakodu, firmaadi from musteri
where exists (select * from carihrk where tarih between
:tarih1 and :tarih2 and carihrk.firmakodu=musteri.firmakodu
and plasiyer=:plasiyer)

gibi. bunda da queryinin parambyname('tarih1').asdatetime := dateedit1.date gibi bir şeyle diğer parametrelere de atama yapabilirsin.

adamın sadece tek tarih girme olayınıda queryin sqlini clear edip, tek tarihe göre başka sql yazdırman lazım tabi bunu kodlarla yapman gerekli. bunu tek sql ile de yapabilirsin ama sql çok karışır bunu burada anlatamam şimdi uzun hikaye o biraz. en iyisi duruma göre sqlini clear edip tekrar yazman kodlarla tabi.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

sağol hocam verdiğin örneki bende biliyorum ikinci bahsettiğin yani karışık olanı sormuştum daha kolay bir yöntemi olurmu diye..artık baştan if.. then ler ile hangi parametrelere bilgi girilmiş onu tesbit edip ona göre sql i çalıştırcaz.sorun değil yardımın için sağol.
Cevapla