Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2008
Avatar de voldemmor
voldemmor voldemmor is offline
Miembro
 
Registrado: ago 2006
Posts: 232
Poder: 18
voldemmor Va por buen camino
Problemas con Zquery y manejo de flotantes

Hola amigos. Hos pido ayuda nuevamente, y de antemano les agradesco XD.

El Problema:

Estoy usando Compponentes Zeos+ delphi 6 + Mysql5
Tengo que hacer la insercion de varias notas a una tabla, pero al momento de de ejecutar el SQL de insercion me da un error

Código:
 
Out of range value adjusted for colum 'nota' at row 1
Valor fuera de rango en la cumna 'nota' en la fila1

el codigo



Código Delphi [-]
procedure TfrmNotas.BitBtn1Click(Sender: TObject);
var cant,i : integer;
begin
 cant := sgNotas.RowCount - 1;
try
 AcademicData.ZConnection1.StartTransaction;
 with AcademicData.ZQuery1 do
 begin
   {.....inicia el trabajo dentro de la transaccion........}
    sql.Clear;
    SQL.Text := 'INSERT INTO nota (cod_estudiante,cod_matricula,cod_periodo,cod_materia,nota,detalle)'+
    'VALUES(cod_estudiante,cod_matricula,cod_periodo,cod_materia,nota,detalle)';
    for i := 1 to  cant do
    begin
    {insercion masiva de datos------falta}
    ParamByName('pcod_estudiante').AsInteger:= strtoint(sgNotas.Cells[1,i]);
    ParamByName('pcod_matricula').AsInteger:= strtoint(sgNotas.Cells[0,i]);
    {periodo de notas}
    ParamByName('pcod_periodo').AsInteger:= CodigoPeriodoEvaluacion(cbxPeriodoNotas.Text);
    ParamByName('pcod_materia').AsInteger:= CodigoMateriaNombre(cbxMateria.Text);
    ParamByName('pnota').AsFloat:=StrToFloat(sgNotas.Cells[3,i]);
    ParamByName('pdetalle').AsString:=sgNotas.Cells[4,i];
    ExecSQL;
    end;
    Close
 end;
 AcademicData.ZConnection1.Commit;
 
except
 AcademicData.ZConnection1.Rollback;
 AcademicData.ZQuery1.Close;
end;
end;






y la tabla esta asi


Código SQL [-]
CREATE TABLE `nota` (
  `codigo` int(11) NOT NULL auto_increment,
  `cod_estudiante` int(11) default NULL,
  `cod_matricula` int(11) default NULL,
  `cod_periodo` int(11) default NULL,
  `cod_materia` int(11) default NULL,
  `nota` float(2,2) NOT NULL default '0.00',
  `detalle` varchar(30) default NULL,
  PRIMARY KEY  (`codigo`),
  KEY `cod_estudiante` (`cod_estudiante`),
  KEY `cod_matricula` (`cod_matricula`),
  KEY `cod_periodo` (`cod_periodo`),
  CONSTRAINT `nota_coducta_fk` FOREIGN KEY (`cod_estudiante`) REFERENCES `estudiantes` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `nota_coducta_fk1` FOREIGN KEY (`cod_matricula`) REFERENCES `matriculas` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `nota_coducta_fk2` FOREIGN KEY (`cod_periodo`) REFERENCES `periodos` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento

Última edición por voldemmor fecha: 01-04-2008 a las 22:59:22. Razón: cambiar el titulo
Responder Con Cita
  #2  
Antiguo 01-04-2008
Avatar de voldemmor
voldemmor voldemmor is offline
Miembro
 
Registrado: ago 2006
Posts: 232
Poder: 18
voldemmor Va por buen camino
cambiar a decimal

En ka estructura de la tabla intente cambiar el tipo de dato del campo nota de Float a Decimal.
Pero el error es el mismo.
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento
Responder Con Cita
  #3  
Antiguo 02-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
no conozco mysql, pero si declaras un Float(2,2) intuyo que como máximo, podría almacenar un valor de 99,99 ¿no? al parecer, el primer registro que se intenta insertar, tiene un valor mayor a 99 ¿puede ser?

Ya digo que sólo intuyo, porque no sé realmente como va MySql.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 02-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aparte de lo dicho por Lepe que por supuesto es lógico yo intentaría variarlo asi:
Código Delphi [-]
sql.Clear;
    SQL.Text := 'INSERT INTO nota (cod_estudiante,cod_matricula,cod_periodo,cod_materia,nota,detalle)'+
    'VALUES(:Cod_estudiante, :Cod_matricula, :Cod_periodo, :Cod_materia, :Nota, :detalle)';
    for i := 1 to  cant do
    begin
    Parameters[0].Value:=  strtoint(sgNotas.Cells[1,i]);
    Parameters[1].Value:=  strtoint(sgNotas.Cells[0,i]);
    Parameters[2].Value:=  CodigoPeriodoEvaluacion(cbxPeriodoNotas.Text);
    Parameters[3].Value:=  CodigoMateriaNombre(cbxMateria.Text);
    Parameters[4].Value:=  StrToFloat(sgNotas.Cells[3,i]);
    Parameters[5].Value:=  sgNotas.Cells[4,i];
    ExecSQL;
    end;
Con Value evito el uso del concepto del campo, bueno, asi lo hago yo.
Saludos
Responder Con Cita
  #5  
Antiguo 02-04-2008
Avatar de voldemmor
voldemmor voldemmor is offline
Miembro
 
Registrado: ago 2006
Posts: 232
Poder: 18
voldemmor Va por buen camino
Talking Voy a verlo

Bueno sobre el valor que intento ingresar , ya que yo hago las pruebas en este momento, estoy seguro que se trata de uno que esta dentro del valor (10 11,5).

Pero ahora que lo mencionan no he visto como se esta representando por delphi, ejemplo (10,000000000),O algo asi.

Voy a checarlo a ver que pasa y Probare tu modificación tambien Caral
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento
Responder Con Cita
  #6  
Antiguo 03-04-2008
Avatar de voldemmor
voldemmor voldemmor is offline
Miembro
 
Registrado: ago 2006
Posts: 232
Poder: 18
voldemmor Va por buen camino
Talking problema resuelto____ O Burlado?

Bueno gracias por los consejos.

El problema si se encontraba en la Tabla asi que probe, formateando el flotante, pero no ce si lo hice bien, creo que no porque me dio un error

Código Delphi [-]
 
ParamByName : = strtoFloat(format(%2:%2,[sgNotas.Cell[3,i]]));


La solucion o el pequeño atajo.

cambie la definicion de la tabla a su forma original

Campo nota -> Float (9,3), y asi no me da ningun error.



Bueno aunque un atajor por hoy, el chiste es que debo cumplir con el cliente.

Bye y gracias
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento
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
Problemas con funciones de manejo de string destrukthor Varios 7 11-07-2006 16:39:29
Problemas con el manejo de Indices Coco_jac Varios 2 09-05-2006 18:04:18
Problemas con el manejo de la RAM SoulSoldier C++ Builder 1 16-09-2005 00:56:00
ZTable vs ZQuery quade Conexión con bases de datos 1 01-06-2004 18:18:38
Problemas con el manejo de cookies mauriciorazquin Internet 0 21-10-2003 23:30:08


La franja horaria es GMT +2. Ahora son las 18:26:24.


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