FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Copiar informacion de un Tdataset a otro Tdataset
Primeramente Hola a todos los de foro..
Tengo un problemita creo yo.. sucede que estoy trabajando en una aplicacion en delphi en donde todo lo manejo por codigo.. El problema es el siguiente: quisiera saber como copiar los campos y la informacion que contienen de un Tdataset a otro Tdataset??.. Trabajo en Delphi 2007.. Agradeceria mucho a quien me ayudara en esto ya que me urge un poco. Tengo este metodo.. pero no me permite hacer el Open .. me manda un error de Abstract Error.
Gracias.. y Saludos¡¡ Última edición por joelphi fecha: 19-02-2009 a las 07:35:24. |
#2
|
||||
|
||||
Toma en cuenta que la clase TDataSet es la clase base de todos los datasets como TTable, TQuery, TIBTable, TADOTable, TADODataSet, TSQLDataSet y un muy largo etcétera. Como tal, implementa lo más general pero delega a los descendientes gran parte de la funcionalide específica de cada motor de bases de datos. Esto significa que muchos métodos de TDataSet son abstractos (directiva abstract), es decir, métodos que sólo se declaran pero no se implementan (pues son los descendientes quienes lo hacen).
Por ejemplo, DataSet.Open, si bien no es abstracto, eventualmente llama a InternalOpen, que sí lo es. La consecuencia de lo dicho arriba es que la clase TDataSet no está para usarse, no puedes crear objetos de esa clase. ¿Cómo solucionar tu problema? Pues en realidad no sabemos cuál es el problema. Es decir, tendrías que comentarnos cuál es el objetivo que persigues, qué pretenderías hacer con la copia del DataSet, para así poder orientarte mejor en como resolverlo. // Saludos |
#3
|
||||
|
||||
Gracias..
Hola¡¡
Antes que nada Gracias por su ayuda.. Bueno.. el problema es el siguiente: Sucede que tengo una aplicacion en donde creo todo mediante codigo (en runtime) en D2007 y uso como SMBD firebird 2.0... Tengo una clase conexion en donde tengo 1 metodo que utilizo para las consultas.. Ahora en un Form tengo 6 LookupCombobox en donde tengo que vaciar las 6 diferentes consultas respectivamente.. pero hay un problema, se vacia la misma consulta a todos los Lookupcombos.. siempre la ultima consulta. Ya probe los ClienDataset y provider y sucedio lo mismo, por eso es que me atrevi a hacer ese metodo.. Lo que persivo es vaciar los datos al los LookupCombobox's y para eso debo retener informacion en memoria P/e en 6 TDataset's .. pero me encontre con ese problema.. Pido su ayuda ya que soy Jr en esto.. Saludos¡¡ |
#4
|
||||
|
||||
Pero entonces, si quieres manejar seis consultas distintas, ¿por qué copiar el contenido (registros) además de la estructura?
Cita:
1. ¿Qué componentes de acceso a datos estás utilizando? 2. ¿Cuál es en sí la consulta SQL? 3. ¿Qué hace que los seis data sets sean diferentes? 4. ¿Cómo vacías esa información a los controles lookup combo box? Un saludo. Al González. |
#5
|
||||
|
||||
Componentes que Utilizo..
Utilizo una clase de coneccion y Objetos Como de FibPlus
-TpFIBDatabase -TpFIBQuery -TpFIBDataSet -TpFIBTransaction
* Son seis consltas a diferentes tablas.. Eso hace diferente las consultas.. *y para el vaciado es asi: Un ejemplo.
NOTA: Utilizo en patron singleton para apuntar a la misma memoria pero solo con la clase Conexion.. Espero y Me ayuden ya que llevo varios dias tratando de solucionar este problema.. Gracias¡¡ |
#6
|
||||
|
||||
No es como yo lo haría, pero así como dentro de TConexion.Consultar creas un TDataSource, me parece que podrías crear también el "TpFIBDataset" que asignas a dicho TDataSource.
Pero debes asegurarte de destruir ambos objetos cuando ya no se necesiten (por ejemplo, al destruir o cerrar el formulario donde están los TcxLookupComboBox). Por otro lado, te aconsejo revisar la manera en que manejas las excepciones dentro de TConexion.Consultar. Como lo has puesto no ayuda en nada. Cuando modifiques ese método usa un Try-Except para liberar cualquier objeto que haya creado la rutina, ya que ésta terminará de manera anormal. "Re-elevar" la excepción ("Raise;") está bien cuando antes de esa instrucción haces los "Free" que se ameritan (si no hay nada que "cerrar", liberar o validar, una reelevación no tiene sentido). Y cualquier instrucción detrás de Raise (como ese "Exit") siempre es innecesaria. Entiendo que eres novel, como humildemente te declaras, pero con mayor razón resulta imperativo que te animes a estudiar concienzudamente algo más sobre el manejo de memoria, la POO y los bloques Try de Delphi. No dudes en abrir nuevos hilos en Club Delphi para exponer las dudas que te vayan surgiendo. Trataremos de ayudarte en base a nuestra capacidad de tiempo y conocimiento. Y siempre atrévete a leer la ayuda (aunque a veces sea "escasa" o esté en inglés). Quizá tardes una hora en entender un párrafo de 10 líneas (como me sucedió a mí muchas veces), pero la impronta que eso dejará en ti no tendrá precio. Saludos. Al González. Última edición por Al González fecha: 19-02-2009 a las 21:09:44. |
#7
|
||||
|
||||
Gracias..
Hola¡¡
Gracias.. Por la ayuda.. me quedo en claro el objetivo.. que estudie mas y pida ayuda menos... Espero dar una respuesta asi algun dia Sr. Gonzalez.. Estudiare mas.. y gracias nuevamente. |
#8
|
||||
|
||||
No señor, creo que lo ha tomado por otro lado.
He comenzado diciéndote cómo solucionarlo, y luego invitándote a seguir exponiendo tus dudas para ayudarte. No comprendo tu comentario. En fin, espero se aprecie esto de manera más justa y veamos más tarde cómo llevas avanzado este caso. Reitero: no dudes en preguntarnos y pedir ayuda si te atoras con algo. Saludos. Al González. Última edición por Al González fecha: 19-02-2009 a las 22:00:47. |
#9
|
||||
|
||||
Creo que no me explique..
Tiene razon Sr. como le dije soy jr, y ademas soy estudiante creo que su consejo es muy claro para mi.. y eso lo que hare; estudiar lo que me dijo. y leer todo lo que se me ponga enfrente referente a delphi y poo..
Asi que por eso el comentario con todo respeto.. Tiene razon en los errores.. me gustara que viera completa la clase .. si tuviera tiempo.. |
#10
|
||||
|
||||
OK (este delirio paranoide mío ).
¿Cómo ves esto de modificar TConexion.Consultar para que dentro de él se cree también un objeto TpFIBDataSet? Así como haces el TDataSource.Create, también podrías hacer un TpFIBDataSet.Create. Lo cual se conoce como crear una instancia de objeto. Así podrías conseguir que exista un nuevo y distinto conjunto de datos (data set) con cada llamada al método TConexion.Consultar. Ya que de otra manera creas distintos TDataSource, pero todos "apuntando" al mismo conjunto de datos (razón por la que la última consulta realizada aparece en todos los LookupComboBox). |
#11
|
||||
|
||||
Ok..
Perfecto Sr..
Pero antes debo decirle que en el constructor de la clase creo el Objeto pFIBDataset.. y cada vez que uso Tconexion.Consultar().. solo lo reuso.. pero apuntado ala misma direccion de memoria.. lo mejorare el Metodo con lo que me explico .. Gracias nuevamente Sr.. Trabajare en ello.. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Componentes que heredan de TDataset | noob | Conexión con bases de datos | 1 | 14-10-2008 16:41:00 |
TDataSet,TDataSource,TclientDataSet | teote | Conexión con bases de datos | 1 | 17-07-2008 16:52:31 |
Paso de parámetros a TDataset | arturom | Firebird e Interbase | 9 | 04-04-2008 18:04:03 |
TDataSet Delphi Lite 10 | JoseAntonio | Conexión con bases de datos | 2 | 24-02-2007 05:00:57 |
creando componente con Tdataset | Descendents | OOP | 4 | 12-01-2004 21:39:04 |
|