sıralama (order by)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

sıralama (order by)

Mesaj gönderen bobasturk »

Merhabalar,

forumda aratmadan sonra bulduğum sonuçlarda sıralama için order by kullanmam gerektiğini buldum, bunu daha öncede biliyordum. ama birtürlü düzelmiyor ve acayip bir sıralama yapıyor.

veri tabanım FB
Delphi 7 kullanıyorum
ibdatabase ve ibdataset bileşenleri ile bağlanıyorum.

sql cümlelerim select*from ARSIV order by ILCE_NO

bir vt diğer vt ye veri aktarma işini yapmak istedim ve küçük bir program yazdım

Kod: Tümünü seç

eskibdset.First;
  while not eskibdset.Eof do
  begin
    yenibdset.Insert;
    yenibdset.FieldByName('ILCE_NO').AsString:=inttostr(eskibdset.fieldbyname('ILCENO').asinteger);
    yenibdset.FieldByName('CERAIM_NO').AsString:=inttostr(eskibdset.fieldbyname('CERAIMNO').asinteger);
    yenibdset.FieldByName('EGM_NO').AsString:=inttostr(eskibdset.fieldbyname('EGM_NO').asinteger);
    yenibdset.Post;
    eskibdset.Next;
  end;
bu kod ile bir veri tabanından diğerine veri aktarıyorum.aktarma işinde problem yok. eski vt de veriler grid içinde ILCENO olarak 1,2,3,..... şeklinde sayısal sıralı ve buttona bastığımda veri aktarılıyor. sonra yeni vt ye baktığımda sıralama 1,10,100,1000,1001,....1009,101,1010,1011,1012,...102.1020,1021,... şeklinde acayip bir algoritma ile sıralıyor.

tamam veri tabanında böyle sıralasın varsın ama kullanıcıya for üzerinde sıralı görünsün istedim ve order by ILCENO ile sıralamasını istiyorum ama vt nin aynısı sıralıyor order by ı dikkate almıyor. naptımsa olmuyor ibdataset leri sildim yeniden oluşturdum sonuç aynı yardımcı olursanız sevinirim

ILCENO alanları integer tanımlı. önce string tanımlı idi hata belki buradandır dedim integer e çevirdim sonuç aynı

teşekkür ve saygılarımla
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ı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

bobasturk yazdı:

Kod: Tümünü seç

yenibdset.Insert; 
    yenibdset.FieldByName('ILCE_NO').AsString:=
bunu yapması gayet normal yeni verityabanındaki 'ILCE_NO' alanın string
bunu integere çevirirsen düzelir.
bobasturk yazdı:ILCENO alanları integer tanımlı. önce string tanımlı idi hata belki buradandır dedim integer e çevirdim sonuç aynı
burdaki alan eski veritabanında ama sen
bobasturk yazdı:sonra yeni vt ye baktığımda sıralama 1,10,100,1000,1001,....1009,101,1010,1011,1012,...102.1020,1021,... şeklinde acayip bir algoritma ile sıralıyor.
yeni vt de sıralam yapıyorsun

bence kodları bi sakın kafayla gozden geçir
belki dikkatinden kaçmıştır. :lol:
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustam merhaba,

doğru diyorsun size yazdığım kodda hata var dediğin alternatifi düşündüm ve sonra heriki yani yeni vt içindede alanı integer yaptım sonuç aynı. verileri excele aktarıp ordan çektip sıralı olarak sonuç yine aynı. sabahı ettim ve işe geldim. biraz uyumaktan heral birşey daha denemek geldi içimden ibdatasetin sql sinde order by kullanmamak ve gördümki sıralama 1,2,3... şeklinde gösteriyor. dedim hata olmasın bide vt ye bakayım orada o garip şekilde sıralı. sebebine gelince şöyle bir yorum yaptım alan pk işaretli ve bu sebeple otomatik index oluşturuyor. verileri bu yüzden kendi mantığınca sıralıyor, delphi tarafında da order by kullanınca veriye hızlı erişim adına bu şekil bişiler yapıyor diye düşündüm. neyse cahilliğimle kafanızı yormak istemem. şimdide FK ile uğraşıyorum fk yı akşam oluşturmuştum şimdi oluşturamıyorum aynı yol aynı alanlar aynı şeyler ama bir türlü oluşturmuyor. forumda arttım ve bulduğum sonuçta tarifi benim yapkığım gibi ama yinede olmuyor. daha sabahtan kafam döndü ağzım kurudu.

siz bu işlerle tivari açıdanda uğraşan kişi olarak nasıl sabredip bilgisayarı kırmıyorsunuz anlamıyorm doğrusu,

Allah sabır ve kolaylıklar versin
Ş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ı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

bobasturk yazdı:ustam merhaba,
daha sabahtan kafam döndü ağzım kurudu.

siz bu işlerle tivari açıdanda uğraşan kişi olarak nasıl sabredip bilgisayarı kırmıyorsunuz anlamıyorm doğrusu,

Allah sabır ve kolaylıklar versin
bilgisayar kırınca işler düzelmiyorki niye kıralım ben sadece bir kere klavye kırmıştım :oops:
ama baktım bu bi işe yaramıyor hatta işleri daha kotu hale getirdi gece yarısı klavyesiz kaldım bileyimde ağrı vardı :) :D :)
bende artık vazgeçtim
bu gibi durumlarda eğer çok acil değilse biraz uyumak en mantıklısı
:idea:
neyse sorunun çözülmesine sevindim
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Halen alan string olarak değerlendirildiği için bu durum sözkonusu. İlgili table'ı silip yeniden oluştur. Integer'ler asla bu şekilde sıralanmazlar.
Kullanıcı avatarı
mnt
Üye
Mesajlar: 57
Kayıt: 30 Eki 2005 12:58
Konum: Kocaeli

Mesaj gönderen mnt »

yenibdset.FieldByName('ILCE_NO').AsString:=inttostr(eskibdset.fieldbyname('ILCENO').asinteger);

yerine;

yenibdset.FieldByName('ILCE_NO').AsString:=eskibdset.fieldbyname('ILCENO').AsString;

daha kısa..
Mustafa
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

evet ustalarım dediğiniz gibi önce string di kodda görüldüğü gibi sonra kafam şarz etti diye sevindim ve integere çevirdim alanları ama sonuç aynı idi 1,10,100,1000.. diye. kafayı yedim sonra. gündüz denememde başka bilgisayarda sonuç yine aynı idi. ama bu sefer sql cümlesinden order by ılceno satırını kaldırdım yani sıralamasını istemedim bu sefer oldu sıralama düzgündü. aslında veri tabloda tek numara ile bulunsunda nasıl olursa olsun diyorum ama formda görüntüsü açısından bir türlü kendime sevdiremedim o yüzden düzgün sıralasın istiyorum.

yardımınız için teşekkür ederim. şimdi tabloları yeniden oluşturdum yeni vt ve proje ile inşeallah yine kafayı yedirmez. fk işinide çözdüm bilmiyorum sizde oluyormu bir vt de çok uğraşınca işler bozuluyor hatta bağlanmıyor bile sıfırdan vt oluşturunca başka isimle fk falan sorunsuzca oluştu.

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
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Çok yaz boz yapınca oluyor. Özellikle IB Expert vs kullanıyorsan. Birşeyleri yanlış yapıyor IBExpert.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

evet ustam çok yaz boz ibexperti bozuyor, yada bana acemisin sen diyerek kızıyor.

büroda aynı tablolara fk uygulamasını bir türlü yapamadım ana tabloyu kullanamassın gibisine bir uyarı veriyordu. aynı çalışmayı eve getirdim evde bulunan ibexpertte hiç nazlanmadan fk leri oluşturdu. birbirimizi çok seveceğiz heralde.

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
Cevapla