Avatar billede gorlist Nybegynder
11. november 2001 - 20:58 Der er 7 kommentarer og
1 løsning

Real skal insertes i MSSQL - haster!!

Jeg skal indsætte en real i SQL-tabel, men Delphi siger at en real skal være eks. 25,75 hvor SQL forventer 25.75.

Hvordan skal jeg konvertere?
Avatar billede dkn Nybegynder
11. november 2001 - 22:18 #1
Floattostr(RealValue)
Avatar billede gorlist Nybegynder
12. november 2001 - 00:04 #2
Jeg har forsøgt at bruge floattostr, men SQL debug siger at der er en fejl ved \',\' hvilket kun kan være som i eksemplet 25,75.

Har du et andet forslag?
Avatar billede hreiff Nybegynder
12. november 2001 - 08:11 #3
Lav din egen procedure, hvor du udskifter , med .  :

Function KommaToPunktum(s: string):string;
Var i: word;
Begin
  i := pos(\',\',s);
  if i > 0 then
    Insert(\'.\',Result,i);
end;

Brug:  KommaToPunktum(FloatToStr(RealValue));

Bemærk at ved US-windowsopsætning bruger Delphi . i FloatToStr
Avatar billede hreiff Nybegynder
12. november 2001 - 08:13 #4
Hov, jeg glemte
  delete(s,i,1); i if sætningen.

dvs

  if i > 0 then
  begin
    delete(s,i,1);
    Insert(\'.\',Result,i);
  end;
Avatar billede hreiff Nybegynder
12. november 2001 - 08:17 #5
Nu går det sgu helt galt.
Der mangler noget mere:

Function KommaToPunktum(s: string):string;
Var i: word;
Begin
  Result := s;
  i := pos(\',\',Result);
  if i > 0 then
  begin
    delete(Result,i,1);
    Insert(\'.\',Result,i);
  end;
end;

Håber det dur nu!

//hreiff
Avatar billede gorlist Nybegynder
12. november 2001 - 10:25 #6
Tak for det!!

Det viser sig (som tidligere konstateret) at Microsoft har lavet en megabommert ved at sætte forskellige standarder altefter om man kører American eller andet. Og efter som Delphi følger Windows, kan det give fantastisk underlige fejlmeldinger.
Avatar billede dkn Nybegynder
12. november 2001 - 16:17 #7
Hvad så hvis tallet er:
2.000,34 ?

...Ja så skal man faktisk bruge denne function istedet:


Function TextToCurrency(Const S: String):Currency;
  Var
    i, k: Integer;
    Numerals: Set Of Char;
    temp: String;
  Begin
    Numerals := [\'0\'..\'9\',\'-\', \'+\',DecimalSeparator, ThousandSeparator];
    i := 1;
    While (i<=Length(S)) and not (S[i] In Numerals) Do
      Inc(i);
    Exclude(Numerals, \'-\');
    Exclude(Numerals, \'+\');
    k:= i+1;
    While (k<=Length(S)) and (S[k] In Numerals) Do Begin
      If S[k] = DecimalSeparator Then Begin
        Exclude(Numerals, DecimalSeparator);
        Exclude(Numerals, ThousandSeparator);
      End;
      Inc(k);
    End; {While}
    If (i <= Length(S)) Then Begin
      temp := Copy(S,i,k-i);
      For i:= length(temp) downto 1 Do
        If temp[i] = ThousandSeparator Then
          Delete(temp, i, 1);
      Result := StrToCurr(temp)
    End
    Else
      raise EConvertError.CreateFmt(\'%s is not a valid currency value!\',
                                      [S] );
  End; {TextToCurrency}
Avatar billede hreiff Nybegynder
13. november 2001 - 09:33 #8
Jeps, men FloatToStr sætter ikke tusindadskiller med mindre man ber om det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester