FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
set no funciona
Hola a todos, tengo el siguiente código:
La clase almacena ciertos parámetros de conexión para una BD, el tema es que necesito recorrer los campos de la clase en un bucle, por esto implemento el campo FListCampos, que es un array de TClaveValor, el problema se suscita al asignar valores a los campos a través del array. Nunca ingresa al prodedure setListCamposBD, que es el encargado de asignar lo valores, la llamada que se realiza es la siguiente:
Gracias de antemano por su ayuda. Saludos... |
#2
|
||||
|
||||
No puede declarar procedimiento o funciones dentro de un Record.
cambia: por Y dentro del constructor tienes que crear el/los objectos Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#3
|
||||
|
||||
Hola olbeup.
Mi primer impulso fué hacer exáctamente la misma observación. Pero me abstuve de decir algo por que tengo un Delphi viejito y no conozco las últimas versiones. Me puse a buscar sobre el tema y parece que ahora sí está permitido Language and Compiler Features Since Delphi 7 Debo reconocer que toma un gran parecido con la funcionalidad que en C++ tiene struct, donde la única diferencia con class es que los miembros de la primera son públicos por defecto y de la segunda lo son privados. Lo que desconozco, y sería interesante saber, si también existe la herencia entre record como existe en el caso de struct y de ser así, de qué tipo. Omnubilados saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 08-04-2015 a las 11:16:19. |
#4
|
||||
|
||||
De momento no hay herencia en tipos registro, Daniel, ni hay planes para agregarla. Aunque en algunos casos es deseable que la hubiera. Los métodos en tipos registro llevan ya algunos años, incluso pueden ser métodos de clase, es decir, que se pueden llamar sin tener una instancia (variable) del tipo en cuestión.
Cabe mencionar que, en Delphi, la visibilidad predeterminada en una clase, es Public o Published, dependiendo de la directiva $TypeInfo/$M. Me permito colocar un extracto de la ayuda: Cita:
Tu método setListCamposBD no es llamado porque en la asignación ListCampos es una expresión de lectura, no de escritura. Es decir, estás leyendo la propiedad matriz ListCampos completa (lo cual llama al método getListCamposBD), y, una vez obtenida, accedes a su elemento de la posición vIndice, el cual, como nos has mostrado, es un record, para escribir el valor de su campo Value. En breves palabras, se lee un array para luego escribir sobre uno de sus elementos. Tu diseño podría funcionar como esperas si cambias por Pero aun así, en lo personal, me seguiría pareciendo un diseño extraño y no muy óptimo. ecfisa: Hace tiempo que barajo la idea de actualizar mi licencia de Delphi 2007 a XE7, y ver la forma de cedértela. Por lo pronto intenté adquirir la actualización en diciembre, pero el distribuidor local no ha atendido mi solicitud de compra (ignoro por qué una empresa no querría vender lo que dice vender). Como sea, este comentario nace del espíritu, que estoy seguro compartimos muchos aquí (y por ello lo hago público), de que sería estupendo que contaras con una versión más nueva de Delphi, dado que eres uno de los impulsores Delphi (independientes) más esmerados de la comunidad hispana. Quizá no sales mucho en la tele, pero tus aportaciones en estos foros no son nada baladíes. Compañeros, imaginemos las contribuciones que podría hacer ecfisa si tuviera en sus manos un Delphi más actual. ¿Hacemos una cooperación? Si prefieren, y Daniel está de acuerdo, podemos tratar los detalles en privado. Saludos. Al González. |
#5
|
||||
|
||||
Cita:
|
#6
|
||||
|
||||
Buenas, a mi me funciona, copie y pege tu implementacion tal cual e hice estas pruebas:
Cuando llamo a ShowMessage me muestra el string invertido Si no te entendi mal. Uso Delphi 2010 |
#7
|
||||
|
||||
Alberto,
Cita:
Cita:
Saludos, Nelson. |
#8
|
||||
|
||||
Totalmente de acuerdo, se merece un MVP
|
#9
|
|||
|
|||
Al González:
Cita:
Saludos... |
#10
|
||||
|
||||
Hola.
Creo que son unos exagerados , aquí hay muchos que son mas merecedores de esas palabras. Pero de todos modos les agradezco mucho, leer esas opiniones, es la mejor gratificación que cualquiera desearía tener Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
||||
|
||||
Cita:
1- Estas usando un record como si fuera una clase http://www.delphibasics.co.uk/Article.asp?Name=Records 2- Estas usando metodos y funciones & propiedades que no *aportan nada* que no te da un record gratis. 3- Generando mucho codigo para algo que se resuelve con 1 array, 2 record y un par de funciones. Delphi no es Java! Puedes usar funciones, metodos y dejar de la lado la OO. Es un lenguaje "multi-paradigma", aunque obviamente esta mas enfocado al lado de la OO. Te pongo un ejemplo:
Nota lo siguiente: - No necesitas hacer create de un record. Los record son tipos "Value" like un string. Por eso son mas livianos y eficientes en memoria - Mucho codigo eliminado - Centralizado en createXXXX todo el proceso, incluyendo las validaciones. - Si tu Delphi soporta Generics, puedes usar TArray<> y te ganas un constuctor + todo lo que te dan las clases genericas, lo que te ahorra otra clase En resumen: Usa clases cuando necesites la funcionalidad de clases.
__________________
El malabarista. Última edición por mamcx fecha: 08-04-2015 a las 23:02:23. |
#12
|
|||
|
|||
En un principio TClaveValor era un siempre record sin propiedades, pero al asignarlo como campo a la clase me enviaba el siguiente error:
y por tal motivo tuve que transformarlo a su forma actual. Respecto a la conveniencia de utilizar registros en vez de clases, sin duda lo hago cuando el caso lo amerita, pero en este caso en particular necesito encapsular los datos contenidos y realizar algunas tareas con ellos, cosa que puedo hacer con funciones como me sugieren, pero prefiero que todo quede dentro de una clase, ya que dichas funciones solo sirven al tratamiento de dicha clase... Saludos... |
#13
|
|||
|
|||
Bueno finalmente mi diseño quedo de la siguiente forma:
Para ser llamado asi:
Un comentario acerca de lo dicho por mamcx Cita:
Creo que mamcx tiene razón en varios de los comentarios que hace, referente a simplificar el diseño utilizando solo record y funciones, ahora la pregunta es cuando programar O.O y cuando programar procedimientalmente... En mi caso mi aprendizaje fue enfocado a este ultimo, pero he ido cambiando de paradigma, por las enormes ventajas que representa programar O.O. herencia, encapsulacion, etc... Quizas utilizar lo mejor de ambos modelos...???? Saludos... |
#14
|
||||
|
||||
Yo no me voy a cansar de decirlo
Una base de datos SQLite, con una simple tabla
Mayor simpleza, potencia y seguridad es imposible Saludos |
#15
|
||||
|
||||
Cita:
Pues a mi no me funciona y utilizo Delphi 7 sobre el enlaze Language and Compiler Features Since Delphi 7 que has puesto. Cita:
Me da error a partir del record en todas las líneas. Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#16
|
||||
|
||||
olbeup,
Cita:
Cita:
Revisa este código: El código anterior compila en Delphi 2010 pero no en Delphi 7 por todo lo expuesto anteriormente. Espero sea útil Nelson. |
#17
|
||||
|
||||
Aclarado,
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
esta function no me funciona en XE2 y si funciona en D6 | darkbits | Varios | 1 | 06-11-2012 17:00:45 |
UDF no funciona en xp | GustavoCruz | Firebird e Interbase | 15 | 04-10-2011 12:07:00 |
funciona bien en windows 7 64b pero en XP no funciona | ASAPLTDA | Varios | 5 | 06-05-2011 16:24:50 |
$L .Obj no funciona | rastafarey | Varios | 2 | 09-01-2009 19:47:09 |
like no funciona ! | dmasson | Conexión con bases de datos | 9 | 23-03-2004 14:10:50 |
|