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
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.
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
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"
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;
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.
'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.