Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2007
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Question Componente para guardar el valor estable de BD

Hola, viejos

Soy nuevo (en Delphi y en el foro) y no sé si estoy usando el procedimiento adecuado al iniciar este hilo; pero, si es el caso, ya me corregiréis

Estoy creando un componente basado en DBEdit para conservar el último valor estable de la BD (tras consultar/grabar, "garantía" de que aún se tiene un valor actualizado). Para ello, añado una propiedad "OldText" cuyo valor podrá ser cotejado con el que actualmente haya en edición.

El caso es: ignoro cómo hacer que dicho valor se actualice desde el propio componente en el momento de la consulta. Así, podría ahorrar tener que invocar a un método por cada campo de cada formulario con cada botón que acceda a la BD.

No sé si me he explicado bien... Gracias por vuestro tiempo y un abrazo
Responder Con Cita
  #2  
Antiguo 30-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Esto no lo entiendo:
Cita:
Empezado por Garry
para conservar el último valor estable de la BD (tras consultar/grabar, "garantía" de que aún se tiene un valor actualizado)
¿quieres que después de guardar un registro, aún conserve el valor anterior?

El TDBEdit tiene un procedimiento protegido llamado Change, si estas heredando de dicho componente, puedes redefinir (gracias Al González) su comportamiento con la directiva override y copiar el texto antes de cambiarlo.

Como digo, no comprendo la situación en que quieres hacer eso. Existe la posibilidad de trabajar con Cache Updates, de forma que el usuario puede hacer un post de un registro, pero que no se grabe directamente a la Base de datos, estos cambios pueden afectar a varias tablas sin problemas.

Al realizar un ApplyUpdates de los dataset, es cuando tienes oportunidad de grabar los cambios o volver al estado anterior.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 05-12-2007
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Red face Perdón por tardar tanto en responder...

Cita:
Empezado por Lepe Ver Mensaje
¿quieres que después de guardar un registro, aún conserve el valor anterior?
No sólo después de guardar, sino cada vez que en el componente haya un "valor estable": tengo botones Guardar, Limpiar y Consultar, tras cuyas pulsaciones hay lo que llamo "valor estable" porque los campos aún no han sido editados: o se parte de valores vacíos (botón Guardar), o de valores actualizados (los otros botones).

Heredo del TDBEdit, sí, pero entiendo que no me sirve el evento Change porque sólo toma el valor inicial antes de empezar a editar por primera vez, no ayudando a conservar el original en ediciones sucesivas del campo.

Quiero que el componente conserve automáticamente lo que había cargado (valor vacío o valor de BD). Esto sirve, por ejemplo, para decir al usuario algo como: "Todavía no has grabado, ¿seguro que quieres consultar?".
Espero haberme explicado mejor, no sé si queda claro

Lo de Cache Updates suena interesante (ya lo estudiaré), pero no para ahora porque me parece que sólo vale para postergar la grabación. Y, como intentaba aclarar, pretendo conservar el dato consultado inicialmente para evitar tener que volver a consultarlo.

Por cierto, gracias, Lepe, aunque todavía no lo haya resuelto. Un saludiño desde Coruña...

Última edición por Garry fecha: 11-12-2007 a las 13:18:27. Razón: Olvido de agradecimiento
Responder Con Cita
  #4  
Antiguo 05-12-2007
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Exclamation Corrección

Cita:
Empezado por Garry Ver Mensaje
...o se parte de valores vacíos (botón Guardar)...
Perdón... quería decir botón Limpiar

Última edición por Garry fecha: 05-12-2007 a las 20:21:04. Razón: Corrección
Responder Con Cita
  #5  
Antiguo 11-12-2007
Avatar de Garry
Garry Garry is offline
Miembro
 
Registrado: nov 2007
Posts: 60
Poder: 17
Garry Va por buen camino
Voy a simplificar un poco

Lo que pretendo, por ahora, es que cada campo consultado guarde automáticamente el valor cargado en una nueva propiedad (OldText) de mi nuevo componente (TGDBEdit).

Tras Consultar y Guardar, se actualiza dicha propiedad con lo cargado; al Limpiar se actualiza con el valor vacío.

Hasta luego y gracias de nuevo por la ayuda...
Responder Con Cita
  #6  
Antiguo 11-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Perdón por tardar en contestar, al parecer se me ha perdido este hilo.

¿Acaso no hace eso ya los controles?

Si estoy editando un registro y quiero volver al valor anterior, uso Dataset.Cancel y esto volverá el registro al último valor estable.

Si doy a guardar (Dataset.Post), el nuevo valor pasa al valor del campo y el viejo se pierde.

El botón Limpiar, correspondería a la acción Dataset.Insert que traerá los valores por defecto de cada campo (establecidos en la base de datos como valores por defecto) y asignará sus valores a los DBEdits.

Para saber si un campo ha sido modificado en el DBEdit, tienes la propiedad Modified del TField.

Creo que verías más claro el asunto usando un TDBNavigator, porque te deja cancelar los cambios y volver a lo que tu llamas "valores estables".

Edito: El botón consultar tendría este código:
Código Delphi [-]
Msg := EmptyStr;

if Dataset in EditModes then // posiblemente ha sido modificado la edición
 for i:= 0 to dataset.Fields.Count -1 do
   if dataset.Fields[i].Modified then
     Msg:= msg + '- '+ dataset.fields[i].FieldName + #10#13;

  if Msg <> EmptyStr then 
  begin 
    Msg := 'Los siguientes campos han sido modificados:'+ #10#13 + Msg + ' ¿desea descartar los cambios realizados?';
    if Application.Messagebox(msg, 'Advertencia', mbyesno) = idyes then
    begin
      Dataset.Cancel;
      // consultar
    end
    else  // no hacer nada, el registro quedará en edición con los cambios realizados, dando
         // la posibilidad de guardar o cancelar.
end;

Si expongo todo esto, es porque dices que eres "nuevo en delphi" y puedes estar reinventando la rueda.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 11-12-2007 a las 14:50:16.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular un valor antes de guardar en una tabla FGarcia Varios 11 21-11-2007 05:22:07
Guardar el valor de un EDIT en un fichero de texto creus Varios 2 16-01-2007 23:02:56
Guardar valor en una variable... hademon SQL 1 14-09-2005 17:16:57
Algun componente para guardar jpg en mysql? delphivan Gráficos 1 30-05-2005 16:48:08
Algun componente para solo listar el valor de un campo? nefy OOP 15 22-11-2004 14:01:36


La franja horaria es GMT +2. Ahora son las 15:47:38.


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