cxgrid de string alanı integer gibi sıralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

cxgrid de string alanı integer gibi sıralama

Mesaj gönderen berken »

merhaba arkadaslar.. aradım bulamadım.. eğer varsa kusura bakmayın..
benım bir string bir alanım var.. ama istisnalar haricinde sayı olarak değerler giriliyor..
ben gridde sıralama yaparken integer gibi sıralamak istiyorum..
ornegin ..
alanımdaki değerleri 1 den 100 e kadar düşünün..
sıralama yaptığımda
1,10,100,11,12 diye gidiyor..
ama istediğim bu değil ..
1,2,3,4, 5-a,5-b, 99,100, gibi istiyorum
alanı string tanımlamamın sebebi bazen bu degere 5-a,5-b gibi değerlerin de girilebilmesi..
İnsanca.... Pek insanca....
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

şöyle bir şey geldi aklıma. veri tabanına ekleyeceğiniz bir function yardımıyla bu alanı integer tipine dönüştürün. verileri çekerken bu fonksiyonun sonucuna göre sıralatırsınız. Tabi bunu kod ile delphi tarafında da yapabilirsiniz.
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

yani bir bir integer alan tanımlayayım..
pozisyon değerini (mevzu bahis alan :) ) oraya integer olarak yazdırayım..
doğru mu anladım.
ama 5-a gibi bir değeri nasıl yapacam. ve gridde görüntülenen pozisyonu sort ederken nasıl o tanımladığım yedek alana göre yapacam..
aslında benım düşündüğüm cxgridde properties lik bir durum var mı ...

.. bilgi olsun diye soyleyim.. D7, mysql 4.1 QR 4.0 kullanıyorum..
İnsanca.... Pek insanca....
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
veritabani olarak ne kullandığınızı bilemiyorum ama
stringleri sağa dayalı olarak kaydederseniz sıralamayı istediğiniz şekilde yapacaktır.
yani;
atıyorum alanın uzunluğu varchar (10) olsun
kayıtları
'5-a'
'5-b' şeklinde değil
' 5-a'
' 5-b'
' 5a'
gibi saklarsanız istediğiniz şekilde sıralama yapar.
kolay gelisn.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

teşekkur ederim usta.. dediğiniz şekilde olduu..
İnsanca.... Pek insanca....
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

benim söyledim şu şekilde bir fonksiyon yazmanızdı:
fonksiyon parametre olarak string değer alıp integer değer döndürecekti.
tabiki fonksiyon içinde direk olarak strtoint() kullanmayacaktınız. gelen veriyi karakter karekter inceleyip harlerin yerine 0 koyabilirdiniz. daha sonra sorguda;
select * from tablom order by fonksiyonum(alanim);
ikut

Mesaj gönderen ikut »

aslangeri yazdı:s.a.
veritabani olarak ne kullandığınızı bilemiyorum ama
stringleri sağa dayalı olarak kaydederseniz sıralamayı istediğiniz şekilde yapacaktır.
yani;
atıyorum alanın uzunluğu varchar (10) olsun
kayıtları
'5-a'
'5-b' şeklinde değil
' 5-a'
' 5-b'
' 5a'
gibi saklarsanız istediğiniz şekilde sıralama yapar.
kolay gelisn.
sağa dayalı kayıt otomatik oluyormu yoksa kodlamı çevirmek gerek. benim bildiğim char tipi sağa boşlul ekler varchar boyut neyse ou tutar. peki sağa dayalı string nasıl tutulabilir ?
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

sağa dayalı meselesini kaydederken yapıyorum..
10 karekter olarak database yazıyorum yani..
pozisyon := copy(' ',1,1-length(pozisyon)) + pozisyon ;
şeklinde kayıt yapıyorrum...
yanı kullanıcı '21' girmişse onu database ' 21' şeklinde kaydediyorum..
bir fikir sadece..
İnsanca.... Pek insanca....
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

aslengeri hocam..

alana karakter de girilince sıralama olmuyor..
harfli olanı en sona atıyor..
burda görünsün diye space yerine _ koyuyorum


'______1234'
'______1235'
'______1236'
'______1237'
'______1238'
'_____1234A'


gibi oluyor..
ama ben 1234A nin 1234 ün altında görünmesini istiyorum..
bunu nasıl yapabilirim..
İnsanca.... Pek insanca....
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
açıkçası o şekilde nasıl olur bilmiyorum. şu an aklıma bir fikirde gelmiyor.
istediğin şey bana pek uygun gelmedi, verdiğin örnek genelleştirilmesi biraz sıkıntılı bi durum gibi. 5 karakterli elemanı istediğin sıraya koymak pek mümkün görünmüyor çünkü önünde 4 karakterli elemanlar var. mantık olarak önce onları koyması gerekir. (baştaki boşluk karakterlerini unutmayalım)
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

s.a.
abi şimdi o fikri sen verdin (yani devamını getireceksin :) ) ..
benim bir kolonum var..
1 den başlıyor..
string olmak zorunda çünkü bir ara kayıt eklenip a, b, c gibi değerler eklenebiliyor..
aşta boşluk şart değil..
baştaki boşluk standart olarak sayı girilen alanların integer gibi sıralanması için iyi.
dediğim gibi
kayıtlar

1990
1991
1991A
1992

şeklinde ve 1991A sonradan eklenen kayıt.. database de o sıra ile kayıtlı değil. gridde ise yukarıdaki şekilde sıralamak nasıl mümkün olabilir.
..

aslangeri size ve diğer arkadasların ilgisine teşekkur ediyorum
İnsanca.... Pek insanca....
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Eğer en sağdaki karakter sayı değilse 11 karakter sayı ise 10 karakter olarak değerlendirip baştaki boşlukları ona göre doldurursun olur biter. Alanın maksimum karakter sayısına göre bunu ayarlarsın. Yani 10'a 9 da olabilir.

İyi çalışmalar.[/code]
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
eğer alana girilecek veriler için belirli kurallar varsa o kurallara göre @hakan can ın dediği şekilde sıralama yapılabilir. boşlukları değerin hem sağına hem soluna ekleyeceğiz.
atıyorum alanımız varchar10 ve bu alana sizin verdiğiniz örnekteki gibi kayıtlar giriliyor. ilk 5 karakteri sayı son 5 karakteri rakam olarak değerlendirmeye alalım.
1990 bunun önüne 1 boşluk sonuna 5 boşluk koyacağız.
1990A bunun önüne 1 boşluk sonuna 4 boşluk koyacağız.
böylelikle sıralamayı istediğiniz şekilde yapacağı kanaatindeyim.
deneme imkanım olmadı.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla