Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2024
pruz pruz is offline
Miembro
 
Registrado: sep 2003
Posts: 201
Poder: 22
pruz Va por buen camino
Error al Actualizar Decimales

Hola amigos:

Su pesadilla otra vez

Tengo el siguiente problema, estoy trabajando con Mysql 5.1 y Delphi Tokio.

Tengo un valor con decimales, pero solo cuando actualizo me da el siguiente error (ver imagen)

Código Delphi [-]
      Valor := SacaMiles(edt_uf.Text);
      ModuloDatos.QTablas.SQL.Clear;
      ModuloDatos.QTablas.SQL.Add(' Update remaux ');
      ModuloDatos.QTablas.SQL.Add(' set valor  = ''' + FloatToStr(Valor) + '''');
      ModuloDatos.QTablas.SQL.Add(' Where Raiz =  ''' + copy(edt_cuf.Text,1,1) + '''');
      ModuloDatos.QTablas.SQL.Add(' and Codigo = ''' + Trim(copy(edt_cuf.Text,3,3)) + '''');
      ModuloDatos.QTablas.Execute;

Ya revise el campo en la tablas Mysql y es de Double(15,4)


Estoy usando la siguiente funcion para validar el punto o coma, como separador de miles o decimales.


Código Delphi [-]
Function SacaMiles( cValor : String ): Extended ;
var
  cRetorno, smiles, sdecimal : String ;
  n        : word ;
begin
  smiles   := SysUtils.FormatSettings.ThousandSeparator ;
  sdecimal := SysUtils.FormatSettings.DecimalSeparator ;

  cRetorno := '';
  For n := 1 To Length( cValor ) do begin
     If (cValor[ n ] <> '.')  then
               cRetorno :=  cRetorno + cValor[ n ] ;
  end;
  If cRetorno = '' then cRetorno := '0' ;
  Result := StrToFloat( cRetorno ) ;

end ;
Imágenes Adjuntas
Tipo de Archivo: png Error_GrabaDecimales.png (18,5 KB, 23 visitas)
Responder Con Cita
  #2  
Antiguo 15-10-2024
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 146
Poder: 20
aledieb Va por buen camino
Hola, proba con:

Código Delphi [-]
      Valor := SacaMiles(edt_uf.Text);
      ModuloDatos.QTablas.SQL.Clear;
      ModuloDatos.QTablas.SQL.Add(' Update remaux ');
      ModuloDatos.QTablas.SQL.Add(' set valor  = :valor');
      ModuloDatos.QTablas.SQL.Add(' Where Raiz =  ''' + copy(edt_cuf.Text,1,1) + '''');
      ModuloDatos.QTablas.SQL.Add(' and Codigo = ''' + Trim(copy(edt_cuf.Text,3,3)) + '''');
      ModuloDatos.QTablas.parambyname('valor').value:=valor;
      ModuloDatos.QTablas.Execute;

Editado, entendí mal y estas grabando un valor como texto. No convendría modificar la tabla y grabar un valor numérico?
__________________
Suerte
Alejandro

Última edición por aledieb fecha: 15-10-2024 a las 23:11:45.
Responder Con Cita
  #3  
Antiguo 16-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
si utilizas FloatToStr() lo conviertes a cadena de texto, quizas deberias usar la funcion FormatFloat()

La función FormatFloat en Delphi se utiliza para dar formato a un número de punto flotante (float) de acuerdo con una cadena de formato especificada.

Sintaxis:
Código:
function FormatFloat(const Format: string; Value: Extended): string;
Format: Especifica cómo debe formatearse el número, utilizando ciertos caracteres especiales.
Value: Es el número que deseas formatear.

Ejemplo:

Código:
var
  formattedValue: string;
  number: Double;
begin
  number := 12345.6789;
  formattedValue := FormatFloat('#,##0.00', number);
  ShowMessage(formattedValue);  // Resultado: "12,345.68"
end;
Caracteres comunes para el formato:
0: Se usa para forzar la aparición de ceros en posiciones vacías.
#: Representa un dígito opcional. No se muestra si no hay dígito en esa posición.
.: Se utiliza como separador decimal.
,: Se utiliza como separador de miles.
Responder Con Cita
  #4  
Antiguo 16-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
Formato simple:

Código:
FormatFloat('0.00', 123.456);  // "123.46"
Separador de Miles:

Código:
FormatFloat('#,##0.00', 12345.678);  // "12,345.68"
Formato con signos positivos - negativos

Código:
FormatFloat('+0.00;-0.00', -123.45);  // "-123.45"
La función es muy útil para presentar valores numéricos con un formato específico, como cuando deseas mostrar cantidades con separadores de miles, números decimales fijos, o en un estilo contable.
Responder Con Cita
  #5  
Antiguo 16-10-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.405
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es mejor y más seguro usar parámetros, tal y como ha explicado aledieb

Y de todas formas, a simple vista me parece que esto está mal:
Código Delphi [-]
ModuloDatos.QTablas.SQL.Add(' set valor  = ''' + FloatToStr(Valor) + '''');
Porque al hacer floatostr ya te devuelve el valor entre comillas (un string), y tú estás añadiendo más comillas.
Responder Con Cita
  #6  
Antiguo 16-10-2024
pruz pruz is offline
Miembro
 
Registrado: sep 2003
Posts: 201
Poder: 22
pruz Va por buen camino
Lo primero que voy hacer es aplicar la sugerencia de Casimiro y si no resulta ire escalando en las soluciones propuestas

gracias
Responder Con Cita
  #7  
Antiguo 16-10-2024
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 937
Poder: 24
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado pruz, me tome la libertad de sugerir lo siguiente...

Código Delphi [-]
var
  Value:String;
  SValue:String;
  Valor:Single; //Double?..
begin
      SValue:=edt_uf.Text;

      {Reemplaza Separador de Miles, por ''}
      SValue:=SValue.Replace(FormatSettings.ThousandSeparator, EmptyStr);

      {Convierte Strint a Single}
      Valor :=0;
      if not SValue.IsEmpty then
         Valor :=SValue.ToSingle;

      ModuloDatos.QTablas.SQL.Clear;
      ModuloDatos.QTablas.SQL.Add(' Update remaux ');
      ModuloDatos.QTablas.SQL.Add('   set valor  = :Valor');
      ModuloDatos.QTablas.SQL.Add(' Where Raiz = :Raiz ');
      ModuloDatos.QTablas.SQL.Add('   and Codigo = :Codigo');

      ModuloDatos.QTablas.ParamByName('valor').value := valor; //[Valor | SValue.ToSingle]
      ModuloDatos.QTablas.ParamByName('raiz').value  := copy(edt_cuf.Text,1,1)
      ModuloDatos.QTablas.ParamByName('codigo').value:= Trim(copy(edt_cuf.Text,3,3))

      ModuloDatos.QTablas.Execute;
end;
Como indican los colegas, es una muy buena alternativa el utilizar parámetros para asignar los datos a actualizar en la sentencias SQL. Simplifica y clarifica el código...

Saludos cordiales
Responder Con Cita
  #8  
Antiguo 16-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 280
Poder: 2
navbuoy Va por buen camino
lo primero que hay que tener en cuenta es que ha dicho en el primer post que su base de datos tiene un valor numerico con decimales asi que pasarlo a string aparte de ser una tonteria no servira para almacenarlo en un float numerico en la BD (y digo tonteria porque si el campo de la BD es numerico con decimales que sentido tiene pasarlo a string? quiero decir si el objetivo parece ser almacenarlo en la BD, no mostrarlo en un ShowMessage o cosas parecidas) y tambien para que tantas lineas de codigo si con FormatFloat de 1 sola linea ya lo puedes ajustar a lo que necesitas? (me refiero al primer post donde utiliza una funcion para los miles)

y si cloayza, asi como lo muestras yo tambien lo utilizo para construir las sentencias SQL de los queries, funciona muy bien el ParamByName y lo simplifica a la hora de construir la sentencia con datos dinamicos que puedan variar

Última edición por navbuoy fecha: 16-10-2024 a las 16:27:16.
Responder Con Cita
  #9  
Antiguo 17-10-2024
pruz pruz is offline
Miembro
 
Registrado: sep 2003
Posts: 201
Poder: 22
pruz Va por buen camino
Talking

Hola a todos:

Listo, solucionado aplique la solucion "cloayza", solo la parte del UPDATE.
funciona perfecto

muchas gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error con numeros y decimales river_1 OOP 5 24-04-2013 20:53:56
Error en decimales RebeccaGL MySQL 1 23-07-2011 20:13:06
Error texto y decimales al exportar a excel. movorack Varios 9 07-02-2008 19:18:12
error sql al actualizar alberto grande SQL 2 21-11-2007 22:17:28
Error al actualizar sanz Conexión con bases de datos 3 12-04-2006 17:57:41


La franja horaria es GMT +2. Ahora son las 13:32:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi