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 24-11-2003
Avatar de pinoxito
pinoxito pinoxito is offline
Miembro
 
Registrado: sep 2003
Posts: 16
Poder: 0
pinoxito Va por buen camino
Question IBQuery --> DataSetProvider --> ClientDataset

Hola, tengo una aplicacion con IBQuery --> DataSetProvider --> ClientDataset. Cuando hago el ApplyUpdates en el clientDatset, no se reflejan los cambios hasta que no cierro el formulario, esto es normal? No deberian reflejarse los cambios inmediatamente en la BD cuando se hace el applyupdates?
Responder Con Cita
  #2  
Antiguo 24-11-2003
Humberto Pertuz Humberto Pertuz is offline
Miembro
 
Registrado: nov 2003
Posts: 19
Poder: 0
Humberto Pertuz Va por buen camino
porque no utilizas mejor un TSQLTable en vez del sqlquery
__________________
NINGUNO DE NOSOTROS ES TAN BUENO, COMO TODOS NOSOTROS

HUMBERTO PERTUZ
BARRANQUILLA-COLOMBIA
Responder Con Cita
  #3  
Antiguo 24-11-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 21
mosorio Va por buen camino
Hola!
Si mal no recuerdo, debes hacer un refresh al ClientDataset para que se vean los cambios en los componentes DBaware.

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

Siento estar en desacuerdo con Humberto. Soy totalmente contrario a la utilización de un componente TSQLTable (lo mismo digo de un TTable, TADOTable, TIBTable, ....). Estos componentes acceden a todas las filas y columnas de la tabla, cuando normalmente solo queremos acceder a determinadas filas (lo restringimos con un where en la consulta), y mostrar unas pocas columnas. Esto hará que tengamos que descargar menos datos, y la aplicación y la red vayan mucho mas descargadas.

Respecto a la actualización de los datos, en el propio ClientDataset que ejecuta el ApplyUpdates, los cambios siempre están actualizados. Pero si tienes otro Dataset apuntando a los mismo datos, estos nunca se actualizan automaticamente, tienes que forzar su actualización mediante el Refresh que se ha comentado.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 24-11-2003
Avatar de pinoxito
pinoxito pinoxito is offline
Miembro
 
Registrado: sep 2003
Posts: 16
Poder: 0
pinoxito Va por buen camino
Question

Borré todas los componentes y empecé de nuevo la relación entre ellos (IBQuery->DatasetProvider-> ClientDatset) y volvi a poner todos los campos persistentes en los clientDatsets con sus propiedades pflags como antes y el DatasetProvider-->pWhereKeyOnly.. A la hora de aplicar cambios no se que pasa que siempre dice "Unable to find record. No key specified" y lo he montado exactamente igual que al principio. En el clientdataset he puesto en los campos persistentes que son clave el providewrflag pfInKey=true... y ya no se que mas hacer...
Responder Con Cita
  #6  
Antiguo 24-11-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

El pfInKey de los ProviderFlags, hay que activarlo en los campos persistentes del IBQuery y no en los del ClientDataset.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 24-11-2003
Avatar de pinoxito
pinoxito pinoxito is offline
Miembro
 
Registrado: sep 2003
Posts: 16
Poder: 0
pinoxito Va por buen camino
El pfInWhere para que sirve realmente?
Responder Con Cita
  #8  
Antiguo 24-11-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Cuando tu actualizas un cambio en el ClientDataset, el ApplyUpdates no lo pasa al IBDataset para que se ejecute en él, sinó que se construye una sentencia UPDATE que realiza la modificación.

update table set campo1 = valor1, campo2 = valor2, ....
where campo1 = campo1 and campo2 = valor2 and ...

Cuando quitas el pfInWhere de un campo, no se añadirá a la cláusula where de la sentencia update. Esto es util por ejemplo en los campos memo, donde hay que quitarlo para que no esté un campo memo en el where (cosa que no aceptan muchos motores).

Aunque tienes que tener en cuenta que hay 3 formas para realizar las sentencias update. Esto depende del UpdateMode del DatasetProvider.

upWhereAll
upWhereChanged
upWhereKeyOnly

La primera opción construye el select con todos los campos en el Where (excepto naturalmente los marcados sin pfInWhere). La segunda opción construye la cláusula where, con los campos de clave primaria (pfInKey) y los campos que han cambiado, finalmente la 3a. opción solo pone en el where los campos de clave primaria.

Personalmente utilizo la 3a opción (aunque probablemente la más recomendable es la 2a).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 16-11-2005
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Disculpen que tome este hilo de hace un tiempo y reflote el tema es que ma pasa algo similar y para no habrir uno nuevo retomo de donde dejamos... la cosas es asi, trabajo con D7 + Firebird 1.7 + Dbexpress

Tenia una base de datos con dos tablas maestro + detalle que funcionaban muy bien en actualizacion, bajas, etc etc con el componente SimpleDataSet.

Tuve que cambiar los indices y la llave foranea que relaciona a dos tablas y a partir de ese momento empesaron los problema... no actualizaba y daba el error "unable to find record...." cuando se modificaba un dato en la grilla.

Viendo este hilo y sus consejos cambie el simpledataset por IBQuery->DatasetProvider-> ClientDatset y salio andando, el tema es que se me complico demasiado el codigo con estos componentes etc etc....

Habra alguna posibilidad de definir los key en el simpledataset y que funciones o bien que en el dataprovider (del simpledataset) especificar upWhereChanged.

Bueno espero se haya entendido, desde ya muchas gracias
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:43:25.


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