| gercek_16 | 12.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. | |
| selman | 12.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_16 | 13.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. | |
| FAOsoft | 13.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_16 | 13.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 :( | |
| FAOsoft | 13.09.2005 - 13:27:05 |
| alanın null olduğuna emin misiniz. daha önce geçersiz bir değer atanmış gibi | |
| gercek_16 | 13.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. | |
| Asri | 13.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_16 | 13.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 arkadaşlar ya siz bu işi nasıl çözüyorsunuz. | |
| Asri | 13.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ğur1982 | 13.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. 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_16 | 13.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. ş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.. | |
| Asri | 13.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. ______________ ofenX | |
| Uğur1982 | 13.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_16 | 13.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ğur1982 | 13.09.2005 - 17:41:09 |
| Evet, string , boş ya da float bir değer varsa yazdığın kod da hata verir... | |
| Asri | 13.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_16 | 13.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. | |
| oguzozturk74 | 14.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 . | |