Sıra_No

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Sıra_No

Mesaj gönderen haydarxxx »

slm
Aşağıdaki kod ile ınteger olan SIRA_NO alanına post işleminde (QRY_GIDER ...>IBQuery)

Kod: Tümünü seç

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.

IBQuery9 nin Tstring bölümünde

Kod: Tümünü seç

select  *from TBL_GIDER order by  GIDER_TARIH ASC
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
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

order by SIRA_NO, GIDER_TARIH

Kolay gelsin
Ş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.

Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

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 :roll:
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Anladığım kadarı ile her kayıt girdikten sonra tablonu baştan aşağı tarayıp yeniden sira_no giriyorsun.

Gördüğüm kadarı ilede hatayı sıra noyu verirken yapıyorsun.

Kod: Tümünü seç

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;
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

mero doğru anlamışsın ama bu şekildede olmadı.IBQuery ile de konrol ettirerek denedim.aşağıda

Kod: Tümünü seç

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.
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Kod: Tümünü seç

//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.

Kod: Tümünü seç

//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.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

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
verdiği hata

Kod: Tümünü seç

[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'
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Kusura bakma yanlış anlamışım.
(QRY_GIDER ...>IBQuery) görünce ben ORY_GIDER i ibquery zannettim.
zannerdersem edit ve post ettiğine göre ibtable.

IBTable de sıralama nasıl yapılıyor bilmiuyorum. Ama

Kod: Tümünü seç

QRY_GIDER.SQL.Clear; 
QRY_GIDER.SQL.Add('select * from TBL_GIDER ORDER BY GIDER_TARIH ASC' ); 
QRY_GIDER.Open; 
Yerine IBTable i GIDER_TARIH alanına göre sıralattıktan sonra SIRA_NO girme işlemini yaparsan sorunun çözülür.

Yine belirtmek isterim sıra noları her kayıt girdikten sonra düzenlemen sağlıklı değil. Rapor kısmında veya grid de bir çözüm bulman gerek.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam çok özür ya yanlış yazmışım (QRY_GIDER ...>IBdataset) olacaktı :oops:
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Kod: Tümünü seç

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;
Bu şekilde bir dener misin?
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam bu SIRA_NO alanına hep bir sayısını yerleştirıyor
1 tarih
1 tarih
1 tarih şeklinde :roll:

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 :cry:

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
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

Kod: Tümünü seç

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.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam son değişikliktede kayıt yapmıyor :(
mero
Üye
Mesajlar: 109
Kayıt: 04 Mar 2005 04:54

Mesaj gönderen mero »

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.

Kod: Tümünü seç

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.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

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?

İyi çalışmalar.
Cevapla