son kayıtı seçmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

son kayıtı seçmek

Mesaj gönderen ZeynelAbidin »

arkadaşlar benim databasim aşağıdaki gibi
sira integer *
bordrono string *
portno string *
tur string *
böyle bir pardox databaseim var
şimdi ben burada bu datayı portno ya göre filtreleyip filtrenin son kaydının tur değeri '0' veya '3' ise nasıl diyebilirim.sql kodları ile demem lazım.ben

Kod: Tümünü seç

select * from cek 
where (cari=....)
and
((select last(tur) from cek_bordro where cek_bordro.portno=cek.portno)=0)

böyle bir kod ile yapmaya çalıştım ama last komutunda hep takılıyor.yukarıdaki kodu kısalttım çünkü asıl kodlar yanımda değil. ama benim istediğim

Kod: Tümünü seç

((select last(tur) from cek_bordro where cek_bordro.portno=cek.portno)=0)

bu kısmı nasıl çözebileceğim.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: son kayıtı seçmek

Mesaj gönderen mkysoft »

yukarıda portno demişsiniz aşağıdaki SQL'de tur'a göre son kaydı almaya çalışmışsınız. Anlayamadım şimdi portno ya göre mi yoksa tur'a göremi son kaydı alacaksınız?
Kayıtları tersten sıralayın ilk kaydı alın. Yada iki sql kullanarak önce son kaydın port yada tur numarasını alın, ikinci sqlde o kaydı çağırın. Eğeren paradoxda iç içe sql yazabiliyorsanız tek seferde de halledebilirsiniz.

Kod: Tümünü seç

select * from cek_bordro where tur=(select max(tur) from cek_bodro where portno=3 and portno=0)
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: son kayıtı seçmek

Mesaj gönderen ZeynelAbidin »

kodları evdeki bilgisayarda unuttuğum için net anlatamadım ama sizin cevabınız bana bir yol gösterdi deneyip ona göre tekrar olup olmadığını ve tam querymi buraya yazacağım .cevabınız içinde teşekkür ederim
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: son kayıtı seçmek

Mesaj gönderen ZeynelAbidin »

Kod: Tümünü seç

data.cek_table.SQL.Clear;
data.cek_table.SQL.Add('select * from cek');
data.cek_table.SQL.Add('left outer join cek_bordro on cek.portno=cek_bordro.portno');
data.cek_table.SQL.Add('left outer join bordro on cek_bordro.bordrono=bordro.bordrono');
data.cek_table.SQL.Add('WHERE (BORDRO.carikod='+quotedstr(kodu.Text)+')and');
data.cek_table.SQL.Add('((select tur from cek_bordro where cek_bordro.portno=cek.portno)="0")');
data.cek_table.Open;
arkadşalar benim cek cek_bordro ve bordro isminde 3 database im var.verileri kaydederken çekleri çek.db ye kaydediyorum.bordronun içerğinde olan çekleri ise cek_bordro isimli kütüğe kaydediyorum.örneğin benim bordromda 3 tane çek var ise cek_bordroda o bordro no ve çekleri hepsini tek tek kaydediyorum.okuma yaparken de cek_bordro yu bordro.bordrono ya göre filtreledikten sonra cek.portno yud cek_bordro.portno ya göre filtreleyip ekran o bordronun görünmesini sağlıyorum burda bir problemim yok.ama şimdi benim yukarda yapmak istediğim cekleri aldığım cariye geri iade etmek.bunun içinde çeklerin portföyde olması gerekiyor.portföy içinde cek_bordro.tur değerinin '0' veya '3' değerini alması lazım.(birisi portföye giriş(0)birisi cariden portföye iade(3) )benim queryim son satıra kadar normal çalışıyor.benim yukarda yapmak istediğim cek_bordoyu cek.portnoya göre filtreleyip cek_bordro daki en son kayda gidip eğer cek_bordro.tur='0' veya '3' ise o çekin filtrede görünmesin sağlamak istiyorum.
bu kdou çalıştırdığım zaman böyle bir hata alıyorum "single row subguery produced more than one row"
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: son kayıtı seçmek

Mesaj gönderen White Rose »

son kaydı seçmek için ilgili alana göre sıralayıp last komutu ile rahatlıkla gidebilirsiniz.
query.Close;
query.sql.text:='select * from table where ............ order by ilgili_alan';
query.execSQL;
query.last;
alan:=query.fieldbyname('ilgili_alan').asstring;
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: son kayıtı seçmek

Mesaj gönderen ZeynelAbidin »

o şekilde olay çözülebilir ama ben hızlı olması için herşeyi sql cümleleri ile yazmak istiyorum.
aslında benim istediğim ekrandakin kod.text e göre bordro.dbyi filtreleyip.
o filtre sonucunda bordrono ları alıp cek_bordroyu filtreleyip.sonra portnoya göre baştan aşağı hepsini taratarak eğer eğer portno nun aktif tur değeri 1 veya 3 ise ekran da o çekin görülmesini sağlamak istiyorum.
group by ile yapılabilirmi acaba belki ben ilk baştan yanlış başlamış olabilirmiyim.Tıkandım kaldım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: son kayıtı seçmek

Mesaj gönderen conari »

Kod: Tümünü seç

'select * from table where ............ order by ilgili_alan';
eğer bu istediğiniz veriyi getiriyor ise bunu
'select top 1 * from table where ............ order by ilgili_alan DESC
olarak düzenleyin Tek kayıt ve son kayıt dönsün.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: son kayıtı seçmek

Mesaj gönderen aslangeri »

@conari; Paradox un top 1 i destekleyeceğini zannetmiyorum. :wink:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: son kayıtı seçmek

Mesaj gönderen conari »

aslangeri yazdı:@conari; Paradox un top 1 i destekleyeceğini zannetmiyorum. :wink:
Paradox olduğuna hiç dikkat etmemiştim. (bilmemde zaten) :roll: :oops:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: son kayıtı seçmek

Mesaj gönderen ZeynelAbidin »

peki ben ne yapacağım o zaman
3 tabloyu nasıl birleştireceğim.
Cevapla