default source problemi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

default source problemi

Mesaj gönderen gercek_16 »

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.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

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_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

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

Kod: Tümünü seç

not in edit mode
hatasını veriyor.
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;
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.
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

öncelikle alan tipi stringse

Kod: Tümünü seç

DataModule1.IBDataSet1ALAN.AsString:=0; 
şeklinde atama yapamazsın.
Sabit string tipteki veriler mutlaka iki tırnak arasına yazılırlar.

Kod: Tümünü seç

DataModule1.IBDataSet1ALAN.AsString:='0';
eğer varsayılan değerin kullanıcıya anında yansımasını istiyorsan Datasetin OnNewRecord Olayına

Kod: Tümünü seç

DataModule1.IBDataSet1ALAN.AsString:='0'; yaz. 
aksi taktirde Beforepst olayına

Kod: Tümünü seç

if (DataModule1.IBDataSet1ALAN.isNull ) ıthen
DataModule1.IBDataSet1ALAN.AsString:='0';
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

pardon yanlış yazmışım alan fieldim integer yazdığım kod şöyle

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
uyarısı almaya devam ediyorum :(
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

alanın null olduğuna emin misiniz. daha önce geçersiz bir değer atanmış gibi
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

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.
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

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
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

Editlerden sayısal değer girilecek. fieldlerim integer olarak tanımlı.
datasetin beforepost olayına yazdığım kod şu

Kod: Tümünü seç

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

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;
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. :roll:
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

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.

Kod: Tümünü seç

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
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Merhaba...
gercek_16 yazdı:
kullanıcı integer alanları boş bıraktığında hata vermesin.
arkadaşlar ya siz bu işi nasıl çözüyorsunuz. :roll:
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...
viewtopic.php?t=5397&postdays=0&postorder=asc&start=0

iyi günler...
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

yazdığım kodu tam olarak veriyorum, belki eksik bir şey yazıyorumdur

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;
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..
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

Merhaba,
editteki rakamı
DataModule1.IBDataSet1ALAN.AsInteger alanına aktardığınız kodu da verebilir misiniz?
Bu işten hemen sizi soğutmamamız gerekir. :lol:
______________
ofenX
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

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;
Yukarıdaki kod da is not a valid integer value bu hatayı vereceğini sanmam..Ancak şöyle kullanıyorsundur...

Kod: Tümünü seç

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_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

evet uğur arkadaşın dediği gibi

Kod: Tümünü seç

 DataModule1.IBDataSet1ALAN.AsInteger:=strtoint(edit3.text);
sorun zaten boş bırakılınca hata vermesi
hatayı boşluğu integere çevirirkenmi yapıyor?
Cevapla