Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-08-2006
Avatar de taru
taru taru is offline
Miembro
 
Registrado: jul 2006
Posts: 27
Poder: 0
taru Va por buen camino
UPDATE con reales

Hola tengo un problemilla y llevo dandole vueltas toda la tarde. El problema es este query que se ejecuta bien osea funciona, pero el hijo de su madre me mete integer en las columnas ptotal, pagado y debe que por supuesto son float.
Código Delphi [-]
query.SQL.Text := 'UPDATE ' + bdticket + ' SET  ptotal = ' + quotedstr(ptotal.caption) + ' , pagado=' + quotedstr(editentrega.Text) + ' , debe=' + quotedstr(floattostr(resto)) + ' WHERE id=' + quotedstr(inttostr(idcabecera));

y no hay manera. He imprimido en pantalla el query ya evaluado y me sale:


Código SQL [-]
UPDATE ticket SET ptotal='27,46', pagado='10,28', debe='17,18' WHERE id='492'



Creo que esta todo bien pero en este caso me updatea 27, 10 y 17 respectivamente.

Alguien sabe porque?

PD: Los campos de la tabla mysql son float.
Gracias por adelantado.

Última edición por taru fecha: 16-08-2006 a las 17:13:56.
Responder Con Cita
  #2  
Antiguo 16-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Supongo que usando un punto en lugar de una coma decimal. Seguramente MySql no entiende la coma y hace lo mejor que puede para interpretar la entrada como un número, y en ese sentido toma sólo antes de la coma.

// Saludos
Responder Con Cita
  #3  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Otro detalle que noto es que está mandando los valores de las campos como si fueran cadenas de texto, o sea, entre comillas simples. No se si eso se pueda en MySQL, pero en otros manejadores me imagino que daría error de tipos no compatibles. Prueba tu query de esta forma:

Código Delphi [-]
query.SQL.Text := 'UPDATE ' + bdticket + ' SET  ptotal = ' + ptotal.caption + ' , pagado=' + editentrega.Text + 
  ' , debe=' + floattostr(resto) + ' WHERE id=' + inttostr(idcabecera);

Lo cual te debe resultar en algo como:

Código SQL [-]
UPDATE ticket SET ptotal=27,46, pagado=10,28, debe=17,18 WHERE id=492

Otra posibilidad es usar la función format:

Código Delphi [-]
query.SQL.Text := Format('UPDATE %s SET ptotal = %f, pagado = %f, debe = %f where id = %d',
  [bdticket, StrToFloat(ptotal.caption), StrToFloat(editentrega.Text), resto, idcabecera]);



Saludos...
Responder Con Cita
  #4  
Antiguo 16-08-2006
Avatar de taru
taru taru is offline
Miembro
 
Registrado: jul 2006
Posts: 27
Poder: 0
taru Va por buen camino
Gracias por responder.

Me sique dando un error y he probado de las dos formas que me habeis propuesto.

Os cuento cuando se evalua el update queda talque asi:

Código SQL [-]
UPDATE ticket SET ptotal=27,46, pagado=10,28, debe=17,18 WHERE id=492

y da problemas por las comas de los decimales con las comas de separacion de campos.

Hay alguna forma de que no tome esa coma de decimales como coma de separacion de campos. Me explico, Hay otra forma de hacer un UPDATE sin utilizar las comas de separacion?.

El MySql si que hacepta las comas de decimales ya que los precios y demas los estoy metiendo con un dbgrid y no me deja meter puntos solo hacepta comas. Si intento meter un punto en los decimales te pita.

Gracias por adelantado.
Responder Con Cita
  #5  
Antiguo 16-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No, no. MySql no acepta comas decimales. Lo que sucede son dos cosas:

1. Tu DBGrid acepta comas y no puntos porque seguramente así está la configuración regional de tu pc.

2. Al hacer la actualización a través de un control de datos, éste hace la conversión de formato cambiando las comas por puntos.

Pero el punto es el punto Si vas a agregar directamente los datos mediante SQL, debes usar puntos, no comas decimales.

Esto también lo puedes subsanar si utilizas parámetros (y siempre debieran usarse parámetros) en lugar de concatenar los valores de los Edits directamente:

Código SQL [-]

update ticket set ptotal=:precio where id=:id

Aquí, los : indican que precio e id son parámetros que debes proporcionar así:

Código Delphi [-]
Query.ParamByName('precio').AsFloat := valor;

Siendo valor un dato float que puedes obtener del edit con las funciones que comenta maeyanes. La componente Query se encargará de colocar los parámetros en el formato correcto (punto o comas).

// Saludos

Última edición por roman fecha: 16-08-2006 a las 18:40:04.
Responder Con Cita
  #6  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Prueba entonces con una query con parámetros:

Código Delphi [-]
query.SQL.Text := 'UPDATE ' + bdticket + ' SET ptotal = total, pagado = agado, debe = :debe ' +
  'where id = :id';
query.Prepare;
query.ParamByName('ptotal').AsFloat := StrToFloat(ptotal.Caption);
query.ParamByName('pagado').AsFloat := StrToFloat(editentrega.Text);
query.ParamByName('debe').AsFloat := resto;
query.ParamByName('id').AsInteger := idcabecera;
query.Execute

Update: Vaya, se me adelantaron... :P

Saludos...
Responder Con Cita
  #7  
Antiguo 16-08-2006
Avatar de taru
taru taru is offline
Miembro
 
Registrado: jul 2006
Posts: 27
Poder: 0
taru Va por buen camino
Soys unos maquinas ya funciona!!!

Parecera una tonteria pero llevo todo el puto dia con esto. La Solucion:

Código Delphi [-]
query.SQL.Text := 'UPDATE ' + bdticket + ' SET ptotal = total, pagado = agado, debe = :debe ' +  'where id = :id';
    query.Prepare;
    query.ParamByName('ptotal').AsFloat := StrToFloat(ptotal.Caption);
    query.ParamByName('pagado').AsFloat := StrToFloat(editentrega.Text);
    query.ParamByName('debe').AsFloat := resto;
    query.ParamByName('id').AsInteger := idcabecera;

por cierto donde salen las caritas hay que poner dospuntospe vale?
Responder Con Cita
  #8  
Antiguo 16-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por taru
Código Delphi [-]

query.SQL.Text := 'UPDATE ' + bdticket + ' SET ptotal = :ptotal, pagado = :pagado, debe = :debe ' +  'where id = :id';
    query.Prepare;
    query.ParamByName('ptotal').AsFloat := StrToFloat(ptotal.Caption);
    query.ParamByName('pagado').AsFloat := StrToFloat(editentrega.Text);
    query.ParamByName('debe').AsFloat := resto;
    query.ParamByName('id').AsInteger := idcabecera;

por cierto donde salen las caritas hay que poner dospuntospe vale?
¿Cuáles caritas?

Para evitar que salgan caritas cuando en el código ponemos :p basta usar la etiqueta [noparse]:

[ delphi ]
[ noparse ]

...

[ /noparse ]
[ /delphi ]

// Saludos
Responder Con Cita
  #9  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Vaya, hasta ahora me lo dicen (lo de [ noparse ] ). Por cierto, no sería mejor que dentro de las etiquetas code, delphi, sql. etc., no se haga la sustitución de "smileis" de forma predeterminada?


Saludos...
Responder Con Cita
  #10  
Antiguo 16-08-2006
Avatar de taru
taru taru is offline
Miembro
 
Registrado: jul 2006
Posts: 27
Poder: 0
taru Va por buen camino
Otra cosa mas que se aprende hoy. Gracias por avisar roman.
Responder Con Cita
  #11  
Antiguo 16-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por maeyanes
Vaya, hasta ahora me lo dicen (lo de [ noparse ] ). Por cierto, no sería mejor que dentro de las etiquetas code, delphi, sql. etc., no se haga la sustitución de "smileis" de forma predeterminada?


Saludos...
Pues no, que a mi me gusta meter emoticones

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 20-11-2006
lalomon lalomon is offline
Miembro
 
Registrado: nov 2005
Posts: 10
Poder: 0
lalomon Va por buen camino
e tenido algunos problemas con este codigo

estoy trabajando con MySql 4 y con delphy 7, las query las hago via
ODBC con adoquery, y mi update es asi:

Código SQL [-]
[ noparse ]

update stockproducto set precioProducto= recioPa where codigoProducto= :codigoPa and codigobodega=1;

[ /noparse ]

el problema surge al asignar lo valores a los parametro, lo cual hago de la siguiente forma:

Código Delphi [-]
[ noparse]
adoquery3.prepared;
adoquery3.Parameters.ParamByName('precioPa').Value:=precioP;
[ /noparse ]


no se si es problema de la version de delphy o de la adoquery, pero no asigna los valores, ya que al visualizar la consulta con showmessage me sigue mostrando los params y no los valores :S

pd: si se fijan la sintaxis es diferente a la que ustedes proponen porque no esta funcion sql.prepare ni la
query.ParamByName('precioPa').AsFloat:= precio

bueno ojala puedan ayudarme

pd: solucion parche mientras tanto, guardo el float en la base de dato como un string y cuando lo saco lo paso a float

Última edición por lalomon fecha: 21-11-2006 a las 01:14:35.
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
trackbar con numeros reales haffo OOP 29 12-12-2017 18:14:01
Transparencias reales... elcigarra Gráficos 3 13-07-2005 14:29:20
¿Sucesos reales? rafita Humor 0 11-02-2005 12:54:51
sumar reales migueilichenco Varios 1 01-12-2004 16:25:01
Ofertas reales obiwuan Humor 0 16-12-2003 22:44:54


La franja horaria es GMT +2. Ahora son las 05:04:54.


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