default source problemi
gercek_1612.09.2005 - 20:13:13
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.
 
selman12.09.2005 - 23:26:58
selam ne yaptığın ne ettiğini bilmiyoruzki.Artı bir sürü anlatım var firebirdle ile ilgili sitede.Önce bir araştırın sonra takıldığınız yerlerde sorarsınız olmazmı .Kolay gelsin.
 
gercek_1613.09.2005 - 01:48:53
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
not in edit mode

hatasını veriyor.
benim aklıma şöyle bir çözüm geliyor, kaydı post ettirmeden önce
if edit1.text='' then DataModule1.IBDataSet1ALAN.AsString:=0;
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.
 
FAOsoft13.09.2005 - 08:52:25
öncelikle alan tipi stringse
DataModule1.IBDataSet1ALAN.AsString:=0;
şeklinde atama yapamazsın.
Sabit string tipteki veriler mutlaka iki tırnak arasına yazılırlar.
DataModule1.IBDataSet1ALAN.AsString:='0';

eğer varsayılan değerin kullanıcıya anında yansımasını istiyorsan Datasetin OnNewRecord Olayına
DataModule1.IBDataSet1ALAN.AsString:='0'; yaz.
aksi taktirde Beforepst olayına
if (DataModule1.IBDataSet1ALAN.isNull ) ıthen
DataModule1.IBDataSet1ALAN.AsString:='0';
 
gercek_1613.09.2005 - 12:54:36
pardon yanlış yazmışım alan fieldim integer yazdığım kod şöyle


if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;


bu kodu datasetin beforpost olayına yazdım.
fakat alan boş bırakıldığında
is not a valid integer value


uyarısı almaya devam ediyorum :(
 
FAOsoft13.09.2005 - 13:27:05
alanın null olduğuna emin misiniz. daha önce geçersiz bir değer atanmış gibi
 
gercek_1613.09.2005 - 13:47:34
Kullanıcıya girişleri editlerle yaptırıyorum.
editi boş bırakıp kayıdet yada düzelt dediğimde bu hatayı veriyor.
editlere rakam dışında bir şey girilmesini engelledim zaten.
 
Asri13.09.2005 - 14:33:38
Merhaba,
Null değilse nasıl atama yapıyorsunuz. Editteki değer string sizin aktardığınız alan integer uygun çevrimi yapıyor musunuz?

______________________
ofenX
 
gercek_1613.09.2005 - 15:04:12
Editlerden sayısal değer girilecek. fieldlerim integer olarak tanımlı.
datasetin beforepost olayına yazdığım kod şu


if (DataModule1.IBDataSet1ALAN.isNull ) then
DataModule1.IBDataSet1ALAN.AsInteger:=0;


bu kod

is not a valid integer value

hatasını veriyor.

kaydet butonuna şu satırı ekledim buda aynı hatayı engellemiyor.
if form4.edit3.text='' then DataModule1.IBDataSet1alan.AsInteger:=0;

DataModule1.IBDataSet1.Post;
DataModule1.IBDataSet1.transaction.commitretaining;


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 Question

arkadaşlar ya siz bu işi nasıl çözüyorsunuz. Rolling Eyes
 
Asri13.09.2005 - 15:54:03
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.

showmessage(inttostr(DataModule1.IBDataSet1ALAN.AsInteger+2*5));

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
 
Uğur198213.09.2005 - 16:18:58
Merhaba...


kullanıcı integer alanları boş bıraktığında hata vermesin.
arkadaşlar ya siz bu işi nasıl çözüyorsunuz. Rolling Eyes


Bunun kontrolü yerine göre uzun olabilir......Vt' de yapman gereken null alan hiç bırakmayıp default değer ataman..
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...
http://www.delphiturkiye.com/forum/viewtopic.php?t=5397&postdays=0&postorder=asc&start=0

iyi günler...
 
gercek_1613.09.2005 - 16:55:05
yazdığım kodu tam olarak veriyorum, belki eksik bir şey yazıyorumdur
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;


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. Idea 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 :D

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..
 
Asri13.09.2005 - 17:08:13
Merhaba,
editteki rakamı
DataModule1.IBDataSet1ALAN.AsInteger alanına aktardığınız kodu da verebilir misiniz?
Bu işten hemen sizi soğutmamamız gerekir. Laughing
______________
ofenX
 
Uğur198213.09.2005 - 17:09:01
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;


Yukarıdaki kod da is not a valid integer value bu hatayı vereceğini sanmam..Ancak şöyle kullanıyorsundur...
DataModule1.IBDataSet1alan.AsInteger:=StrToInt(Edit4.text);

Eğer Edit4 boş yada string ise yukarıdaki hatayı verebilir..

Yada BreakPoint koyarak hangi satırda hata verdiğini öğrenebilirsin...
 
gercek_1613.09.2005 - 17:35:06
evet uğur arkadaşın dediği gibi

DataModule1.IBDataSet1ALAN.AsInteger:=strtoint(edit3.text);


sorun zaten boş bırakılınca hata vermesi
hatayı boşluğu integere çevirirkenmi yapıyor?
 
Uğur198213.09.2005 - 17:41:09
Evet, string , boş ya da float bir değer varsa yazdığın kod da hata verir...
 
Asri13.09.2005 - 18:36:34
Merhaba, aşağıdaki kodu yazabilir misiniz?



if edit3.Text='' then DataModule1.IBDataSet1ALAN.AsInteger:=0
else

begin

try

DataModule1.IBDataSet1ALAN.AsInteger:=strtoint(edit3.text);
except
on E: EConvertError do
begin
ShowMessage('Rakam Girişi Yapılmamış.' );
edit3.SetFocus;
end;

end;
end;





Yanlız bunu exe leştirdiğin dosyada denemen lazım. Veya Tools /Debugger Options/Language Exception sayfasından Stop on Delphi Exception ın onay düğmesini silmen lazım. Yoksa Delphi hata verip programı kırıyor.

Bu kod ile edit3 te hiç bir şey yok ise ilgili alana 0 değerini veriyor. Ama edit3 ün textinde veri var ama sayısal değilse sayısal veri girmeye edit3.setfocus ile zorluyor.

Kolay Gelsin.

__________________
ofenX
 
gercek_1613.09.2005 - 21:51:29
çok teşekkür ederim gönderdiğiniz kod için eminim çalışacaktır. şimdilik husoeditle problemi aştım. zaman bulduğumda bu koduda test edicem.
 
oguzozturk7414.09.2005 - 09:37:20
Kusura bakmayın verilen cevapları tam okuyamadım.

Default degerler icin : Delphi tarafında ilgili Dataset in OnAfterInsert inde veya OnNewRecord unda istenilen değeri atamak gerekiyor .
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com