PDA

Ver la Versión Completa : Problema Modificar fecha BBDD


Catublipas
11-12-2015, 15:39:58
Buenas tardes chicos,

os comento mi problema que es un poco raro. Tengo una base de datos de Interbase a la cual hago una consulta a través de un DataSet, puedo modificar cualquier campo menos el de la fecha(En realidad si se modifica pero siempre inserta la misma fecha).

Para modificar la fecha hacemos click en un registro de la consulta la cual nos lleva a otra pantalla y solo podemos modificar la fecha, que es en realidad lo que único que necesito, en la pantalla de modificación tengo un DateTimePicker para seleccionar la fecha que queremos poner en el campo. Pues bien, cuando vuelvo a hacer la consulta la fecha que se ha introducido es 17/11/1858 ponga la que ponga siempre se introduce esta fecha.

Os adjunto el código del form de modificación:

RentabilidadPMForm.IBDataSet2.Close;
RentabilidadPMForm.IBDataSet2.ModifySQL.Clear;
RentabilidadPMForm.IBDataSet2.ModifySQL.Add('update FAC1 set FECHAIMPUTACION = :CODIGOFECHA1 where DOCNUM = ''000177'' AND OBRACOD = ''9999''');
RentabilidadPMForm.IBDataSet2.ParamByName('CODIGOFECHA1').AsDate:= fecha;
RentabilidadPMForm.IBDataSet2.Open;
RentabilidadPMForm.IBDataSet2.Edit;
RentabilidadPMForm.IBDataSet2.Post;

A ver si podéis ayudarme, si me falta algún detalle solo comentadmelo.

Muchas gracias por vuestra ayuda como siempre.

Un saludo!

fredo
11-12-2015, 16:56:50
Estas herrado en los conseptos... ese ModifySQL es para que se haga automatico no debes hacer nada para que haga ese update...

en teoria deberia funcionar asi...


RentabilidadPMForm.IBDataSet2.edit;
RentabilidadPMForm.IBDataSet2FECHA.asDateTime:=fecha;
RentabilidadPMForm.IBDataSet2.post;


podria variar si necesitas coomitear o no pero esa es la esencia...

Casimiro Notevi
11-12-2015, 17:00:07
¿En esa variable de nombre fecha, qué valor hay al momento de asignarla?
¿De qué tipo es el campo?

Y sobra la línea con el Open y la línea con el Edit.

ecfisa
11-12-2015, 17:12:14
Hola Catublipas.

Coincido con fredo en que es una confusión conceptual, en este enlace se explica el uso del componente TIBDataSet: http://www.intitec.com/varios/Delphi_conexion_firebird_con_ibx.pdf.

Y, como te menciona Casimiro, tiene que haber concordancia entre el tipo de la variable "fecha", el del parámetro y el de la columna de la tabla.



Si deseas usar una sentencia SQL de ese modo, deberías usar un TIBQuery:

var
qy: TIBQuery;
begin
qy := RentabilidadPMForm.IBQuery1;
qy.Close;
qy.SQL.Clear;
qy.SQL.Add('UPDATE FAC1');
qy.SQL.Add('SET FECHAIMPUTACION = :CODIGOFECHA1');
qy.SQL.Add('WHERE DOCNUM = :DOCNUM AND OBRACOD = :OBRACOD');
qy.ParamByName('CODIGOFECHA1').AsDate := fecha; // (siendo "fecha" de tipo TDate)
qy.ParamByName('DOCNUM').AsString := '000177';
qy.ParamByName('OBRACOD').AsString := '9999';
qy.ExecSQL;
end;


Saludos :)

Catublipas
14-12-2015, 09:02:57
Muy buenas chicos, perdonar la demora, dejé apartado el finde el ordenador.
Os comento:

-He probado la solución de ecfisa y me muestra el siguiente error:

Access violation at address 008814BF in module 'Program.exe'. Read of address 00000000

-En respuesta a Casimiro, el valor de la variable en el momento de asignarla es correcto, es decir, he probado a mostrar un mensaje que muestre el contenido de la fecha seleccionada con el TDateTimePicker y efectivamente toma bien el valor que he clickado, solo que al final en la base de datos se inserta el valor que os comenté 17/11/1858. Y de hecho si yo deseo modificar otro campo, como pudiera ser el OBRACOD no tendría ningún problema con la estructura que os he enseñado, pero la fecha me hace ese extraño. El tipo de dato es Date.

Muchas gracias de nuevo por vuestra ayuda :).

Un saludo!!

Casimiro Notevi
14-12-2015, 10:55:18
Ya, pero ¿la variable fecha de qué tipo es? Si es una cadena de texto y estás asignándola a un campo datetime... :rolleyes:

Catublipas
14-12-2015, 11:07:59
Perdonad chicos, resuelto con la solución de ecfisa.

Muchas gracias de nuevo chicos, sois unos cracks.

Un abrazo!