sql update sorunu

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

sql update sorunu

Mesaj gönderen ercanskose » 15 Şub 2015 06:03

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 » 15 Şub 2015 08:41

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 » 16 Şub 2015 08:56

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: 59
Kayıt: 18 Eyl 2011 01:31

Re: sql update sorunu

Mesaj gönderen ercanskose » 16 Şub 2015 09:47

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 » 16 Şub 2015 11:40

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: 462
Kayıt: 02 Eki 2007 10:22
İletişim:

Re: sql update sorunu

Mesaj gönderen esistem » 16 Şub 2015 12:26

Kod: Tümünü seç

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

ercanskose
Üye
Mesajlar: 59
Kayıt: 18 Eyl 2011 01:31

Re: sql update sorunu

Mesaj gönderen ercanskose » 18 Şub 2015 03:12

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: 59
Kayıt: 18 Eyl 2011 01:31

Re: sql update sorunu

Mesaj gönderen ercanskose » 18 Şub 2015 03:14

esistem yazdı:

Kod: Tümünü seç

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

currencydeger dediğiniz nedir.

ercanskose
Üye
Mesajlar: 59
Kayıt: 18 Eyl 2011 01:31

Re: sql update sorunu

Mesaj gönderen ercanskose » 18 Şub 2015 03:37

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