Ver Mensaje Individual
  #11  
Antiguo 01-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 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
Hola.

Me gustaría agregar que podemos prescindir del Case empleando la variable global DefaultFieldClasses:
Código Delphi [-]
// Tipo es una constante ftXXX
If DefaultFieldClasses [Tipo] <> Nil Then
  NuevoCampo := DefaultFieldClasses [Tipo].Create (DataSet)
Else
  // error

Respondiendo a roboflekto:
Cita:
Empezado por roboflekto Ver Mensaje
//lógicamente, dependerán de la bbdd que uses
???
¿No se trata de campos calculados, es decir que no están en la base de datos?
y otra cosa: ¿por qué en el evento BeforeOpen? ¿No se puede usar en el AfterOpen?
Más bien dependerá de los tipos de campos que soporte el componente conjunto de datos en cuestión.

Es más adecuado BeforeOpen que AfterOpen, para que al abrirse el conjunto de datos éste destine espacio en los buffers de registros para los nuevos campos calculados. De hecho hay una validación en la clase TField que impide agregar un nuevo campo a un conjunto de datos abierto.*

Saludos.

Al González.

*Off topic:
Tal validación puede ser burlada para crear campos calculados que no consuman memoria en los registros. Comento esto porque a alguien puede resultarle interesante como para abrir otro tema al respecto.
Responder Con Cita