Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Dbgrid con ADO !!!!!!!!!!

Hola amigos necesito de ayuda, tengo un dbgrid conectado a un datasource y este a un adoquery.

Todo funciona ok, pero lo que necesito es que cuando el usuario cambie los valores en el dbgrid estos no se reflejen automaticamente en la base de datos (no se actualizen los registros) haste que yo se lo diga explicitamente (Ej : Boton "Aplicar Cambios").


Saludos
Responder Con Cita
  #2  
Antiguo 22-02-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa la ayuda sobre TClientDataSet.
Hay bastante información, pero la idea de funcionamiento es más o menos la que necesitas.
Simplificando mucho es como si fuera un copia local de la tabla; Los cambios se realizan en local y al final puedes aplicarlos todos. Necesitarás algun sistema de recuperación de colisiones/errores pero creo que es lo que necesitas.

Otra opción (pero creo que más compleja) es trabajar con algun componente en memoria y lego al aplicar, realizar los cambios manualmente a la Base de Datos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-02-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Aun no funciona!!!!!!!!!!1

Lo hice (use un TclientDataset) , pero ahora el dbgrid no me deja editar los valores de los campos.
Responder Con Cita
  #4  
Antiguo 22-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola TEO127
Que yo sepa si no hay un dbnavegator o esta en edit la tabla no se cambia nada en el dbgrid por mas que lo modifique el usuario.
El DBgrid lo que hace es enseñar o mostrar la informacion nada mas.
No veo cual es el problema.
Saludos
Responder Con Cita
  #5  
Antiguo 22-02-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Caral

Hola Caral , lo que sucede es lo siguiente, si bien el Dbgrid no es mas que un reflejo de los datos de una tabla o una consulta, dependiendo de la configuracion del Dataset asociado, este (el dbgrid) actualiza automaticamente los registros de la tabla cuando el usuario edita un dato (es es el caso de TADOQuery). Ahora bien lo que yo necesito es una forma de poder editar los campos y mantenerlos en una especie de buffer hasta que yo le ordene a la aplicaion actualizar los cambios en la(s) tabla(s) correspondientes. Para esto neftali me recomendo que usara TClientDataset que retiene en memoria los datos de otro Tdataset, sin embargo no me funciono ya que ahora el dbgrid me muestra los datos, pero no me deja modificarlos (editarlos).

Saludos y gracias por tu interes.
Responder Con Cita
  #6  
Antiguo 22-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola TEO127
Para estos casos lo que hago es crear una tabla temporal, se hacen todas las cosas que se quieran y una vez hechas se verifican los datos en esta tabla temporal, si son los correctos o los que me interesan, actualizo la tabla original y a la vez elimino los datos de la temporal.
Para mi es la manera mas sencilla de hacerlo, y ademas evito que el usuario se pueda equivocar directamente sobre la tabla.
No se si sera una medida optima, pero funciona y es facil.
Saludos
Responder Con Cita
  #7  
Antiguo 22-02-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa cómo lo estás haciendo.
¿Cómo es la consulta?

Aquí te pongo un simple ejemplo; Trabaja con la tabla "dbdemos.mdb" que suele estar en el directorio:
"C:\Archivos de programa\Archivos comunes\Borland Shared\Data\"

Una consulta ADO carga los datos de la tabla "Country" y se modifican sin problemas. Lo que ya no he realizado es la actualización final. Para eso usas el método ApplyUpdates de TClientDataSet.
Archivos Adjuntos
Tipo de Archivo: zip ej_ClientDataSet.zip (2,6 KB, 29 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 22-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola Neftali
Pregunto: porque un DataSetProvider1 y no un AdoConnection?
Me parece casi lo mismo.
En que se diferencian?
Saludos
Responder Con Cita
  #9  
Antiguo 22-02-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 26
Caral Va por buen camino
Hola
Me contesto a mi mismo.
El DataSetProvider1, trabaja con el ClientDataSet, para mantener la ejecucion de la consulta en memoria.
El adoConnection se puede utilizar siempre, pero se liga al ADoquery y va bien.
Saludos
Responder Con Cita
  #10  
Antiguo 22-02-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 20
luisgutierrezb Va por buen camino
si quieres poder despues deshacer los cambios que mandas a la base de datos, puedes usar transacciones, AdoConnectio.BeginTrans; CommitTrans, RollbackTrans.
pero si quieres que de plano no mande nada, si vas a tener que usar tablas temporales
Responder Con Cita
  #11  
Antiguo 22-02-2007
TEO127 TEO127 is offline
Miembro
 
Registrado: feb 2007
Posts: 17
Poder: 0
TEO127 Va por buen camino
Solucionado

Funciono todo ok, luego de unos pequenos ajustes.

1. Declare los campos en forma persistente.
2. Cambie el modo de actualizacion del DatasetProvider.UpdateMode=upWhereChanged.


Gracias por todo, Neftali y Caral.
Responder Con Cita
  #12  
Antiguo 22-02-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, creo que son componentes distintos. TDataSetProvider trabaja con el TClientDataset y este su vez trabaja con cualquier Base de Datos; Podrías enganchar el TDataSetProvider a un:
* TADOQuery
* TIBQuery
* TQuery
* ...

En cambio el TADOConnection es el componente de conexión que se usa para trabajar con ADO.
Por ejemplo (imagen) -los componentes se conectan en horizontal-:
(1) El primer caso es una conexión ADO normal, sin ClientDataSet
(2) El segundo caso es la misma conexión ADO, pero utilizando TClientDataSet.
(3) Y el tercer caso es una conexión con TClientDataset, pero en este caso utilizando el BDE.

No se si aclara algo, o lía más...

EDITO: Bueno, ya veo que está todo OK...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 22-02-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por luisgutierrezb
...pero si quieres que de plano no mande nada, si vas a tener que usar tablas temporales
Eso de "que de plano no mande nada", no lo he entendido. ¿Puedes explicarlo?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
PickList DBGrid (Pregunta acerca de los DBGRID) lazarous Varios 1 10-01-2006 10:53:12
Como extraer datos de un DBgrid a otro DBgrid mickey Conexión con bases de datos 13 29-01-2004 06:05:30


La franja horaria es GMT +2. Ahora son las 19:56:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi