Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema Modificar fecha BBDD (https://www.clubdelphi.com/foros/showthread.php?t=89549)

Catublipas 11-12-2015 15:39:58

Problema Modificar fecha BBDD
 
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:

Código Delphi [-]
 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...

Código Delphi [-]
   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...rd_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:
Código Delphi [-]
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:

Código Delphi [-]
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!


La franja horaria es GMT +2. Ahora son las 23:40:20.

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