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 29-07-2004
karocs karocs is offline
Miembro
 
Registrado: jul 2004
Posts: 143
Poder: 20
karocs Va por buen camino
Enviar al BD solo los registros que se actualizaron

Hola

Hago una consulta a la base de datos, y mantengo los registros localmente en un ClientDataSet, y actualizo algunos como puedo hacer un ApplyUpdates sobre los que se modificaron y no enviarlos todos a la Bd nuevamente

Gracias ..
Responder Con Cita
  #2  
Antiguo 29-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Eso ya lo hace el client dataset solito. Envía solamente los contenidos en la lista que mantiene de añadidos, actualizados y borrados.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 29-07-2004
karocs karocs is offline
Miembro
 
Registrado: jul 2004
Posts: 143
Poder: 20
karocs Va por buen camino
gracias por reponder

ahora... hay alguna propiedad del ClientDataSet que me indique eso, es Modify ?

Gracias ...
Responder Con Cita
  #4  
Antiguo 30-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Que te indique que ?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 30-07-2004
karocs karocs is offline
Miembro
 
Registrado: jul 2004
Posts: 143
Poder: 20
karocs Va por buen camino
Enviar a la BD solo los registros que se actualizaron

hola

Alguna propiedad que me indique cuales registros se modificaron en el ClientDataSeT

Saludos...
Responder Con Cita
  #6  
Antiguo 30-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
La propiedad donde se lleva el registro es Delta

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 02-08-2004
karocs karocs is offline
Miembro
 
Registrado: jul 2004
Posts: 143
Poder: 20
karocs Va por buen camino
Enviar a la BD solo los registros que se actualizaron

Saludos..

Puedo acceder a la propiedad Delta de alguna forma ? o antes de hacer Post o ApplyUpdates coloco la propiedad ?.

Gracias...
Responder Con Cita
  #8  
Antiguo 02-08-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

no te lo puedo asegurar con exactitud, pero creo recordar que los ClientDataSet tienen dos propiedades de tipo OleVariant, una de ellas Delta y la otra Data.

Data tiene los datos que contiene el DataSet pero es asignable por lo que si tu a un ClientDataSet le asignas Delta a su propiedad Data deberías poder ver solo los registros modificados.

Sorry si hay alguna inexactitud

Saludos.
Responder Con Cita
  #9  
Antiguo 02-08-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Puedes acceder al Delta en el evento BeforeApplyUpdates (lo obtendrás como parámetro del evento).

Para saber si un registro de un clientdataset ha sido modificado, puedes consultar su propiedad UpdateStatus, que puede ser : No Modificado, Modificado, Insertado, Eliminado.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #10  
Antiguo 02-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por karocs
o antes de hacer Post o ApplyUpdates coloco la propiedad ?.
Esto es totalmente automático. Podes consultar y manipular la propiedad delta, o incluso hacer que sea visible en un Grid... pero no hace falta que asignes nada a ella.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 02-08-2004
Jordy Jordy is offline
Miembro
 
Registrado: may 2003
Posts: 51
Poder: 22
Jordy Va por buen camino
Enviar al BD solo los registros que se actualizaron

Hola a todos.

Tengo una aplicación a medias por el siguiente motivo:

Tengo una BD Firebird 1.5 y creo una pantalla con DBEdits cada uno enlazado a un campo de la tabla excepto el campo clave que le introduzco la ref. que yo quiero y al apretar Enter me busca el registro y ya lo tengo en cada campo del formulario. Ahora si modifico algún dato y luego apreto un botón que tengo un ApplyUpdates(0) me da un error de que no me conoce el nombre de la tabla a actualizar (he modificado el parámetro del ApplyUpdates a -1 y a un valor +n y me hace lo mismo).
Todo lo demás buscar, modificar a través de sql, y la elimincación me funciona correctamente, pero esto no y me interesa poderlo hacer.

El tipo de acceso lo hago con:
1 TSQLConnection
1 TSQLQuery
1 TDataSetProvider
1 TClientDataSet
1 TDataSource

los dos primeros son de dbExpress. Lo malo es que tambíen lo he probado con componentes Interbase y me hace lo mismo, en cambio con ADOExpress me funciona bíen. Lo malo de ADO es el tiempo de respuesta de la BD que es mucho más lento que en los otros dos anteriores que es inmedito.
No he probado con BDE ya que dicen que ya está obsoleto, no sé.

Alguien me puede ayudar en este caso ?.
y Vosotros con que componentes lo hariais, ya que es una aplicación Cliente/Servidor con mucho movimiento de información en red con varios ordenadores ?.

Gracias. Jordy.
Responder Con Cita
  #12  
Antiguo 03-08-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Esto me ha ocurrido cuando la consulta de la que se reciben los datos, tiene una subconsulta. El Parser de la sentencia no es muy inteligente, y considera la primera tabla que encuentra, como la tabla a modificar.

En todo caso la solución es sencilla. En el evento OnGetTableName del TDatasetProvider, indícale cual es la tabla a utilizar para modificar los registros.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #13  
Antiguo 03-08-2004
Jordy Jordy is offline
Miembro
 
Registrado: may 2003
Posts: 51
Poder: 22
Jordy Va por buen camino
Unhappy

Hola guillotmarc,

Primero muchas grácias por contestarme.
He probado lo que me has dicho y me da el mismo error. Lo que he hecho es lo siguiente:

He ido al TDatasetProvider y he hecho doble click sobre el evento OnGetTableName y he escrito. TableName := 'Nombre de la tabla';

y me da el mismo error

Project Project1.exe raised exception class EDatabaseError with message 'Table unknow nombre de la tabla at line 1, column 17.

y si le doy a F9

Project Project1.exe raised exception class EDatabaseError with message 'Unable to find record. No key specified'. Process stoped.

No sé sí hago algo mal.

Jordy.
Responder Con Cita
  #14  
Antiguo 03-08-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Respecto al primer problema, verifica el nombre de la tabla, sobre todo el tema de mayúsculas/minúsculas. (En Interbase, por ejemplo, para indicar una tabla con carácteres en minúsuclas, hay que entrecerrar su nombre con dobles comillas).

Respecto al problema de Unable to find record, es debido a que no es capaz de detectar el registro a modificar, debido a que no se ha indicado cual es el campo de clave primaria. Para indicarlo, vé a los campos persistentes del TSQLQuery (no del TClientDataset), y en el campo correspondiente a la clave primaria, actívale el flag pfInKey en su propiedad ProviderFlags.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #15  
Antiguo 03-08-2004
Jordy Jordy is offline
Miembro
 
Registrado: may 2003
Posts: 51
Poder: 22
Jordy Va por buen camino
Wink

Muchas grácias Gillotmarc.
Ya que me funciona perfectamente de la siguiente manera.
Yo en Firebird tengo el nombre de la tabla todo en mayusculas, pues he hecho lo qhe tú me has dicho de modificar el nombre de la tabla (antes lo tenía con la primera letra y el resto en minusculas) a mayusculas y todo OK.
En cuanta al segundo problema ha desaparecido.

Muchas Gracias.

Jordy.
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


La franja horaria es GMT +2. Ahora son las 23:14:03.


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