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 17-06-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Actualizar sólo 1 registro en cliente/servidor

Hola.

¿Hay alguna manera de que teniendo un conjunto de datos se actualice sólo un registro concreto, sin tener que volver a actualizar todo el conjunto de registros?
__________________
Milo
Responder Con Cita
  #2  
Antiguo 17-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Código SQL [-]
  UPDATE TABLA
  SET CAMPO1 = VALUE1,
  ..
  CAMPOn = VALUEn
  WHERE CAMPO_CLAVE = VALOR_CLAVE;

???????
__________________
E pur si muove
Responder Con Cita
  #3  
Antiguo 17-06-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Creo que no me he expresado bien.

Supongamos que tengo un servidor, y varios clientes en red. Uno de los clientes actualiza un registro en la base de datos, con una instruccion como la que has dicho. En ese momento, el servidor lanza un evento donde en el nombre del mismo, que puede ser de hasta 15 caracteres, incluyo tipo de operacion + nombre de tabla + identificador unico de registro. Es decir que si actualizo el registro 03515 de la tabla clientes puedo lanzar un evento que se llame 'ACli03515'

Bien; los clientes tendran abierto un conjunto de datos en memoria, mediante un componente descendiente del TDataSet de delphi. Es decir, mediante una consulta de seleccion habran seleccionado lo que les interesa y lo tendran ahí (en un TIBQuery o similiar). Supongamos que tengo 10 clientes los cuales han seleccionado unos 100 registros en su consulta.

Si digo que se haga un refresh del dataset, que creo que es como cerrarlo y abrirlo, se actualizaran las consultas con un total de 10*100= 1.000 registros viajando por la red. Pues lo que me gustaria saber es si a ese conjunto de datos se le puede decir que sólo actualice un registro y lo incorpore a lo que ya está, sustituyendo sólo ese registro, asi en el ejemplo sólo viajarian en total 10 registros por la red.
__________________
Milo
Responder Con Cita
  #4  
Antiguo 17-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Uff, hasta dónde llegan mis conocimientos, eso es bastante complicado. Piensa que tu dataset es un cursor abierto directamente en la base de datos, por lo tanto, realmente el cursor no ha cambiado.

A mi se me ocurren dos posibilidades:

1.- Trabaja con un TClientDataset y encargate de cargar en él los datos a pelo. Cuando te llegue la notificación, cambias los valores del registro y listos.

2.- Pagina el dataset de manera que te asegures que nunca nadie tenga 100 registros. No consigues lo que buscabas pero sí minimizar el tráfico de red.
__________________
E pur si muove
Responder Con Cita
  #5  
Antiguo 17-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si usas IBX, tengo entendido que estos componentes únicamente refrescan el registro actual en la implementación de su método Refresh, con lo que lo único que te haría falta es ubicarte en el registro que te interesa.

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
  #6  
Antiguo 18-06-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Mirando por ejemplo en el TIBQuery veo que no reimplementa el método Refresh, sino que es el del TDataSet, el cual actualiza todo el conjunto.
__________________
Milo
Responder Con Cita
  #7  
Antiguo 18-06-2004
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
Me he dado cuenta de dos cosas:

Una es que el IBDataSet tiene una propiedad llama RefreshSQL, aparte de SelectSQL, etc, así que ahí justamente estaba lo que preguntaba.

Y la otra es que he metido la pata con lo de los eventos, no les puedo dar cualquier nombre, ha de ser un nombre concreto y conocido de antemano. De cualquier manera, eso no es impedimento para lograr lo que proponía.

Gracias a todos
__________________
Milo
Responder Con Cita
  #8  
Antiguo 21-06-2004
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
El metodo Refresh del IBDataset actualiza unicamente un registro q es el registro actual, no se q has hecho para q te actualice todo el conjunto de datos, pero por lo menos a mi me actualiza unicamente el ActiveRecord..
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 02:32: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