Slm
Tablodaki Field Type alanında tam sayı (tamsayılar 1,2,3,4,5,6,7,8,9)değerleri tutmak istiyorum ve tutacağım alana yanlızca 1 karakter girilmesini istediğim için size değerini 1 yapıyorum ama birden fazla değer girişi yapılıyor veritabanı tüm sayısal değer alanlarında denedim hepsi aynı durumda bunun için ne yapamam lazım
Firebird tabloda Field Type Size alan
sanırım olabilecek en küçük int değeri için SMALLINT tanımlamalısın..
ama oda 1 basamaklı sayıdan fazlasını kabul eder yanılmıyorsam 65535 e kadar..
senin yapman gereken bence ya CHAR alan tanımlayıp kullanırken int e çevireceksin ,
yada
SMALLINT kullanıp, giriş sırasında tek basamaklı bir sayı olması için kontrol yapacaksın..
ama oda 1 basamaklı sayıdan fazlasını kabul eder yanılmıyorsam 65535 e kadar..
senin yapman gereken bence ya CHAR alan tanımlayıp kullanırken int e çevireceksin ,
yada
SMALLINT kullanıp, giriş sırasında tek basamaklı bir sayı olması için kontrol yapacaksın..

Kod: Tümünü seç
IBDataSet_DETAY.FieldByName('Toplam').Asinteger:=strtoint(IBDataSet_DETAY.FieldByName('1').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('2').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('3').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('4').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('5').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('6').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('7').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('8').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('9').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('10').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('11').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('12').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('13').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('14').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('15').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('16').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('17').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('18').Asstring)
+Strtoint(IBDataSet_DETAY.FieldByName('19').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('20').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('21').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('22').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('23').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('24').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('25').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('26').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('27').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('28').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('29').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('30').Asstring)+Strtoint(IBDataSet_DETAY.FieldByName('31').Asstring);
Birincisi delphi tarafta verdiğin yazım şeklinde IBDataSet_DETAY.FieldByName('1').AsInteger şeklinde yazarak StrToInt() den kurtarıp sadeleştirebilirsin.
İkincisi; SELECT içerisinde yapabilirsin. Sayısal alanlar + (artı) ile karakter/string alanlar || ile toplanır. String alanlardaki toplamadan çok ekleme/birleştirme şeklinde oluyor 
İkincisi; SELECT içerisinde yapabilirsin.
Kod: Tümünü seç
select alan1+alan2+..+alan31 as Toplam from tablo...

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
hocam selct ile şu şekilde denedim ama alanlar yerine sorgudaki değerleri topluyor örngin ilk üç alanda 9+9+9=27 olması gerekirken
1+2+3 den 6 yapıyor alan adlarım 1-2-3-3-5 şeklinde gidiyor
ikinci şekildeki toplama işlemimde
yaptığımda alan değeri boş ise hata alıyorum (is not a valid integer value) şeklinde burada ki 31 değer alanları bir ayda olabilecek gün sayıları.Bütün alanları if sorgusu ile kontrol ettirip boş ise sıfır yaz yaptırarak işi hallede biliriz belki ama bu kontrol çok uzun olacak.Tek tek alanları ikinci yöntemdeki gibi toplama durumunda boş olan veriyi toplama işelemine katmadan yani is not a valid integer value hatasına düşmeden nasıl toplatabiliriz.
Kod: Tümünü seç
IBQuery1.Close;
IBQuery1.sql.Clear;
IBQuery1.SQL.Add('select 1+2+3 as TOPLAM from TBL_EKDERS ');
IBQuery1.Open;
IBDataSet_DETAY.edit;
IBDataSet_DETAY.FieldByName('TOPLAM').Value:=FloatToStr(IBQuery1.FieldByName('TOPLAM').AsFloat);
IBDataSet_DETAY.post;

ikinci şekildeki toplama işlemimde
Kod: Tümünü seç
IBDataSet_DETAY.FieldByName('Toplam').Asinteger:=IBDataSet_DETAY.FieldByName('1').Asinteger+IBDataSet_DETAY.FieldByName('2').Asinteger................IBDataSet_DETAY.FieldByName('Toplam').Asinteger:=IBDataSet_DETAY.FieldByName('30').Asinteger+IBDataSet_DETAY.FieldByName('31').Asinteger
viewtopic.php?t=19680

kolay gelsin
Edit :
Ayrıca
Kod: Tümünü seç
stringislem(IBDataSet_DETAY.FieldByName('1').AsString+'+'+IBDataSet_DETAY.FieldByName('2').AsString+'+'.....)

kolay gelsin

Edit :
Ayrıca
güzel bir yaklaşım. Bunu da göz önünde tutmanda fayda var.rsimsek yazdı:Tek basamak girililebilecek mask kullanabilirsin ya da veritabanına alanın tanımında kontrol (check) koyabilirsin.. şu aralıkta olsun diye