sql update sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ercanskose
Üye
Mesajlar: 62
Kayıt: 18 Eyl 2011 02:31

sql update sorunu

Mesaj gönderen ercanskose »

Arkadaşlar mysql veri tabanı kullanıyorum ve fiyat isimli bir alanım var türüde decimal 8,2 ve kayıt yaptığımda sorun yok. girdiğim para değerini kuruşlu olarak kaydediyo. fakat kaydı düzenle dediğimde mesela 135,78 olarak para girişi yaptığımda 135 olarak kaydediyor. kuruş kısmını bir türlü aldıramadım.
update için aşağıdaki sql kodunu kullanıyorum. bir fikri olan veya böyle bir sorunla karşılaşan varmı.

Kod: Tümünü seç

guncelle.Close;
guncelle.SQL.Clear;
guncelle.SQL.Add('update siparis set tarih='+quotedstr(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit1.text))))+', personel='+quotedstr(trim(cxcombobox1.Text))+', ckod='+quotedstr(trim(cxtextedit2.Text))+', madi='+quotedstr(trim(cxbuttonedit1.Text))+'');
guncelle.SQL.Add(', mtc='+quotedstr(trim(cxtextedit3.Text))+', mvergino='+quotedstr(trim(cxtextedit10.Text))+', mvergi='+quotedstr(trim(cxtextedit4.Text))+', mturu='+quotedstr(trim(cxtextedit11.Text))+', mtelefon='+quotedstr(trim(cxtextedit5.Text))+'');
guncelle.SQL.Add(', mgsm='+quotedstr(trim(cxtextedit6.Text))+', mfax='+quotedstr(trim(cxtextedit7.Text))+', mmail='+quotedstr(trim(cxtextedit8.Text))+', madres='+quotedstr(trim(cxmemo1.Text))+'');
guncelle.SQL.Add(', irsaliye='+quotedstr(trim(edit1.Text))+', ino='+quotedstr(trim(cxtextedit9.Text))+', itarih='+quotedstr(trim((FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit3.text))))+', fatura='+quotedstr(trim(edit2.Text))+''));
guncelle.SQL.Add(', fno='+quotedstr(trim(cxtextedit16.Text))+', ftarih='+quotedstr(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit4.text))))+', testarih='+quotedstr(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit5.text))))+',  fiyat='+quotedstr(trim(formatfloat('#####0.00',strtofloat(cxcurrencyedit1.Text))))+'');
guncelle.SQL.Add(', odeme='+quotedstr(trim(edit3.Text))+', pbirim='+quotedstr(trim(cxcombobox5.Text))+', kdv='+quotedstr(trim(edit6.Text))+', tahsilat='+quotedstr(trim(edit4.Text))+', tahsilattarih='+quotedstr(trim((FormatDateTime('yyyy-mm-dd',cxDateEdit2.Date)))+', aciklama='+quotedstr(trim(cxmemo2.Text))+''));
guncelle.SQL.Add(', kguncelleyen='+quotedstr(trim(cxtextedit12.Text + ' --KAYITTA DEĞİŞİKLİK YAPTI' + '--'+datetostr(now)))+', sonuc='+quotedstr(trim(cxcombobox4.Text))+', saciklama='+quotedstr(trim(cxmemo3.Text))+', kacan='+quotedstr(trim(cxtextedit12.Text))+' where skod='+quotedstr(trim(cxtextedit1.Text))+'');
guncelle.ExecSQL;
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: sql update sorunu

Mesaj gönderen warder »

Sanıyorum parametre kullanarak bunun gibi sorunları aşabilirsiniz.
SQL.Add içerisinde + operatörü yerine :parametreAdı tanımlayıp
guncelle.ParamByName('parametreAdı').AsString := "Edit1.Text; gibi bir yol izleyebilirsiniz.
Kodunuz da bir yumak yazı olmaktan daha okunaklı bir görünüme kavuşabilir.
Hata takibi de kolaylaşır.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: sql update sorunu

Mesaj gönderen xxxjedixxx »

Merhaba,

... +', fiyat='+quotedstr(trim(formatfloat('#####0.00',strtofloat(cxcurrencyedit1.Text))))+ ...

Bu ifadende sayısal olan bir alana string atama yapıyorsun. Yani, fiyat = '10.75' gibi yazıyorsun. Aslında yazman gereken fiyat = 10.75

Normalde bu hatalı bir işlemdir fakat SQL Server bu ifadeye kızmıyor ve muhtemelen string to integer şeklinde bir dönüşüm yapıyor. Dolayısıyla senin küsüratlar yok oluyor.

Kodunu aşağıdaki gibi değiştirirsen sorun kalmayacaktır.

... fiyat=' + cxcurrencyedit1.Text + ...
veya
... fiyat=' + formatfloat('#####0.00',strtofloat(cxcurrencyedit1.Text)) + ...
ercanskose
Üye
Mesajlar: 62
Kayıt: 18 Eyl 2011 02:31

Re: sql update sorunu

Mesaj gönderen ercanskose »

xxxjedixxx dediğin gibi yaptım fakat fiyat alanından sonrakilerde hata verdi. quotedstr yazmazsam hata alıyorum. İşin garip tarafı

fiyat='+quotedstr(trim(cxcurrencyedit1.Text)) şeklinde yazdığımda diğer uygulamamda çok güzel çalışıyor. fakat bu uygulamada ne yaparsam yapayım olmuyor.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: sql update sorunu

Mesaj gönderen xxxjedixxx »

Hatayı veren Delphi mi, MySQL mi? Ben sorunun nokta/virgül işaretlerinden kaynaklandığını düşünüyorum. Ondalık için kullanılan işaret nokta mı virgül mü? Bu SQL'de farklı olabilir. Normalde Query'i parametre ile yapsanız nokta virgül dertleri ile hiç uğraşmazsınız. Ama mevcut kodunuzdan gidersek aşağıdaki önerilerim olacaktır.

Şöyle yapalım.

(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit5.text))))+', fiyat='+quotedstr(trim(formatfloat('#####0.00',strtofloat(cxcurrencyedit1.Text))))+''); // ayrıca bu sondaki + '' ne amaçla yazıldı?

Yukarıdaki satırdaki quotedstr(trim(formatfloat('#####0.00',strtofloat(cxcurrencyedit1.Text)))) kısmına sadece statik bir sayı yazıp deneyelim. Mesela 15.75
Yani sonuç olarak aşağıdaki gibi olacak.

(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit5.text))))+', fiyat=15.75');

Sorunun nokta/virgül işaretlerinden kaynaklandığını düşünerek, iki türlü deneme yapmalısınız.
Hem
(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit5.text))))+', fiyat=15.75');
Hem de
(trim(FormatDateTime('yyyy-mm-dd',strtodate(cxdateedit5.text))))+', fiyat=15,75');

Bunlardan biri doğru diğeri ise hatalı olacaktır. Her ikisinide deneyip sonucu yazar mısınız?
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: sql update sorunu

Mesaj gönderen esistem »

Kod: Tümünü seç

quotedstr ( StringReplace ( CURRTOSTR(CURRENCYDEGER) , ',' , '.' , [rfReplaceAll] ) );
şeklinde deneyiniz.
ercanskose
Üye
Mesajlar: 62
Kayıt: 18 Eyl 2011 02:31

Re: sql update sorunu

Mesaj gönderen ercanskose »

xxxjedixxx 15.50 yapınca oldu. bu durumda formatı ne yapmamız gerekicek 0.00 da yapsam 0,00 da yapsam olmuyor.
ercanskose
Üye
Mesajlar: 62
Kayıt: 18 Eyl 2011 02:31

Re: sql update sorunu

Mesaj gönderen ercanskose »

esistem yazdı:

Kod: Tümünü seç

quotedstr ( StringReplace ( CURRTOSTR(CURRENCYDEGER) , ',' , '.' , [rfReplaceAll] ) );
şeklinde deneyiniz.

currencydeger dediğiniz nedir.
ercanskose
Üye
Mesajlar: 62
Kayıt: 18 Eyl 2011 02:31

Re: sql update sorunu

Mesaj gönderen ercanskose »

arkadaşlar teşekkür ederim

esistem arkadaşın replace fonksiyonundan feyz alarak çözdüm.

Kod: Tümünü seç

cxcurrencyedit2.Text:= StringReplace(cxcurrencyedit1.text,',','.',[rfReplaceAll]);
cxcurrencyedit2 ye noktalı olarak dönüştürdüm. şimdi normal kaydediyor.
Cevapla