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 26-05-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
no guarda los datos en la tabla

Hola,

Tengo una aplicación, hecha en delphi 6 con una BD en IB7.

Una de las ventanas de mi aplicación está compuesta por un DBGrid, y tres botones, que son, nuevo, editar y borrar.

Editar y nuevo, me abren una ventana, con los mismos campos que aparecen en el dbgrid.

Los botones Nuevo y borrar me funcionan perfectamente. El problema viene cuando intento editar.

Esto es,Inserto un nuevo registro(Botón "Nuevo"), dejando el campo de fecha vacío (tipo date, sql3),y luego edito ese campo, (Botón "Editar"), e introduzco una fecha válida, que veo como aparece en los campos correspondientes de mi DBGrid, y al pulsar aceptar, (guardar) RESULTA QUE NO ME GUARDA LAS FECHAS.

Sin embargo, cuando lo que no relleno con datos, es un campo Varchar, al editarlo para añadirle ese dato, me lo guarda sin problemas.

Vamos, que el código de post etc, que tiene asociado el botón editar, parece que tiene que estar bien, pues de otro modo, no me guardaría tampoco el dato que introduzco en el campo varchar.

Lo más curioso del tema es que, si al insertar el registro inserto datos en el campo fecha, y luego quiero editar ese campo fecha, ENTONCES SI ME LO GUARDA!!!!!

El código para el botón editar es:

Código Delphi [-]
     
     screen.cursor := crHourGlass;
     FrmVtos := TFrmVtos.Create(Self);
     Screen.cursor := crDefault;
     TRY


        FrmDModule.TbVtosVna.Insert;
        FrmVtos.ShowModal;

        
        If FrmVtos.modalresult = mrOk Then Begin
          //NOS ASEGURAMOS QUE LA FECHA INICIAL ES INFERIOR A LA FINAL
          if FrmDModule.TbVtosVnaFECHAINI.value < FrmDModule.TbVtosVnaFECHAFIN.value Then Begin
             FrmDModule.TbVtosVna.Post;
             FrmDModule.TbVtosVna.Close;
             FrmDModule.TbVtosVna.Open;

          end
          else begin
             Application.MessageBox( 'La Fecha Inicial debe ser menor que la Final',
                                'Atencion', mb_ICONEXCLAMATION);
             FrmDModule.TbVtosVna.Cancel;
          end;


        End  //FIN DE if salimos con OK del modal
        Else Begin
          FrmDModule.TbVtosVna.Cancel;
        End;
     FINALLY
        FrmVtos.Free;
     END;

¿tal vez sea algo relacionado las propiedades que tengo para ese campo en esa tabla? Aparentemente está todo bien. ¿Alguna Idea?

Os agradeceré cualquier orientación que me podais dar, por que estoy algo desesperada con este tema.

Muchas gracias a todos, por todo,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 26-05-2004 a las 17:51:10.
Responder Con Cita
  #2  
Antiguo 26-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking Oye

Oye Gini

Que componente estas usando para meter, borrar y editar

si estas usando un TIBDataSet entonces fijate si en su propiedad de EditSQL tienes el campo Fecha declarado si no pues ponlo...
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #3  
Antiguo 27-05-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola,

lo que tengo en Edit SQL es:

Código SQL [-]
select CODVTO, DESCRIPCION, NUMGRUP, FECHAINI, FECHAFIN
from VTOS
where (NUMGRUP=:NUMGRUP)
and (CURRENT_DATE between FECHAINI and FECHAFIN)
order by fechaini desc


en Insert SQL tengo:
Código SQL [-]
insert into VTOS
  (CODVTO, DESCRIPCION, NUMGRUP, FECHAINI, FECHAFIN)
values
  (:CODVTO, ESCRIPCION, :NUMGRUP, :FECHAINI, :FECHAFIN)

y en modfySQL tengo:


Código SQL [-]
update VTOS
set
  CODVTO = :CODVTO,
  DESCRIPCION = ESCRIPCION,
  NUMGRUP = :NUMGRUP,
  FECHAINI = :FECHAINI,
  FECHAFIN = :FECHAFIN
where
  CODVTO = :OLD_CODVTO and
  NUMGRUP = :OLD_NUMGRUP and
  FECHAINI = :OLD_FECHAINI




Si veis algo, os agradeceré me lo comenteis.

Muchas gracias a todos, por todo

virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #4  
Antiguo 27-05-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
Talking ¿Será que aqui esta el error?

Si lo que tu quieres es modificar el dato debes de usar Edit

Estas escribiendo :

Código Delphi [-]
TRY
   FrmDModule.TbVtosVna.Insert;
   FrmVtos.ShowModal;

y debe de ser

Código Delphi [-]
TRY
   FrmDModule.TbVtosVna.Edit;
   FrmVtos.ShowModal;
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #5  
Antiguo 28-05-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola,


Si, bueno, disculpa mi torpeza, ese es el código que tengo para el botón NUEVO, (insert), no para el botón EDITAR, (Edit), que es el que pongo a continuación:

Código Delphi [-]
     iF FrmDModule.TbVtosVna.RecordCount < 1 tHEN beGIN
      //si no hay registros salimos, pues no hay nada que editar
        showmessage('No hay registros para editar');
        Exit;
     eND
     eLSE bEGIN //Si hay registros,
       screen.cursor := crHourGlass;
       FrmVtos := TFrmVtos.Create(Self);
       Screen.cursor := crDefault;
       TRY
         FrmDModule.TbVtosVna.Edit;
         
         FrmVtos.ShowModal;
         if FrmVtos.modalresult = mrOk then begin
           FrmDModule.TbVtosVna.Post;
           FrmDModule.TbVtosVna.Close;
           FrmDModule.TbVtosVna.Open;
         end
         else begin
           FrmDModule.TbVtosVna.Cancel;
         end;

       FINALLY
         FrmVtos.Free;
       END;
     eND;


De todos modos, ten en cuenta, por si sirve de ayuda, que cuando edito un campo de texto, que nunca ha tenido datos, me los guarda sin problemas, lo que no me deja es guardar los cambios tras editar un campo de tipo date. Y que si edito un registro que ya tiene fechas, y las cambio, eso también me lo hace bien.

Por eso no me parece tanto un problema con .edit o .insert, sino, tal vez, con el propio campo de fechas o algo relaccionado con el.


Muchas gracias por la ayuda.
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 28-05-2004 a las 12:30:40.
Responder Con Cita
  #6  
Antiguo 31-05-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola a todos,

Siento que tal vez he sido un poco densa explicandome. Intentaré aclararme un poco:

Esta ventana se encarga de insertar, editar y borrar datos
en una tabla.

Los problemas los tengo al editar y modificar campos
de tipo date.


Comparto la misma ventana para la inserción y la edición
de los datos, (ventana insertar/editar).
Dicha ventana tiene unicamente tres campos:
descripción, de tipo varchar,
fecha Inicial de tipo date,
fecha final de tipo date.

y dos botones: Aceptar, (devuelve modal result OK) y
Cancelar, (devuelve modal result Cancel).


Voy haciendo pruebas con los datos:

1)Inserto un nuevo registro --> Se me muestra la
ventana insertar/editar. Inserto datos sólo en los
campos date, dejando vacio el de descripcion.
acepto, y se guardan los datos.

Una vez hecho esto, edito ese mismos registro.
Me muestra la ventana insertar/editar.
Añado datos en el campo que antes dejé vacío,(nul),
esto es, descripcion. Doy a aceptar y me lo guarda.


2)Esta vez me situo en un registro antiguo, de los que
nunca han tenido datos en fechaini y fechafin
,
siempre han estado vacios o nulos
Edito dicho registro, me muestra la ventana de
insercion/edicion, pidiendome datos para los tres campos.

Añado datos en los campos que antes eran nul,
esto es, fecha inicial y fecha final, doy a aceptar y
NO ME LOS GUARDA.

==> Conclusión, no me deja modificar un campo que era
null si éste es de tipo date


3)Inserto un nuevo registro --> Se me muestra la
ventana insertar/editar.
Inserto datos esta vez sólo en el campo descrición,
dejando vacios los de fecha, y acepto.


Una vez hecho esto, edito ese mismos registro.
Me muestra la ventana insertar/editar.
Añado datos en los campos que antes dejé vacío. esto es,
fecha inicial y fecha final, doy a aceptar y NO ME LOS
GUARDA.

4) Edito un registro que tiene datos en los campo fecha
, me muestra la ventana insertar/editar, modifico las
fechas, doy a aceptar, y me guarda las modificaciones
.

==> Conclusión sólo me da problemas para modificar
campos date que inicialmente estaban vacíos o es null.


Este es el código SQL que tengo para ModifySQL del
IBDataSet:

Código SQL [-]
update VTOS
set
  CODVTO = :CODVTO,
  DESCRIPCION = ESCRIPCION,
  NUMGRUP = :NUMGRUP,
  FECHAINI = :FECHAINI,
  FECHAFIN = :FECHAFIN
where
  CODVTO = :OLD_CODVTO and
  NUMGRUP = :OLD_NUMGRUP and
  FECHAINI = :OLD_FECHAINI

este el que tengo en el SelectSQL

Código SQL [-]
select CODVTO, DESCRIPCION, NUMGRUP, FECHAINI, 
FECHAFIN
from VTOS
where (NUMGRUP=:NUMGRUP)
and (CURRENT_DATE between FECHAINI and FECHAFIN)
order by NUMGRUP, CODVTO,  fechaini

esto es lo que tengo en insertSQL:
Código SQL [-]
insert into VTOS
  (CODVTO, DESCRIPCION, NUMGRUP, FECHAINI, 
FECHAFIN)
values
  (:CODVTO, ESCRIPCION, :NUMGRUP, :FECHAINI, 
:FECHAFIN)

El código asociado al botón que me inserta un nuevo registro es:

Código Delphi [-]
//==Procedure que genera un nuevo vencimiento en TbVtos
procedure TFrmPagos.BitBtn2Click(Sender: TObject);
Var FrmVtos : TFrmVtos;
begin
     screen.cursor := crHourGlass;
     FrmVtos := TFrmVtos.Create(Self);
     Screen.cursor := crDefault;
     TRY


        FrmDModule.TbVtosVna.Insert;
        FrmVtos.ShowModal;

        
        If FrmVtos.modalresult = mrOk Then Begin
             FrmDModule.TbVtosVna.Post;
             FrmDModule.TbVtosVna.Close;
             FrmDModule.TbVtosVna.Open;
        End  //FIN DE if salimos con OK del modal
        Else Begin
          FrmDModule.TbVtosVna.Cancel;
        End;
     FINALLY
        FrmVtos.Free;
     END;
end;

y el que tengo asociado al botón editar es:

Código Delphi [-]
       screen.cursor := crHourGlass;
       FrmVtos := TFrmVtos.Create(Self);
       Screen.cursor := crDefault;
       TRY
         FrmDModule.TbVtosVna.Edit;
         
         FrmVtos.ShowModal;
         if FrmVtos.modalresult = mrOk then begin
           FrmDModule.TbVtosVna.Post;
           FrmDModule.TbVtosVna.Close;
           FrmDModule.TbVtosVna.Open;
         end
         else begin
           FrmDModule.TbVtosVna.Cancel;
         end;

       FINALLY
         FrmVtos.Free;
       END;

Espero que ahora esté más claro cual es mi problema.

Gracias de ante mano a todos,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
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


La franja horaria es GMT +2. Ahora son las 05:15:32.


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