var
a:integer;
begin
QRY_GIDER.edit;
QRY_GIDER.post;
QRY_GIDER.refresh;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
QRY_GIDER.edit;
QRY_GIDER.FieldByName('SIRA_NO').VALUE:=inttostr(a);
QRY_GIDER.Post;
QRY_GIDER.Refresh;
QRY_GIDER.next;
end;
IBTransaction1.CommitRetaining;
end;
ile her yeni kayıt girildiğinde bir sıranumarası verdiriyorum.
tarih sıralatıyorum ve bu işlemi quickraporda sql üzerinden alıyorum burada Ibquery her girilen kayıda sıra ile
SIRA_NO
1
2
3
..
.. verirken sql ise kayıtları
...
...
SIRA_NO GIDER_TARIH
3 10.10.2006
2 11.10.2006
1 12.10.2006
şeklinde sıralanıyor haliyle raporda da bu sıralamayı veriyor oysaki tarihler küçükten büyüğe sıralanırken SIRA_NO bölümünüde aynı şekilde sıralamasını istiyorum tablo kaydımla sql yi örtüştüremi bir türlü beceremedim yardımcı olacak arakadaşlara şimdiden teşekkür ediyorum
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
hocam bu arada küçükten büyüğe olacak olan tarih alanı ne olacak
order by GIDER_TARIH ,SIRA_NO
order by SIRA_NO,GIDER_TARIH ikisinide denedim olmadı.Tarihi sıralasa sırano yu sıralayamıyor.Benim istediğim aslında rapordaki subdetaildeki kayıtları yukaradan aşağıya sıra numarası verdirmek başka bir yöntemde olabilir
var
a:integer;
begin
QRY_GIDER.edit;
QRY_GIDER.post;
QRY_GIDER.refresh;
//sıra noyu da verirken tarihe göre sıralayıp ver
QRY_GIDER.SQL.Text:='select *from TBL_GIDER order by GIDER_TARIH ASC';
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
QRY_GIDER.edit;
QRY_GIDER.FieldByName('SIRA_NO').VALUE:=inttostr(a);
QRY_GIDER.Post;
QRY_GIDER.Refresh;
QRY_GIDER.next;
end;
IBTransaction1.CommitRetaining;
end;
var
a:integer;
begin
QRY_GIDER.edit;
QRY_GIDER.post;
QRY_GIDER.refresh;
//sıra noyu da verirken tarihe göre sıralayıp ver
IBQuery9.SQL.Clear;
IBQuery9.SQL.Add('select * from TBL_GIDER ORDER BY GIDER_TARIH ASC' );
IBQuery9.open;
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
QRY_GIDER.edit;
QRY_GIDER.FieldByName('SIRA_NO').VALUE:=inttostr(a);
QRY_GIDER.Post;
QRY_GIDER.Refresh;
QRY_GIDER.next;
end;
IBTransaction1.CommitRetaining;
end;
tarihleri doğru sıralaıyor ama sıra numarası olmuyor.girdde şöyle gözüküyor
3 3.10.2006
2 4.10.2006
1 5.10.2006 aslında bu kodu nasıl düzenlerim bilmiyorum ama önce her yeni kayıt girildiğinde kaydet denildiğinde tarihi sıraya koyacak ve kayıtlardaki sıra numaralarını silecek yeniden sıralanmış tarihlere göre birden başlayarak sıra no oluşturacak bunu her yeni kayıtta tekrarlayacak.çünkü burada query ile tablo kayıtlarının benim istediğim şekilde örtüşmesi mümkün gözükmüyor.
//sıra noyu da verirken tarihe göre sıralayıp ver
IBQuery9.SQL.Clear;
IBQuery9.SQL.Add('select * from TBL_GIDER ORDER BY GIDER_TARIH ASC' );
IBQuery9.open;
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
Tam olarak söylemek istediğimi yapmamışsın ki. Verileri ibquery9 da tarihe göre sıralamışsın. Ama sıra noları ORY_GIDER tablosuna atamışsın.
//sıra noyu da verirken tarihe göre sıralayıp ver
QRY_GIDER.SQL.Clear;
QRY_GIDER.SQL.Add('select * from TBL_GIDER ORDER BY GIDER_TARIH ASC' );
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
birde böyle denermisin.
İkinci bir firkir veya yöntem. Sen bu sıranoları ve tarihleri sadece raporlamada kullanacaksan. Sırano alanının tablondan çekme. Onun yerine sıra no nun olacağı yere QRSysData at data özelliğinide qrsDetailNo yap. Dolayısı ile sıra_no otomatik olarak bir den başlayıp lisetelenen kayıt sayısı kadar artan sıra ile gidecek.
Hem her kayıt girildikçe baştan sıra no vermen 5-10 bin kayıttan sonra problem olur.
var
a:integer;
begin
QRY_GIDER.edit;
QRY_GIDER.post;
QRY_GIDER.SQL.Clear;
QRY_GIDER.SQL.Add('select * from TBL_GIDER ORDER BY GIDER_TARIH ASC' );
QRY_GIDER.Open;
QRY_GIDER.refresh;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
[Hint] Giris.pas(329): Value assigned to 'a' never used
[Error] Giris.pas(408): Undeclared identifier: 'SQL'
[Error] Giris.pas(409): Undeclared identifier: 'SQL'
[Fatal Error] ANASINIFIM.dpr(6): Could not compile used unit 'Giris.pas'
var
a:integer;
begin
QRY_GIDER.edit;
QRY_GIDER.post;
QRY_GIDER.refresh;
//sıra noyu da verirken tarihe göre sıralayıp ver
QRY_GIDER.SelectSQL.Text:='select * from TBL_GIDER order by GIDER_TARIH ASC';
QRY_GIDER.Close;
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
QRY_GIDER.edit;
QRY_GIDER.FieldByName('SIRA_NO').VALUE:=inttostr(a);
QRY_GIDER.Post;
QRY_GIDER.Refresh;
QRY_GIDER.next;
end;
IBTransaction1.CommitRetaining;
end;
Hocam bu SIRA_NO alanına hep bir sayısını yerleştirıyor
1 tarih
1 tarih
1 tarih şeklinde
QRY_GIDER in SelectSQL ine içine bizzzat yazmıştım bunu datasette her düzenleme yapıyor ama istedğim şekilde olmadı.
İstenilen şu yada yapmak istediğim tekrar belirteyim .her yeni kayıt girildiğinde kayıtlardaki tüm tarihler kontrol edilecek (küçükten büyüğe sıralanmış olarak) ve yeni girilen kayıt bu sıraya uyacak yanlız uyarken yeni gelen kayıt 2. ile 4.tarih aralığında ise ona 3.sıra numarasını vercek ve düzenlemeyi yapacak.bu yeni gelen her yeni tarihli kayıt için tekrarlayacak.
Yada başka yol olarak raporlama de QRSubDetail e QRSysData nın datasını qrsDetailCount ve qrsDetailNo olarak da denedim bir türlü sıra numarası yaptıramadım
QRExpr1 ile forumda arama yaptım ama bunla ilgili olarak QRExpr1 nin Expression una nasıl kod yazılıyor yada nasıl kullanılıyorla ilgili bir bilgiye ulaşamadım
Kısaca ben tablede önemli dağil ama raporlamada QRSubDetail de gördüğüm tüm kayıtlarımın sıra numarasını görmek istiyorum.Onun içinde table ye bir sıra numarası işliyorum ama buda tarih sıralaması yaptığımda sıra no bozuluyor
var
a:integer;
begin
//QRY_GIDER.edit;
//QRY_GIDER.post;
//QRY_GIDER.refresh;
//sıra noyu da verirken tarihe göre sıralayıp ver
QRY_GIDER.SelectSQL.Text:='select * from TBL_GIDER order by GIDER_TARIH ASC';
QRY_GIDER.Close;
QRY_GIDER.Open;
QRY_GIDER.first;
for a:=1 to QRY_GIDER.recordcount do
begin
QRY_GIDER.edit;
QRY_GIDER.FieldByName('SIRA_NO').VALUE:=inttostr(a);
QRY_GIDER.Post;
//QRY_GIDER.Refresh;
QRY_GIDER.next;
end;
IBTransaction1.CommitRetaining;
end;
Refreshten kaynaklanıyordu muhtemelen bir daha dene bekliyorum.
S.A
Jeton biraz geç düştü. Aklıma farklı bir yöntem geldi.
QRY_GIDER datasetine SIRANO adında yeni bir field ekle calculated field.
integer olsun. CalcFields olayında şu kodu yaz.
procedure TForm1.QRY_GIDERCalcFields(DataSet: TDataSet);
begin
IBDataSet1SIRANO.AsInteger:=IBDataSet1.RecNo;
end;
tabi burdan sonrada 'order by GIDER_TARIH ASC' dersen veya farklı bir sorgu istesen dahi bizim SIRANO 1 den başlar kayıt sayısı kadar sırayla devam eder.
Bu yazdığın kod hangi datasetin hangi eventinde çalışıyor? Veya bir butona basınca mı çalışıyor? Hatta mümkünse datasetin bulunduğu PAS dosyanın içeriğinin tamamını CODE olarak gösterebilir misin?