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 15-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Unhappy Problemas al guardar Float en Mysql

Buenas noches, estoy realizando una aplicación para llevar el control de los clientes en un gimnasio y al tratar de guardar los valores del monto en Mysql me salta el error "Column doesn't match value count at row 1", después de darle vueltas y vueltas vi que era porque estaba guardando en 3 campos diferentes valores decimales (9,8), (20,4), (52,5) por poner un ejemplo, y la sentencia Mysql me lo tomaba como 6 valores (9) (8) (20), (4), etc y todo por la COMA DECIMAL que hace que mysql los tome como dos valores distintos.

De esta forma me da el error: "Column doesn't match value count at row 1"
Código Delphi [-]
  
 begin
      with ADO1 do
         SQL.Clear;
      try
         ADO1.SQL.Add('INSERT INTO factura (cantfactu,subtfactu,ivafactu,totalfactu,horafactu');
         ADO1.SQL.Add(',idclientef,idpagof,iduserF)VALUES(');
         ADO1.SQL.Add(Quotedstr(combocant.Text));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add((Floattostr(cant)));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add((Floattostr(iva)));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add((Floattostr(total)));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add((FormatDateTime('yyyy/mm/dd',(Mfechahora))));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr(form2.edtcedula.Text));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr(tpago));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr('1'));
         ADO1.SQL.Add(');');
         ADO1.ExecSQL;
      finally
         ShowMessage('Añadido Correctamente a la Base de Datos!');
      end;



Intente guardar los valores como string pero los redondea como valores enteros:
Código Delphi [-]
   begin
      with ADO1 do
         SQL.Clear;
      try
         ADO1.SQL.Add('INSERT INTO factura (cantfactu,subtfactu,ivafactu,totalfactu,horafactu');
         ADO1.SQL.Add(',idclientef,idpagof,iduserF)VALUES(');
         ADO1.SQL.Add(Quotedstr(combocant.Text));
         ADO1.SQL.Add(',''');
         ADO1.SQL.Add((Floattostr(cant)));
         ADO1.SQL.Add(''',''');
         ADO1.SQL.Add((Floattostr(iva)));
         ADO1.SQL.Add(''',''');
         ADO1.SQL.Add((Floattostr(total)));
         ADO1.SQL.Add(''',');
         ADO1.SQL.Add((FormatDateTime('yyyy/mm/dd',(Mfechahora))));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr(form2.edtcedula.Text));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr(tpago));
         ADO1.SQL.Add(',');
         ADO1.SQL.Add(QuotedStr('1'));
         ADO1.SQL.Add(');');
         ADO1.ExecSQL;
      finally
         ShowMessage('Añadido Correctamente a la Base de Datos!');
      end;
   end;

Agradecería su orientación...
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #2  
Antiguo 15-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si los campos son float, no puedes guardar string en ellos.
Usa parámetros en lugar de componer la sql.
Código Delphi [-]
ado.close;
ado.sql.text="insert into ....... values :v1, :v2, v3, ..."
ado.param[1].asString = ......
ado.param[2].asFloat = ....
etc.
etc.
ado.execsql;
Responder Con Cita
  #3  
Antiguo 15-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
No he trabajado con parámetros hasta el momento, he visto varios ejemplos pero me saltan errores:

Código Delphi [-]
ADO1.close;
ADO1.sql.text:='INSERT INTO factura (cantfactu,subtfactu,ivafactu,totalfactu,horafactu,idclientef,idpagof,iduserF)'+
'VALUES (:cantfactu,:subtfactu,:ivafactu,:totalfactu,:horafactu,:idclientef,:idpagof,:iduserF)';
ADO1.parambyname('cantfactu').asString := combocant.Text;

Pero me salta un error, ADOQUERY no reconoce parambyname como su miembro...

he hecho algo mal?

Gracias.
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #4  
Antiguo 15-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ZiriusB.

La sintáxis para el componente TADOQuery es:
Código Delphi [-]
                                                 
   ADO1.Parameters.ParamByName('CANTFACTU).Value := combocant.Text;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 15-12-2015
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 14
ZiriusB Va por buen camino
Exclamation

Ya lo había averiguado jejejeje de todas formas muchas gracias, ahora me lanza un error al que no consigo darle vueltas u.u

First chance exception at $752D2C1A. Exception class EOleException with message 'Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros'. Process ProGym.exe (6964)

Código Delphi [-]
      with ADO1 do
         SQL.Clear;
      try
ADO1.close;
ADO1.sql.text:='INSERT INTO factura (cantfactu,subtfactu,ivafactu,'+
               'totalfactu,horafactu,'+
               'idclientef,idpagof,iduserf)'+
               'VALUES (:cantfactu,:subtfactu,:ivafactu,:totalfactu,'+
               ':horafactu,:idclientef,'+
               ':idpagof,:iduserF)';
ADO1.Parameters.ParamByName('cantfactu').Value := combocant.Text;
ADO1.Parameters.ParamByName('subtfactu').Value := cant;
ADO1.Parameters.ParamByName('ivafactu').Value := iva;
ADO1.Parameters.ParamByName('totalfactu').Value := total;
ADO1.Parameters.ParamByName('horafactu').Value := ((FormatDateTime('yyyy/mm/dd',(Mfechahora))));
ADO1.Parameters.ParamByName('idclientef').Value := (form2.edtcedula.Text);
ADO1.Parameters.ParamByName('idpagof').Value := tpago;
ADO1.Parameters.ParamByName('iduserF').Value := ('1');
ADO1.execsql;
      finally
         ShowMessage('Añadido Correctamente a la Base de Datos!');
      end;
   end;
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #6  
Antiguo 15-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código Delphi [-]
ADO1.Parameters.ParamByName('horafactu').Value := ((FormatDateTime('yyyy/mm/dd',(Mfechahora))));
Seguramente es esa línea, si el campo horafactu es un datetime, le etás pasando una cadena de texto.
Código Delphi [-]
ADO1.Parameters.ParamByName('horafactu').Value := Mfechahora;
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
guardar precios. numeric o float? Patricio Firebird e Interbase 5 07-10-2008 16:21:17
guardar text como un float mjjj Varios 17 20-12-2007 11:44:17
Problemas con los float tato Varios 2 03-04-2006 11:57:38
problemas con float y redondeos wonder boy Firebird e Interbase 17 27-12-2005 20:59:06
Problemas con float.... ilichhernandez Varios 2 20-12-2005 16:19:20


La franja horaria es GMT +2. Ahora son las 17:46:17.


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