Alandaki Boşluklar.

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Alandaki Boşluklar.

Mesaj gönderen pasa_yasar »

İyi Çalışmalar;

SQL Server da hazırladığım veritabanında alan tip ve uzunluğu "nchar (10) ";
örneğin kişi bu alana evet girmiş bunu sorguladığım zaman

Kod: Tümünü seç

if adotablealan1.asstring='evet      ' then 
diye kodlamam gerekiyor ki işlem yapsın.

Kod: Tümünü seç

if adotablealan1.asstring='evet' then
şeklinde yaptığımda işe yaramıyor. kalan boşluklarıda karakter olarak görüyor. veritabnında alan tipini nasıl tanımlamalıyım ki girdiği kadarını alsın. gereksiz yere hem boş karakter olmaz hemde kodlamada sıkıntı yaşamam. kullanıcı fazla karakter girirsede arttsın.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

if trim(adotablealan1.asstring) = 'evet' then ...;
Veri tabanına atarken trim lersen daha sonra böyle bir kontrole gerek kalmaz.. MS-SQL içinde ise RTRIM(str) (sağdaki boşlukları keser) LTRIM(str) (soldaki boşlukları keser) :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Mesaj gönderen pasa_yasar »

ms sql de trim komutunu nasıl işleteceğim. ms sql 2005 express kullanıyorum. help filan yok içinde :oops:
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Tanımlaman yanlış. Her halukarda VT'ye boşluklu atacaktır. CHAR yerine VARCHAR tanımlamalısın (ister N'li ister N'siz).

İyi çalışmalar.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

SELECT, TRIGGER veya SP lerde aşağıdakine benze şekilde kullanabilirsin.

Kod: Tümünü seç

select RTRIM(adi)||' '||LTRIM(soyadi), LTRIM(posta_kodu) from tablo
where LTRIM(RTRIM(adi)) = 'ALİ' 
gibi :wink:
LTRIM(RTRIM(adi)) ile her iki taraftaki boşluklar kesilir/atılır.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Mesaj gönderen pasa_yasar »

hepsi zaten nvarchar. tanımlama nvarchar olduğunda alan uzunluğunu 30 tanımlasam kişi 40 karakter girerse otomatikmen 10 karakter artarmı?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

VARCHAR() veya NVARCHAR() veri tipinde maksimum uzunluk verilir, veri daha az ise veri tabanında daha az yer kaplar :idea:
Burada N: National ya da unicode utf8 kullanım içindir ve normal Türkçe/Latince dışında bir dil (Rusça, Çince, Arapça vb) kullanılmayacaksa boşuna yer ısrafından başka bir şey değildir. MS-SQL uzmanlarının daha iyi bildiği gibi her harf için 2 bayt yer ayırmaktadır.. :roll:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

pasa_yasar yazdı:hepsi zaten nvarchar. tanımlama nvarchar olduğunda alan uzunluğunu 30 tanımlasam kişi 40 karakter girerse otomatikmen 10 karakter artarmı?
CHAR ile VARCHAR arasında kullanım ve işlevsellik açısından çok fark var.

Başta CHAR kullandığını söyledin ki sorun ondan kaynaklanır, çözümü de belli. Sonradan ben zaten VARCHAR kullanıyorum demişsin (ister N'li ister N'siz). Burada sorun galiba başka gibi.

Eğer başta belirttiğin sorun hala devam ediyorsa ve gerçekten de VT'de VARCHAR tanımlı ise sorun Delphi tarafındadır (tabi trigger falan yazıp her kayıtta sonuna boşluk doldurmuyorsan ki ihtimal dışı gibi).

Tahminim Delphi tarafında FieldsEditor'de o field için "FixedChar = True" tanımlı kalmış olabilir. Veyahut özel kodla sonuna boşluk ilave ediliyor olabilir.

Yoksa VT'de VARCHAR tanımlı ise sonuna boşluk atmaz. Atarsa da onun adı CHAR olmak zorunda (tabi ister N'li ister N'siz).

İyi çalışmalar.
Cevapla