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 21-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Question AutoCancelDetails, ¿por default True?

¡Hola a todos!

Cuando tenemos una relación maestro-detalle entre dos conjuntos de datos, al llamar al método Cancel o Delete de la tabla maestra, una de las primeras cosas que sucede es que la tabla detalle intenta guardar su registro actual en caso de que éste se encuentre en modo de edición o inserción y la propiedad Modified esté en True. He revisado el código de la VCL, descubriendo la causa de ello. Tiene que ver con el evento interno deCheckBrowseMode lanzado por los métodos mencionados, y tal comportamiento puede ser hasta cierto punto respetable y útil.

No obstante, en muchas ocasiones me ha resultado inconveniente que suceda eso. Al grado de que he llegado a escribir código como este:

Código Delphi [-]
TablaDetalle.Cancel;  { Cancelar primero el registro detalle para que no intente guardarse cuando se cancele el registro maestro }
TablaMaestra.Cancel;

Código Delphi [-]
TablaDetalle.Cancel;  { Cancelar el registro detalle para que no intente guardarse cuando se elimine el registro maestro }
TablaMaestra.Delete;

Parece algo simple, pero una regla que he aprendido de la programación es que por cada sentencia escrita aumenta la probabilidad de los problemas. ¿Qué pasa si, en lugar de uno solo, son tres los conjuntos de datos detalle de nuestra tabla maestra? Tendríamos que escribir algo como esto:

Código Delphi [-]
TablaDetalle1.Cancel;
TablaDetalle2.Cancel;
TablaDetalle3.Cancel;
TablaMaestra.Cancel;

¿Y si fuera una relación maestro-detalle triple Tabla1-Tabla2-Tabla3? Tendríamos que asegurarnos de establecer el correcto orden de cancelaciones:

Código Delphi [-]
Tabla3.Cancel;
Tabla2.Cancel;
Tabla1.Cancel;

No vayamos a poner por error primero Tabla2 y luego Tabla3 porque nos aguada la sopa.

Todo esto me ha llevado a agregar una nueva propiedad Boolean a mi componente derivado de TClientDataSet, la cual he llamado AutoCancelDetails (se aceptan sugerencias de nombres alternativos). La idea es que si esta propiedad tiene un valor de True, baste una sola sentencia para cancelar el modo de edición en todos los conjuntos de datos relacionados.

Código Delphi [-]
TablaMaestra.Cancel;

De igual forma, una sentencia como
Código Delphi [-]
TablaMaestra.Delete;
se aseguraría de cancelar el modo de edición de todas las tablas detalle.

La pregunta de los 64 GB: ¿Debe tener esta nueva propiedad un valor predeterminado de True? Esto significaría que el componente predeterminadamente tendría cierto y muy específico comportamiento que diferiría del nativo, lo cual podría darle más peso a que el valor predeterminado sea False. ¿Pero acaso no son muy pocas las situaciones donde desearíamos que un Cancel o un Delete sobre una tabla maestra se asegure de guardar un posible registro en edición de sus conjuntos de datos detalles?

¿Ustedes qué opinan? ¿Aprueban esta declaración?

Código Delphi [-]
        Property AutoCancelDetails :Boolean Read FAutoCancelDetails
          Write FAutoCancelDetails Default True;

Gracias por sus opiniones.

Al González.

Última edición por Al González fecha: 21-11-2007 a las 21:43:40.
Responder Con Cita
  #2  
Antiguo 21-11-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Al Gonzalez
¿Debe tener esta nueva propiedad un valor predeterminado de True?
Bueno, a mi parecer coincido en que tenga True como valor predeterminado, sin embargo y leyendo tu exposición (muy buena por cierto) me parece que mas que una opción debería ser una obligación.

El problema existe ya lo has comentado (por alguna razón que no acabo de digerir) ¿crees que sea recomendable tener la opción de asignarle False?

Bueno mas que una respuesta te he puesto otra pregunta, perdón pero yo como caral, soy un novato en esto que expones.....

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 21-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Pues yo la apruebo, definitivamente es algo en lo que estoy de acuerdo contigo, esta propiedad debe tener como valor predeterminado True...

Aunque aún asi no lo colocaria de caracter obligatoria, pueden haber casos en los que al usuario final le sirva tener esa caracteristica en False (En este momento no me imagino alguno, pero el caso debe existir).
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
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
alter table y default jonmendi SQL 1 10-11-2005 17:32:05
'default Character Set Iso8859_1' Io Firebird e Interbase 3 07-09-2005 17:46:19
DBCheckBox Default Kreyser Conexión con bases de datos 1 21-08-2004 17:35:55
There is no default printer currently selected gynch Impresión 2 31-03-2004 19:01:45
asignar valores por default NickName Firebird e Interbase 3 14-09-2003 12:01:43


La franja horaria es GMT +2. Ahora son las 12:19:35.


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