merhaba arkadaşlar
bir konuda yardımlarınızı rica ediyorum.
.
.
.
.
ADOQuery1.sql.add('select * From person');
.
.
.
bu sorgu sonucunda yaklaşık olarak 45 tane alan sorgulanıyor. kimi alanda deger var int veya varchar. kimilerinde ise alanlarda veri yok yani NULL dönüyor. bu sorguda gelen kayıtlardan birtanesinin tüm değerlerini başka bir formdaki ilgili editlere yazmak istiyorum ama veri olan alanlarda sorun yokken NULL alanlarda sorun yaşıyorum. bunuda
if ADOQuery1.fieldvalues['evtel']='NULL' then
begin
Form1.DBEdit1.text='';
end
else
if ADOQuery1.fieldvalues['evtel']<>'NULL' then
begin
Form1.DBEdit1.text=ADOQuery1.fieldvalues['evtel'];
end;
koduyla çözmeye çalışıyorum ama --Could not convert variant of type (Null) into type (Olestr)-- hatası alıyorum.
istediğim şey seçtiğim kayıttaki null olan alanların yerine form üzerindeki ilgili DBEdit içine '' (boşluk yazabilmek)
yardımlarınız için şimdiden teşekkürler.
ADOQuery1 sorgusundan herhangi bir alanın null olma durumu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 32
- Kayıt: 04 May 2014 02:23
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: ADOQuery1 sorgusundan herhangi bir alanın null olma duru
Merhaba,
NULL, 4 karakterden oluşan bir text değildir. NULL, değeri olmayan anlamındadır. Bu yüzden tırnak içinde kullanılmaz.
if VarIsNull(ADOQuery1.fieldvalues['evtel']) then
veya
if ADOQuery1.fieldvalues['evtel'] = Null then
NULL, 4 karakterden oluşan bir text değildir. NULL, değeri olmayan anlamındadır. Bu yüzden tırnak içinde kullanılmaz.
if VarIsNull(ADOQuery1.fieldvalues['evtel']) then
veya
if ADOQuery1.fieldvalues['evtel'] = Null then
-
- Üye
- Mesajlar: 32
- Kayıt: 04 May 2014 02:23
Re: ADOQuery1 sorgusundan herhangi bir alanın null olma duru
teşekkürler xxxjedixxx bunları denediğimi düşünüyordum ama atladığım bişey varmış demekki.
Re: ADOQuery1 sorgusundan herhangi bir alanın null olma duru
Veri türlerinden anladığım kadarı ile veritabanınız SQL Server. Bu durumda; ISNULL kullanabilirsiniz SELECT içinde çekerken. Örneğin;
gibi.
Ayrıca TField sınıfının IsNull değerini de kullanabilirsiniz. Örneğin;
gibi.
Bunun yanında; atama yaparken neden DBEdit1'i kullanıyorsunuz onu da anlamadım. Bağlı bulunduğu DataSet'in ilgili field'ına atama yapmanız daha şık olacaktır.
Kod: Tümünü seç
SELECT
Adi,
Soyadi,
ISNULL(Yasi, 0) AS Yasi,
ISNULL(Telefonu, '<BOŞ>') AS Telefonu
FROM Person
Ayrıca TField sınıfının IsNull değerini de kullanabilirsiniz. Örneğin;
Kod: Tümünü seç
if ADOQuery1.FieldByName('Yasi').IsNull then ;
Bunun yanında; atama yaparken neden DBEdit1'i kullanıyorsunuz onu da anlamadım. Bağlı bulunduğu DataSet'in ilgili field'ına atama yapmanız daha şık olacaktır.
-
- Üye
- Mesajlar: 32
- Kayıt: 04 May 2014 02:23
Re: ADOQuery1 sorgusundan herhangi bir alanın null olma duru
bilgiler için çok teşekkür ederim. thelvacı. son soruna gelince. bir H.B.Y.S. şirketinde arge ve eğitim destek bölümünde çalışırken. o zamanlar kodlama ile fazla haşır neşir değildim. bazı ufak tefek işlerimizi kolaylaştırıcı programcıklar yazıyordum. bu alışkanlık o zamandan kalma. ve asıl üstadımızın bir sözü olmuştur bana. programcılıkta nasıl alışırşan öyle gider diye. ve nitekim öylede gidiyor.
bu arada bu şekilde yazılmasının performans açısından herhangi bir etkisi olurmu acaba varsa bu bilginide paylaşırsan sevinirim dedimya alışkanlık hazırladığım programda bu şekilde kullandığım çok yer oluyoda. zararın neresinden dönersem kar olur.
bu arada bu şekilde yazılmasının performans açısından herhangi bir etkisi olurmu acaba varsa bu bilginide paylaşırsan sevinirim dedimya alışkanlık hazırladığım programda bu şekilde kullandığım çok yer oluyoda. zararın neresinden dönersem kar olur.
Re: ADOQuery1 sorgusundan herhangi bir alanın null olma duru
Rica ederim. Performans açısından tabii ki sıkıntı olur. En basit anlamı ile çevirim işlemleri devreye giriyor. Örneğin; TDBEdit'in bağlı olduğu field'ın türü integer olsun, ancak siz değer atamasını TDBEdit'in Text property'si vasıtası ile gerçekleştiriyorsunuz-ki bu da string-, bu durumda veri türü dönüşümü yapmış oluyorsunuz. En nihayetinde varılacak nokta TField'ın ilgili metodlarıdır. SetAsString gibi.
Ayrıca, TDBEdit'in Text property'si TControl'e kadar giden bir hiyerarşi takip eder. Aslında siz TDBEdit'in Text property'sine atama yaptığınızda; o anda bağlı bulunduğu ilgili field'ın değerini değiştirmiş olmazsınız; bu da uygulamalarınız içinde TField'ın değerini kontrol ettiğiniz noktalarda hatalarla karşılaşmanıza neden olur.!
Örneğin; basit bir şekilde AdiSoyadi alanına bağlı bir TDBEdit üzerinde DBEdit.Text := 'Delphi'; yazıp ardından ilgili field'ın değerini Tablo.FieldByName('AdiSoyadi').Value ile kontrol ettiğinizde yaptığınız değişikliğin henüz etkileşime girmediğini görürsünüz. Oysaki atamanızı Tablo.FieldByName('AdiSoyadi').Value := 'Delphi'; biçiminde yapmış olsa idiniz, değişikliğin hemen gerçeklendiğini TField'ın ilgili metodlarına(Örn.SetAsString) dallanıldığına şahit olabilirdiniz.
Umarım yeterince izah edebilmişimdir.
Ayrıca, TDBEdit'in Text property'si TControl'e kadar giden bir hiyerarşi takip eder. Aslında siz TDBEdit'in Text property'sine atama yaptığınızda; o anda bağlı bulunduğu ilgili field'ın değerini değiştirmiş olmazsınız; bu da uygulamalarınız içinde TField'ın değerini kontrol ettiğiniz noktalarda hatalarla karşılaşmanıza neden olur.!
Örneğin; basit bir şekilde AdiSoyadi alanına bağlı bir TDBEdit üzerinde DBEdit.Text := 'Delphi'; yazıp ardından ilgili field'ın değerini Tablo.FieldByName('AdiSoyadi').Value ile kontrol ettiğinizde yaptığınız değişikliğin henüz etkileşime girmediğini görürsünüz. Oysaki atamanızı Tablo.FieldByName('AdiSoyadi').Value := 'Delphi'; biçiminde yapmış olsa idiniz, değişikliğin hemen gerçeklendiğini TField'ın ilgili metodlarına(Örn.SetAsString) dallanıldığına şahit olabilirdiniz.
Umarım yeterince izah edebilmişimdir.