![]() |
Crear campos calculados en consulta
Hola a Tod@s:
Bien la situación del día de hoy es la siguiente: Estoy trabajando con delphi 6 y como base de datos M$ Acce$$, quiero adicionar una serie de campo calculados en una consulta, ésto son de diversos tipos, la pregunta es como la puedo hacer. agradezco de antemano el tiempo dedicado y la colaboración que me puedan prestar. gertorresm Colombia |
Si los calculos no son demasiado complejos los puedes especificar en la misma consulta.
Por ejemplo:
Espero te sirva, de lo contrario da un ejemplo de los calculos que requieres. Saludos |
Crear Campo Calculado
Gracias cloayza por tu tiempo la idea que tengo es la siguiente
pero poder a su vez indicar en la función el tipo de dato que ha de manejar el campo ej. TStringField,TSmallIntField, TIntegerField, TBooleanField, TFloatField, TCurrencyField, TDateField, TTimeField,TDateTimeField, TVarBytesField, TBlobField, TMemoField, TWordField, TBCDField,TBytesField TGraphicsField, TAutoIncField,TNumericField pero no que tipo de dato colocar en los párametros de entrada, lo que denomina pTipoCampo, es decir pTipoCampo que tipo de dato debe pedir, ya que a partir de dicho parámetro de entrada debo platear el constructor tal como lo vez de la línea de código
muchas gracias de antemano gertorresm Colombia |
Hola. ¿Te refieres a algo parecido a esto?
|
Esta solución es buena, pero tiene una carencia: no tiene en cuenta que ya pueden existir campos en el dataset.
En mi caso, suelo añadir campos calculados a datasets "reales" que ya contiene campos persistentes. Un ejemplo es construir un mensaje de estado a partir de los valores de ciertos campos, y así mostrar en un grid directamente ese mensaje. En ese caso, hay que respetar los campos existentes y luego añadirle los nuevos calculados:
Nota: la función GetEnumName requiere uses TypInfo; Y llamo a esa función en el evento BeforeOpen:
Espero que ayude. |
Es suena interesante, voy a probarlo ahora mismo. Pero por qué dices es de:
//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? Saludos a todos. |
Cita:
Respecto a lo de llamar a la función en el evento AfterOpen, es cierto que parece lo más obvio, pero cuando hice mis pruebas daba problemas, así que cogí la mecánica de hacerlo en Before. Te animo a que lo pruebes, y si se puede hacer, lo compartas con nosotros. |
Tema Cerrado
Muchas gracias a tod@s:
Con sus aportes ya arme la función que se requeria Agradezco de antemano su tiempo y aporte gertorresm colombia |
Al parecer el orden de asignacion en delphi 2010 afecta por lo que actualizo la funcion
|
Agradecemos tu colaboracion y tu actualizacion...:)
Nada más solicitarte que para que el código se vea bonito, la próxima ves utilices las etiquetas de código disponibles para una mejor estética.;), sin olvidar tambien que le dés una buena leida a nuestra Guía de Estilo si no lo has hecho aún...:) Saludos.. y muchas gracias por tu colaboracion....:) |
Hola.
Me gustaría agregar que podemos prescindir del Case empleando la variable global DefaultFieldClasses:
Respondiendo a roboflekto: Cita:
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. |
La franja horaria es GMT +2. Ahora son las 03:54:59. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi