FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Trabajar con DATASET Manualmente
Hola amigo del foro me gustaria saber insertar,eliminar,Editar atraves de un dataset en mi caso utilizo los componentes Zeos (TZQuery)para hacerlo,lo he hecho siempre utilizando las funcionalidades del componente TDBNavigator pero me gustaria hacerlo yo manualmente y no utilizando ya sea DBEdit o DBGrid sino pasarle los registro yo mismo.
Para serles franco siempre he tenido duda de como hace el DataSet internamente para insertar,eliminar,editar,seleccionar, los regitros en BD ya que cuando lo haces utilizando un DBNavigator que a su ves utiliza los metodos que tiene el DataSet como Insert,Edit,Delete,etc, nosotros ni siquiera hacemos consultas SQL si no que estos propio metodos ya lo hacen por ti, y esa es my duda ¿De donde sacan los datos para guardarlos?¿Tienen acaso variables auxiliares que utilizan ? ¿Si es asi sera que puedo acceder a estas variable para que yo mismo les pueda asignar valores y luego trabajar con ellos? Espero que me ayuden a hacerme entender este proceso. Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#2
|
||||
|
||||
Hola rgstuamigo,
¿Podrías aclarar mejor tu duda? No termino de comprender el motivo por el cual deseas implementar tus propios Insertar, Editar, etc que ya ofrece el DataSet (al menos eso es lo que entiendo de tu post). El DBNavigator lo que hace internamente llamar a los métodos Insert, Edit, etc.. del DataSet asociado. Por otro lado el TDataSet mantiene un "buffer" con los datos. Los métodos aprovechan ese Buffer para moverse por los "registros" y aplicar las funciones necesarias. Luego, cuando es necesario los datos de dicho Buffer se envían al motor para confirmar la acción. De manera simple así es como funciona. Por otro lado, si lo que estás buscando es acceder a los registro eso se puede hacer de muchas formas. Todo descendiente de TDataSet (TTable, TQuery, TIBTable, TADOTable, etc) cuenta con métodos y propiedades para acceder al registro actual:
Y si hacemos uso de campos persistentes algo como esto:
Ahora para moverse de un registro a otro se cuenta con Next, Prior, Last, First. Si tu duda pasa por acceder los registros, y campos se procede de este modo. Sería útil que puntualices y afines mejor tu duda. Por cierto: no se debería hacer uso de TDataSet sino de los descendiente de éste. Cada descendiente ofrece los mecanismos adecuados para trabajar de forma adecuada. TDataSet solo es la clase abstracta. Saludos, |
#3
|
||||
|
||||
Gracias Delphius por responder,
Cita:
Pero haber me voy a explicar un poquito mejor.con esta preguntita. ¿Como podriamos hacer para insertar (utilizando el metodo Insert del Dataset) datos en la BD pero sin utilizar otros componentes, sino hacerlo todo por codigo.? no se si podrias hacerme un ejemplo.esa es mi duda.....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#4
|
||||
|
||||
Cita:
La verdad es que ahora te entiendo menos que antes. ¿A qué viene todo ésto? ¿Evitarse componentes data-wares? Si la respuesta es afirmativa al último interrogante es muy simple: Empleando los métodos y propiedades que te he comentado antes. Los componentes data-ware son "opcionales". Si haces uso de ellos bien, sino también. Lo que pasa es que esos componentes te facilitan las cosas, enganchando todo en ejecución. Por código, a mano es otro tema. ¿Ejemplo? Pues a mi se me ocurre emplear un TQuery o uno análogo a un Query, por ejemplo: TIBQuery.
Me gustaría que seas más descriptivo en tu caso. Cuanto más nos sepas decir sobre tu duda, problema, inquietud (y por sobre todo que componentes y que motor de base de datos usas) te podremos ser de ayuda. Repito nuevamente: NO se debe usar TDataSet, sino los descendientes de éste. Saludos, |
#5
|
||||
|
||||
Bueno es lo mismo que hago asi como lo estas haciendo , a lo que me referia era a que como hace el dataset para insertar los registros utilizando el metodo Insert ¿De donde saca los datos para insertar? ya que el metodo Insert no tiene parametros de entradas (ZQuery1.Insert);Me estabas hablando de que utiliza un Buffer y aqui viene la pregunta ¿sera que tambien puedo insertar de esta forma? Esto es mi duda y quisiera que me lo aclaran si se puede de esta forma insertar,editar,eliminar. Para ahorrarme hacer sentencias SQL.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#6
|
||||
|
||||
Pues no se puede.
Y es precisamente para evitarse esos dolores de cabeza que empleamos los métodos. TDataSet nos oculta ese tedioso manejo del buffer y nos hace el trabajo de forma transparente. No vemos ese Buffer porque simplemente el componente, y toda su jerarquía de clases está tan bien diseñada para ocultar los detalles técnicos que son "irrelevantes" al programador final. ¡Vamos que lo buscas hacer es ir a lo primitivo; rompe con el esquema y las bondades de OO: encapsulamiento de información y falicidad de programación! Por cierto, el método Insert (el cual pertenece a TDataSet) no inserta. Simplemente pone al objeto en estado de insrción (dsInsert). La inserción no se produce sino es hasta que se confirma con Post. Puedes ver el bello código del DatSet, y/o de cualquier parte de la VCL tan sólo presionando Ctrl y dando clic en el método, propiedad del objeto. Fíjate y observarás como internamente se opera con el Buffer y luego se delega la tarea al proveedor, o al motor quien es de última quien hace el trabajo. Saludos, |
#7
|
||||
|
||||
Cita:
Pues pense que se podia por me dije asi mismo "Por que no aprovechar lo que ya esta hecho y poder utilizarlo" Incluso vi el metodo Prepare que al parecer prepara que todo este listo. Tambien vi que se podia hacer esto: Parece ser que Adiciona un nuevo Registro(Field) Entonces para que esto? ¿Que alguien me explique por favor necesito entenderlo? Cita:
La verdad si alguien puede complementar le estaria muy agradecido. Gracias amigo Delphius ... Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#8
|
||||
|
||||
Cita:
El DataSet nos oculta el Buffer, y en vez de ello nos ofrece los métodos bases que luego serán usados y ampliados por las clases descendientes de éste. Repito nuevamente: no podemos ver el Buffer, pero a cambio de ese buffer tenemos los métodos, propiedades, y clases necesarias para hacernos la tarea más fácil. Que se pueda añadir un campo al array Fields no viene al caso, eso ya es otra cuestión. ¿Qué no era que estamos hablando de insertar registros y no campos? Y por si fuera poco, No es un comportamiento normal el que describes, ya que el mismo DataSet se encarga de añadir los campos necesarios en su momento. Se ofrece ese método puesto que puede ser de utilidad en ciertos casos, pero no son muy frecuentes. El TDataSet llama, internamente a Fields.Add cuando lo necesite. ¿Cuáles son esos casos? La respuesta no podemos generalizar; se necesita analizar caso a caso. ¿A que viene ese giro de tu duda? Sigues hablando abstractamente, (de igual modo que lo hago yo). Bajemos a tierra mejor. Define una duda concreta y puntual. ¿Quieres una respuesta puntual de cuando se hace uso de Fields.Add? Un ejemplo es cuando el dataset (un TTable por ejemplo) habre la tabla. Cuando abre la tabla, pide los campos al motor y por cada campo crea un nuevo TField y lo asocia a la lista TFields. Ahora mismo me imagino un caso, único y raro, en donde se podría necesitar llamar a Fields.Add: crear una tabla en memoria. Quiero hacerte notar, que lo que estás preguntando son cosas un tanto rebuscadas, y abstractas. Vuelvo a reafirmar mi duda inicial ¿A que viene todo esto? No se... a lo mejor yo soy el que no comprende el tema. Saludos, |
#9
|
||||
|
||||
Solucionado la duda
Cita:
Es exactamente lo que estaba buscando.....me imagino que esta es otra forma de insertar se puede seguir la misma idea para editar, eliminar. Saludos.....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Última edición por rgstuamigo fecha: 10-02-2010 a las 15:43:43. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Copiar el contenido de un DataSet a otro DataSet | Javi2 | Varios | 82 | 22-11-2022 09:26:16 |
¿Trabajar con ClientDataSet sin DataSet asociado? | Bauhaus1975 | Varios | 0 | 14-11-2008 12:54:22 |
Copnfigurar ip manualmente | soler | Varios | 25 | 11-03-2008 21:29:43 |
error configurando manualmente ADO.net | camomilass | Conexión con bases de datos | 1 | 10-01-2007 20:10:44 |
Bloqueo de registros manualmente | Will | Firebird e Interbase | 6 | 17-06-2005 17:38:38 |
|