Ver Mensaje Individual
  #1  
Antiguo 16-10-2006
caramelillo caramelillo is offline
Registrado
 
Registrado: may 2006
Posts: 4
Reputación: 0
caramelillo Va por buen camino
Problema al Actualizar Valor Double

Saludos muchachos.... tengo un problemita que no he podido solucionar... Sucede que tengo un ADOQuery en el cual hago un select de todos los registros de una tabla de productos. Luego, de acuerdo a unos botones de First, Previous, Next y Last me muevo entre los registros. Tambien tengo opciones para grabar los registros (insertar y actualizar) y para eliminarlos.

Sucede que cuando yo recupero un registro (del ADOQuery) y despliego el valor de los campos de la DB en los campos del form (son campos normales no son componentes de bases de datos) todo funciona perfecto. Cuando presiono el boton para actualizar los datos me di cuenta de que si ninguno de los campos cambio su valor me daba un error diciendome: "No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó". Bueno, debido a este error tuve que comparar los valores de los campos del form con los valores de los campos de la DB para ver si habia algun cambio y entonces hacer la actualización. Lo hize y funciono perfectamente. Pero sucede que ahora me da ese mismo error cuando actualizo el campo PRECIO que es de tipo DOUBLE en la base de datos. Si quito la parte donde se actualiza este campo todo funciona perfectamente. Pero si dejo esa parte (incluyendo la parte donde comparo los valores) entonces el programa me da el error antes mencionado. Necesito su ayuda urgente con este asunto. Yo utilizo Delphi 7 y MySQL 5.0.19 y me conecto a traves de ODBC con el driver MySQL ODBC 3.51. Aqui les pongo el código de la actualización por si les sirve de algo:

Código Delphi [-]
procedure TfProductos.UpdateRecord;
var
  TmpImpuestos:integer;
begin
  if cbImpuestos.Checked then TmpImpuestos := 1
  else TmpImpuestos := 0;
  with dmDatos.qryDatos do
  begin
    if Mode = 'A' then
    begin
      if (Fields[1].AsString <> eDescripcion.Text) or
      //Si quito esta linea y la de la actualizacion funciona perfectamente
      (FloatToStrF(Fields[2].AsFloat,ffNumber,15,2) <> AnsiReplaceStr(ePrecio.Text, ',','')) or
      (Fields[3].AsString <> eCodigo.Text) or
      (Fields[5].AsString <> eImagen.Text) or
      (Fields[6].AsString <> TiposID.Strings[cbTipo.ItemIndex]) or
      (Fields[7].AsInteger <> TmpImpuestos) then
      begin
        Edit;
        Fields[1].AsString := eDescripcion.Text;
        //Si quito esta linea y la de la comparación funciona perfectamente
        Fields[2].AsFloat := StrToFloat(AnsiReplaceStr(ePrecio.Text, ',',''));
        Fields[3].AsString := eCodigo.Text;
        Fields[5].AsString := eImagen.Text;
        Fields[6].AsInteger := StrToInt(TiposID.Strings[cbTipo.ItemIndex]);
        Fields[7].AsInteger := TmpImpuestos;
        Refresh;
      end;
    end;
  end;
end;
Responder Con Cita