numeric alanların update sorgusuyla güncellenmesi?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

numeric alanların update sorgusuyla güncellenmesi?

Mesaj gönderen a_o »

mrb arkadaşlar

veritabanımda numeric alanlarım var. editlerden girdiğim değerle daha önceden veritababanımda kayıtlı olan numeric alanları güncelliyeceğim. fakat bana hata veriyor. yani editleri direk atınca olmuyor. strtofloat(edit1.text) die çevirincede hata veriyor. bunu nasıl yapmam gerekiyor? yardımcı olabilirmisiniz.
kodum aşağıdaki gibi

Kod: Tümünü seç

with veri.sorgutaksit do
    begin
       close;
       sql.clear;
       sql.text:='update STKTAKSIT set AY1='+suiedit2.text+' where ID='+QuotedStr(mmenu.kod.Text);
       execsql;
    end;

delphi7, sql server , ADO kullanıyorum.
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

Kod: Tümünü seç

QuotedStr(mmenu.kod.Text);
hocam buradaki

Kod: Tümünü seç

QuotedStr
kaldır düzelir.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam orda quotedstr den değilde AY1 alanımı güncelliyorum ya. orda hata veriyor. tek sorun AY1 alanınım numeric olması ve editteki değerle güncellemek istemem.
QuotedStr alanımla ilgili bi sorun yok. zaten ID alanı veritabanında string olarak özel bi kodlama şeklinde tutuluyor. string+nümeric karışımı. o yüzden orda bi sorun yok.
ii çalışmalar
kolay gelsin
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

Kod: Tümünü seç


procedure ......
var
  Y_DecimalSeparator: Char;
begin
Y_DecimalSeparator := DecimalSeparator;
  DecimalSeparator := '.';

with veri.sorgutaksit do 
begin 
  close; 
  sql.clear; 
  sql.text:='update STKTAKSIT set AY1='+suiedit2.text+' where        ID='+QuotedStr(mmenu.kod.Text); 
       execsql; 
    end; 
DecimalSeparator := Y_DecimalSeparator;
end;


denemedim ama çalışacağını düşünüyorum.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

ylmz hocam program ilk açılırken bölgesel ayarları yaptırıyorum zaten. mesela burda suiedit2.text'in içindeki sayıyı özellikle virgüllü girmiyorum denemek için. ama o halde bile olmuyo. bana göre

Kod: Tümünü seç

AY1='+suiedit2.text 
bu kısımda var bi hata. ama düzeltemedim işte:(
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

hocam tipi ne bilmiyorum ama çevirme yaptıracaksın.
integer se

Kod: Tümünü seç

strtoint(suiedit2.text9)
düzelir.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam yukardıda da belirttiğim gibi alanlarım numeric. o alanlar double olarak işliyor. eğer ben dediğiniz gibi strtofloat(edit1.text) die yaparsam o zaman tip uyuşmazlığı dior. string to double hatası veriyor. ve exeyi hiç çalıştırmıyor:(
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

hocam ben float demiyorum zaten.strtoint diyorum.numerik.
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

hocam execsql den önce savetofile ile bi dosyaya yazdır bakalım sql ini
o zaman daha rahat anlarsın hatanın nerede olduğunu.Birde hatanın kendisini yazmamıssın.Kolay gelsin.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam akşam akşam kafam iice durdu :oops: . dediğiniz gibi yaptığımda
Incompatible 'integer ' and 'string'
hatası veriyor :(
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

sen en temiz şöyle yaparsın.

Kod: Tümünü seç

var s:string;
begin
s:=Format('update STKTAKSIT set AY1=%d where ID=%s',[strtoint(suiedit2.text),QuotedStr(mmenu.kod.Text)]);

with veri.sorgutaksit do 
    begin 
       close; 
       sql.clear; 
       sql.text:=s;
       execsql; 
    end;

end;

hocam bu kod senin field isimlerinde bir sorun yoksa ve AY1 de interger se çalışır.
kolay gelsin.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam tşk ederim. dediğiniz gibi yazınca çalıştı kodum. fakat bi sorum daha olcak. az önce patron geldi de. taksitlendirmeyi hesaplattığım kısımda da virgüllü olarak gelsin editler dedi. bende öyle olunca orayada husoedit koydum. fakat onun değeri float sanırım. float şeklinde sölemek için %d yi ne olarak değiştiriyoruz?

Kod: Tümünü seç

s:=Format('update STKTAKSIT set AY1=%d where ID=%s',[(HusoEdit1.Value(HusoEdit1.Text)),QuotedStr(edit1.Text)]);

with veri.sorgutaksit do
    begin
       close;
       sql.clear;
       sql.text:=s;
       execsql;
    end;
%f diyince alanları yuvarlayarak yazdı. mesela 54.54 dediysem veritabanına 55 olarak kaydetti. %f yada %d yerine ne yazarsam virgüllü olarak görünür?
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

Kod: Tümünü seç

%18.2f
tabi DecimalSeparator ü de ayarlaman gerekir.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

hocam sorunumu hallettim. :lol: tşk ederim. veritabanımdaki alanları float yaptım. daha sonra da sizin yazdığınız kodla işimi hallettim

Kod: Tümünü seç

var s:string;
begin
s:=Format('update dene set numara=%18.2f where id=%d',[(HusoEdit1.Value(HusoEdit1.Text)),strtoint(edit2.text)]);
with sorgu do
    begin
       close;
       sql.clear;
       sql.text:=s;
       execsql;
    end;
end;
yardımcı olmaya çalışan herkese çok tşk ederim
kolay gelsin
ii çalışmalar
Cevapla