nokta virgül sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

nokta virgül sorunu

Mesaj gönderen bilbeyi »

arkadaşlar selamlar
Bu konular daha önce konuşulmuştu ama tam olarak istediğim cevabı bulamadım.

kısaca sorunum 10,15 sayısını sql sorgusu ile QuotedStr kullanarak delphiden insert ettiğimde sayı db de 1015,00 olarak tutuluyor.
maskeleme vs denedim ama halledemedim.
bölgesel ayarlar windows'un standartları olarak duruyor. Bunları değiştirdiğimde bir sorunum yok ama standart kullandığımda sorun yaşıyorum. Bugün piyasada ki ciddi programlara baktığımızda onlarda windows'un standart bölgesel ayarlarını kullanıyor. Bu sorunumu parametre kullanımı dışında aşmamın yolu varmıdır. ?

database olarak firebird kullanıyorum.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

firebird de ondalık ayırac .
10.15 olarak vt ye yazmayı deneyin
ÜŞENME,ERTELEME,VAZGEÇME
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

Hocam değişen bişi yok. Ben 10.15 yazsam dahi insert ederken 10,15 değerini alıyor.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

benim dedigim sql ile insert yaparken
yani insert into bitablo (id,para) values(1,'10.15')
seklinde bir sql....nasıl insert ederken 10,15 degerini alıyor anlamadım acıkcası

yoksa ibx bilesenleri ile AsCurrency property si ile sorun cıkmaması lazım
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Türkçede decimal ayraç , dir. Oysa diğer dillerde . dır. Bence veritabanına kayıt ederken ille string olarak kaydetmen gerekiyorsa FloatToStr ile sayıyı stringe çevir.
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

şimdi hocam
IBQUery1.sql.TExt:=' insert into table (a,b) Values(' .....................
şeklinde insert ederken programı satır satır çalıştırıp IBQUery1.sql.TExt;
içine baktığımda 10.15 sayısı '10,15' oluyor.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Programınızın oncreate inda
DecimalSeperator='.';
yazın o zaman
ÜŞENME,ERTELEME,VAZGEÇME
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

hocam ondalık ayracı virgül tutarak işlem yapmanın yolu yokmudur. Çünkü müşterimin kullandığı program bu şekilde çalışıyor. Sıkıntı olur diye düşünüyorum
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

o zaman insert sqli yazarken
12,15 degerini FloatToStr ile Stringe donustur
sonra virgulu nokta ile degistir
hocam daha baska alternatifler de olusturabilirsin
biraz dusununce cıkıyor
ÜŞENME,ERTELEME,VAZGEÇME
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

hocam ben 10.15 şeklinde sayıyı insert etsemde sayı '10,15' olarak gidiyor önceki cevabımda dediğim gibi.
bu alanlar decimal string değil
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

insert sql nin tamamını yazarmısın?
ÜŞENME,ERTELEME,VAZGEÇME
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

Querybos.SQL.TExt:=' insert into YAPILMIS_DOLUMLAR(SNO,FIRMA_NO,FIRMA_ADI,TARIH,KILO,STOK_KODU,STOK_ADI) Values('+
' ' + FloatTOStr(sno) + ','+
'' + FLoatTOStr(QDOLUMFIRMA['FIRMA_KODU']) + ','+
'''' + QDOLUMFIRMA['FIRMA_ADI'] + ''','+
'''' + DateToStr(DAte) + ''','+
'' + QuotedStr (FloatTOStr(IBQuery2['KILOSU'])+ ','+
'' + FloatTOStr(QDOLACAKTUPLER['STOK_KODU']) + ','+
'''' + QDOLACAKTUPLER['STOK_ADI'] + ''')';
Querybos.ExecSQL;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

hocam bu
FloatTOStr(sno) islemi sonucta sizin bolgesel ayarlarınıza gore bir string dondurur. Benim demek istedigim ise
1.bu stringi al,
2.icinde virgül gordugun karakteri . ile degistir
3.sonra insert sql de kullan

gayet acık ve net
*Bir string icinde ',' ü '.' ya cevirecek bir function yazacaksınız o kadar...
ÜŞENME,ERTELEME,VAZGEÇME
bilbeyi
Üye
Mesajlar: 104
Kayıt: 24 Kas 2004 10:48
Konum: ist

Mesaj gönderen bilbeyi »

şimdi hocam dönüp dolaşıp aynı noktaya geliyoruz. ben 10,15 sayısını 10.15 haline dönüştürüp insert etsemde sonuç aynı oluyor değişien bir şey olmuyor. Eğer siz bunu halletmişiseniz mümkünse bana örnek gönderirseniz sevinirim.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Sayın bilbeyi
asagıda projemden copy/paste ettigim bir ornek var
burada ReplaceStr(salespr, ',', '.'); ifadesinin oldugu satıra
dikkatlice bakın
Ne goruyorsunuz............
Yukarıda 5 mesajdır ifade etmeye calıstıgım buydu
bende, musterimizde hatasız calısmakta....

Kod: Tümünü seç

procedure TfrmMain.AddDetailToInterbase(Detail: string);
var
  CancelStatus: Integer;
  unitpr, salespr, s: string;
begin
  with IBSQL1 do
  try
    unitpr := CurrToStr(PriceConvert(ParseLSV1('BT10', Detail)));
    salespr := CurrToStr(PriceConvert(ParseLSV1('BT20', Detail)));
    ReplaceStr(unitpr, ',', '.');
    ReplaceStr(salespr, ',', '.');

    s := 'INSERT INTO DETAIL (TICKETNO, SCALENO, PLUNO, DEPNO, VENDORNO, UNITPRICE, PIECES, WEIGHT, PRICE, CANCELSTATUS, PLUCLASS)';
    s := s + ' VALUES(';
    s := s + IntToStr(ParseLSV1('BONU', Detail) div 100) + ',' +
      IntToStr(ParseLSV1('WANU', Detail)) + ',' +
      IntToStr(ParseLSV1('SNR1', Detail)) + ',' +
      IntToStr(ParseLSV1('PNAB', Detail)) + ',' +
      IntToStr(ParseLSV1('BEN1', Detail)) + ',' +
      unitpr + ',' +
      IntToStr(ParseLSV1('POS1', Detail)) + ',' +
      IntToStr(ParseLSV1('GEW1', Detail)) + ',' +
      salespr + ',';

    CancelStatus := ParseLSV1('STST', Detail);
    if CancelStatus = 0 then
      s := s + '-1,'
    else
      s := s + '0,';

    s := s + IntToStr(ParseLSV1('PAR1', Detail)) + ')';
    //Transaction.StartTransaction;
    SQL.Text := s;
    ExecQuery;
    //Transaction.Commit;
  except
    on E: Exception do
    begin
      //Transaction.Rollback;
      WriteErrLog('Interbase Tabloya Detail kayıt yazılamadı!.Kayıt iptal edildi.'
        + CrLf + E.Message + CrLf + s);
    end;
  end;
end;
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla