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
(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;
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;