default source problemi
default source problemi
firebird 1,5 ibxpert kullanıyorum.
ibxpertten default sourcunu ayarladığım değerler delphiden çalışmıyor,
ve integer alanlara değer girmediğimde hata veriyor.
firebirdde yeniyim biraz açıklayıcı cevap yazarsanız yada küçük bir örnek verirseniz çok sevinirim. teşekkürler.
ibxpertten default sourcunu ayarladığım değerler delphiden çalışmıyor,
ve integer alanlara değer girmediğimde hata veriyor.
firebirdde yeniyim biraz açıklayıcı cevap yazarsanız yada küçük bir örnek verirseniz çok sevinirim. teşekkürler.
bu soruyu araştırıp öyle sordum.
şöyle açıp sorayım soruyu.
ibexpertten fieldleri boş bırakıldığında var sayılan değer ataması için datasource yi kullanıyoruz. Bu ibexpert içerisinden değer girdiğimde çalışıyor boş bıraktığım alanlara varsayılanları atıyor fakat
delphiden kullanıcıya editlerle giriş yaptırdığımda integer girilmesi gereken alanlar eğer boş bırakılmışsa post edildiğinde
hatasını veriyor.
benim aklıma şöyle bir çözüm geliyor, kaydı post ettirmeden önce ile kontrol ettirmek.
firebirde yeni başladım ve bu işi en sağlıklı yoldan yapmak istiyorum.
bir iki yerde triggerle yapılabileceği yazıyordu ama yeterince açıklayıcı değildi.
şöyle açıp sorayım soruyu.
ibexpertten fieldleri boş bırakıldığında var sayılan değer ataması için datasource yi kullanıyoruz. Bu ibexpert içerisinden değer girdiğimde çalışıyor boş bıraktığım alanlara varsayılanları atıyor fakat
delphiden kullanıcıya editlerle giriş yaptırdığımda integer girilmesi gereken alanlar eğer boş bırakılmışsa post edildiğinde
Kod: Tümünü seç
not in edit mode
benim aklıma şöyle bir çözüm geliyor, kaydı post ettirmeden önce
Kod: Tümünü seç
if edit1.text='' then DataModule1.IBDataSet1ALAN.AsString:=0;
firebirde yeni başladım ve bu işi en sağlıklı yoldan yapmak istiyorum.
bir iki yerde triggerle yapılabileceği yazıyordu ama yeterince açıklayıcı değildi.
öncelikle alan tipi stringse
şeklinde atama yapamazsın.
Sabit string tipteki veriler mutlaka iki tırnak arasına yazılırlar.
eğer varsayılan değerin kullanıcıya anında yansımasını istiyorsan Datasetin OnNewRecord Olayına
aksi taktirde Beforepst olayına
Kod: Tümünü seç
DataModule1.IBDataSet1ALAN.AsString:=0;
Sabit string tipteki veriler mutlaka iki tırnak arasına yazılırlar.
Kod: Tümünü seç
DataModule1.IBDataSet1ALAN.AsString:='0';
Kod: Tümünü seç
DataModule1.IBDataSet1ALAN.AsString:='0'; yaz.
Kod: Tümünü seç
if (DataModule1.IBDataSet1ALAN.isNull ) ıthen
DataModule1.IBDataSet1ALAN.AsString:='0';
pardon yanlış yazmışım alan fieldim integer yazdığım kod şöyle
bu kodu datasetin beforpost olayına yazdım.
fakat alan boş bırakıldığında
uyarısı almaya devam ediyorum 
Kod: Tümünü seç
if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;
bu kodu datasetin beforpost olayına yazdım.
fakat alan boş bırakıldığında
Kod: Tümünü seç
is not a valid integer value

Editlerden sayısal değer girilecek. fieldlerim integer olarak tanımlı.
datasetin beforepost olayına yazdığım kod şu
bu kod
hatasını veriyor.
kaydet butonuna şu satırı ekledim buda aynı hatayı engellemiyor.
daha önce paradoxla çalışmıştım hiç böyle bir durumla karşılaşmadım.
bunun mutlaka bir yöntemi olmalı
ben firebirdde yeni olduğum için bir türlü yapamadım.
belkide yapmak istediğim şeyi anlamadınız.
tek derdim şu
kullanıcı integer alanları boş bıraktığında hata vermesin.
yoksa bunu editlere varsayılan olarak 0 atayıp keypressle gerekli uyarıları vererek kullanıcıya mutlaka bir giriş yaptırarakmı çözmeliyim
arkadaşlar ya siz bu işi nasıl çözüyorsunuz.
datasetin beforepost olayına yazdığım kod şu
Kod: Tümünü seç
if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;
Kod: Tümünü seç
is not a valid integer value
hatasını veriyor.
kaydet butonuna şu satırı ekledim buda aynı hatayı engellemiyor.
Kod: Tümünü seç
if form4.edit3.text='' then DataModule1.IBDataSet1alan.AsInteger:=0;
DataModule1.IBDataSet1.Post;
DataModule1.IBDataSet1.transaction.commitretaining;
bunun mutlaka bir yöntemi olmalı
ben firebirdde yeni olduğum için bir türlü yapamadım.
belkide yapmak istediğim şeyi anlamadınız.
tek derdim şu
kullanıcı integer alanları boş bıraktığında hata vermesin.
yoksa bunu editlere varsayılan olarak 0 atayıp keypressle gerekli uyarıları vererek kullanıcıya mutlaka bir giriş yaptırarakmı çözmeliyim

arkadaşlar ya siz bu işi nasıl çözüyorsunuz.

Merhaba,
bence sorun orada değil. Çünkü aynısını yaptım. Hiç hata vermeden kaydediyor. Siz şöyle bir yol deneyebilirsiniz. Befor post olayına aşağıdaki satırı ekleyin. Sizin satırlardan sonra.
Daha sonra numaranın kaydedildiği edite bir şey girmeden. Kayıt yaptırın.
eğer size pencerede 10 değerini veriyorsa problem burada değil. Başka bir değişkende. Programı adım adım çalıştırıp değişkenleri watch penceresine aktararak nerede hatalı olduğuna da bakabilirsiniz.
____________________
ofenX
bence sorun orada değil. Çünkü aynısını yaptım. Hiç hata vermeden kaydediyor. Siz şöyle bir yol deneyebilirsiniz. Befor post olayına aşağıdaki satırı ekleyin. Sizin satırlardan sonra.
Kod: Tümünü seç
showmessage(inttostr(DataModule1.IBDataSet1ALAN.AsInteger+2*5));
eğer size pencerede 10 değerini veriyorsa problem burada değil. Başka bir değişkende. Programı adım adım çalıştırıp değişkenleri watch penceresine aktararak nerede hatalı olduğuna da bakabilirsiniz.
____________________
ofenX
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Merhaba...
Bunun için Hüseyin hocanın yazdığı bir komponent var...HusoEdit diye aratabilirsin..Parasal ve text alanlarda epey bir kullanışlı...Fazladan kontrollere gerek duymazsın...
viewtopic.php?t=5397&postdays=0&postorder=asc&start=0
iyi günler...
Bunun kontrolü yerine göre uzun olabilir......Vt' de yapman gereken null alan hiç bırakmayıp default değer ataman..gercek_16 yazdı:
kullanıcı integer alanları boş bıraktığında hata vermesin.
arkadaşlar ya siz bu işi nasıl çözüyorsunuz.
Bunun için Hüseyin hocanın yazdığı bir komponent var...HusoEdit diye aratabilirsin..Parasal ve text alanlarda epey bir kullanışlı...Fazladan kontrollere gerek duymazsın...
viewtopic.php?t=5397&postdays=0&postorder=asc&start=0
iyi günler...
yazdığım kodu tam olarak veriyorum, belki eksik bir şey yazıyorumdur
yada ibdatesetin true etmem gereken bir ayarı vardır bilmiyorum ama showmessage doğru olarak veriyor. boş bıraktığında yine hata veriyor.
husoedit comp.
evet bunu parasal giriş için kullandım hemde aynı formda ama sayısal veri için kullanmak aklıma gelmemişti.
şimdi denedim problem yok
ama aklım yine yaşadığım problemde kaldı
neden böyle yapıyor?
acaba önemli bir yerde bir şeyi yanlışmı yaptım?
sonradan başım ağırır mı?
fdslkşidsfdedjkşjklşjkş
dfkkjllkişk şk
şlşş <-- kafamın içi böyle
zaman ayıran tüm arkadaşlara teşekkürler..
Kod: Tümünü seç
procedure TDataModule1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;
if (DataModule1.IBDataSet1KAT.isNull ) then
DataModule1.IBDataSet1KAT.AsInteger:=0;
showmessage(inttostr(DataModule1.IBDataSet1ALAN.AsInteger+2*5));
end;
husoedit comp.

şimdi denedim problem yok

ama aklım yine yaşadığım problemde kaldı
neden böyle yapıyor?
acaba önemli bir yerde bir şeyi yanlışmı yaptım?
sonradan başım ağırır mı?
fdslkşidsfdedjkşjklşjkş
dfkkjllkişk şk
şlşş <-- kafamın içi böyle

zaman ayıran tüm arkadaşlara teşekkürler..
Kod: Tümünü seç
procedure TDataModule1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;
if (DataModule1.IBDataSet1KAT.isNull ) then
DataModule1.IBDataSet1KAT.AsInteger:=0;
showmessage(inttostr(DataModule1.IBDataSet1ALAN.AsInteger+2*5));
end;
Kod: Tümünü seç
DataModule1.IBDataSet1alan.AsInteger:=StrToInt(Edit4.text);
Yada BreakPoint koyarak hangi satırda hata verdiğini öğrenebilirsin...
evet uğur arkadaşın dediği gibi
sorun zaten boş bırakılınca hata vermesi
hatayı boşluğu integere çevirirkenmi yapıyor?
Kod: Tümünü seç
DataModule1.IBDataSet1ALAN.AsInteger:=strtoint(edit3.text);
hatayı boşluğu integere çevirirkenmi yapıyor?