SQL Update Karakter Hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

SQL Update Karakter Hatası

Mesaj gönderen ozcank »

Arkadaşlar Merhaba ; Tabloda alan güncellerken şöyle bir hata alıyorum yardımcı olabilir misiniz?
SATIS_FIYAT1 alanını 25,2 girdiğim zaman hata veriyor ama 25.2 girdiğim zaman güncelliyor. Eğer tabloda virgüllü sayı varsa Update edince de hata veriyor.

Kod: Tümünü seç

procedure TForm26.BitBtn2Click(Sender: TObject);
Var
SabitCevap : Word;
begin
    SabitCevap:=Application.MessageBox('Stok Bilgileri Güncellenecektir. Eminmisiniz ?','Stok Güncelle',MB_YESNO);
    if (SabitCevap=mrYes) Then
      begin
StokSabit.Close;
StokSabit.SQL.Clear;
StokSabit.SQL.Add('UPDATE TBLSTSABIT SET SATIS_FIAT1='+QuotedStr(MaskEdit1.Text)+',SATIS_FIAT2=' +QuotedStr(MaskEdit2.Text) +',SATIS_FIAT3='+QuotedStr(MaskEdit3.Text)+' WHERE STOK_KODU='+QuotedStr(Edit1.Text)+'');
StokSabit.ExecSQL;
StokSabit.EnableControls;
Form25.BitBtn1.Click;
End;
Hata
---------------------------
Debugger Exception Notification
---------------------------
Project MENU.exe raised exception class EOleException with message 'Error converting data type varchar to numeric'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SQL Update Karakter Hatası

Mesaj gönderen mkysoft »

Veri tabanı . ile çalışacak şekilde yapılandırılmış. Bu nedenle SQL cümlesini oluştururken ingiliz sistemene göre dönüşüm yapmanız gerekir. Benzer şekilde tarih alanları da uygun olmalı.
Değişkenleri direk eklemek yerine addParam metodunu kullanın, doğru tiplerle parametreleri eklerseniz değişimleri sizin adınıza yapacaktır.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SQL Update Karakter Hatası

Mesaj gönderen ozcank »

Merhaba Kardeşim cevabın için çok teşekkür ederim; Yanlış anlamadıysam Şu şekilde mi?

Kod: Tümünü seç

StokSabit.Close;
StokSabit.SQL.Clear;
StokSabit.Parameters.Add('SATIS_FIAT1',MaskEdit1.Text);
.
.
.
Yanlış ise bir örnek yapabilir misin rica etsem.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SQL Update Karakter Hatası

Mesaj gönderen mkysoft »

Örneğiniz doğru ancak askEdit1.Text gönderirseniz metin olacağından herhangi bir dönüşüm yapmaz. Önce sayısal bir değere dönüştürüp sonra atayın.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SQL Update Karakter Hatası

Mesaj gönderen ozcank »

Şu şekilde atamaya çalıştım ama olmadı.

Kod: Tümünü seç

procedure TForm26.StokSabitAfterOpen(DataSet: TDataSet);
begin
TNumericField(StokSabit.FieldByName('SATIS_FIAT1')).DisplayFormat := ',0.00';
end;
End.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL Update Karakter Hatası

Mesaj gönderen freeman35 »

https://stackoverflow.com/questions/251 ... s/28726213
format stringler le dene birde. sistem ayarları değiştirilsede program içinde sabitlemiş olursun, yada sadece gereken yerde istediğine değiştirebilirsin.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SQL Update Karakter Hatası

Mesaj gönderen ozcank »

Freeman35 kardeşim buraya baktım ben de bir şey çıkaramadım. Bir örnek verebilir misin ?

birde ben tekrar UPDATE etmek istedim ve şu şekilde bir şey yapmaya çalıştım yine virgülü noktaya çeviremedim.

Kod: Tümünü seç

StokSabit.SQL.Add('UPDATE TBLSTSABIT SET SATIS_FIAT1='+QuotedStr(Trim(FormatFloat('0.00',StrTofloat(MaskEdit1.Text))))+',SATIS_FIAT2=' +QuotedStr(MaskEdit2.Text) +',SATIS_FIAT3='+QuotedStr(MaskEdit3.Text)+' WHERE STOK_KODU='+QuotedStr(Edit1.Text)+'');
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SQL Update Karakter Hatası

Mesaj gönderen mkysoft »

ozcank yazdı: 06 Nis 2020 03:52 Şu şekilde atamaya çalıştım ama olmadı.

Kod: Tümünü seç

procedure TForm26.StokSabitAfterOpen(DataSet: TDataSet);
begin
TNumericField(StokSabit.FieldByName('SATIS_FIAT1')).DisplayFormat := ',0.00';
end;
End.
Kastım bu değidi.

Kod: Tümünü seç

StokSabit.Close;
StokSabit.SQL.Clear;
satis := strtofloat(MaskEdit1.Text);
StokSabit.Parameters.Add('SATIS_FIAT1', satis);
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL Update Karakter Hatası

Mesaj gönderen freeman35 »

Sen bi test yap, hata verdiğinde oluşturduğun sql i bir kotrol etsene. edit içerikleri ne, thousandSeparator varsa hata alırsın

Kod: Tümünü seç

StokSabit.Close;
StokSabit.SQL.Clear;
StokSabit.SQL.Add('UPDATE........

    StokSabit.SQL.SaveToFile(....

StokSabit.ExecSQL;
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SQL Update Karakter Hatası

Mesaj gönderen ozcank »

Arkadaşlar Merhaba;
Yardımını esirgemeyen arkadaşlarıma çok teşekkür ediyorum . Emeğinize ve yüreğinize sağlık.

Sorunumu şu şekilde çözdüm:

Kod: Tümünü seç

StokSabit.SQL.Add('UPDATE TBLSTSABIT SET SATIS_FIAT1='+QuotedStr(StringReplace(MaskEdit1.text,',','.',[rfReplaceAll]))+',SATIS_FIAT2='+QuotedStr(StringReplace(MaskEdit2.Text,',','.',[rfReplaceAll]))+',SATIS_FIAT3='+QuotedStr(StringReplace(MaskEdit3.Text,',','.',[rfReplaceAll]))+' WHERE STOK_KODU='+QuotedStr(Edit1.Text)+'');
ShowMessage('UPDATE TBLSTSABIT SET SATIS_FIAT1='+QuotedStr(StringReplace(MaskEdit1.text,',','.',[rfReplaceAll]))+',SATIS_FIAT2='+QuotedStr(StringReplace(MaskEdit2.Text,',','.',[rfReplaceAll]))+',SATIS_FIAT3='+QuotedStr(StringReplace(MaskEdit3.Text,',','.',[rfReplaceAll]))+' WHERE STOK_KODU='+QuotedStr(Edit1.Text)+'');
StokSabit.ExecSQL;
StokSabit.EnableControls;
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SQL Update Karakter Hatası

Mesaj gönderen mkysoft »

Yaşayacağınız bir sonraki sorun dil ayarları ingilizce olan bir sitemde binlik ayracı ile girilmiş veriler olacaktır. Bu şekilde yapmak yerine parametre kullanın.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: SQL Update Karakter Hatası

Mesaj gönderen ozcank »

mkysoft haklısın ama diller kısmından aşılabilir. Aslında ben bir yerde daha takıldım nasıl aşabileceğim konusunda yardımlarınızı bekliyorum.

DBGrid1 deki kaydı Edit lere taşıyarak düzeltmeyi yapıp Güncelle button ile güncelliyorum fakat her defasında kayıt ilk kayda konumlanıyor ben düzeltme yaptığım kayda konumlanıp oradan devam etmek istiyorum.

Kod: Tümünü seç

procedure TForm26.BitBtn2Click(Sender: TObject);
Var
SabitCevap : Word;
begin
    SabitCevap:=Application.MessageBox('Stok Bilgileri Güncellenecektir. Eminmisiniz ?','Stok Güncelle',MB_YESNO);
    if (SabitCevap=mrYes) Then
      begin
StokSabit.Close;
StokSabit.SQL.Clear;
StokSabit.SQL.Add('UPDATE TBLSTSABIT SET SATIS_FIAT1='+QuotedStr(StringReplace(MaskEdit1.text,',','.',[rfReplaceAll]))+',SATIS_FIAT2='+QuotedStr(StringReplace(MaskEdit2.Text,',','.',[rfReplaceAll]))+',SATIS_FIAT3='+QuotedStr(StringReplace(MaskEdit3.Text,',','.',[rfReplaceAll]))+' WHERE STOK_KODU='+QuotedStr(Edit1.Text)+'');
StokSabit.ExecSQL;
StokSabit.EnableControls;
Form25.BitBtn1.Click;
DBGrid1.SetFocus;
End;
Bu kodda nasıl bir değişiklik yapabilirim?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL Update Karakter Hatası

Mesaj gönderen freeman35 »

db de "cursor" konusunu incele. StokSabit.Close; sen dibi yi kapatıyorsun, üstüne sql dahi değiştiriyorsun. En kaba çözüm, işleme başlamadan önce aktif primary key yi al, işin bittikten sonra locate ile tekrar cursor u yönlendir. yeni kayıtta ise prkey olarak yeni kaydın prkey sini locate et.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla