Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2004
luchopriet luchopriet is offline
Registrado
 
Registrado: ago 2004
Posts: 8
Poder: 0
luchopriet Va por buen camino
Question ClientDataSet - ApplyUpdates

Hola amigos:

Les agradecería me ayuden en este problema:
Tengo una aplicación cliente servidor. En el servidor uso ADOConnection, ADOQUery's, DataSetProvider's.
En el cliente: DCOMConnection y CLientDataSet's.
Tengo por ejemplo mi tabla de "empleados" y abro una ventana por cada uno.
(EMpleado 1, Empleado 2, ..., EMpleado N). Abro dos ventanas : Empleado 1 y EMpleado 2 (en ese orden) vuelvo a la ventana EMpleado 1 , hago un cambio cualquiera en un dato. APLICO y me sale error "registro modificado por otro usuario" . ¿POR QUE? ¿COMO SOLUCIONO ESTO?

Si abro una ventana y modifico , no hay problema ahi.

PD: algun manual avanzado sobre estos componentes.

GRACIAS DE ANTEMANO
Responder Con Cita
  #2  
Antiguo 03-08-2004
karocs karocs is offline
Miembro
 
Registrado: jul 2004
Posts: 143
Poder: 20
karocs Va por buen camino
CLientDataSet ApplyUpdates

Saludos

Este error generalmente ocurre cuando hay problemas con la base de datos como por ej: llaves primarias, tablas desconocidas, llaves foraneas etc pero si quieres ver el error especifico puedes colocar el envento
OnReconcileError del ClientDataSet que maneja la tabla empleado la siguiente instruccion:

ApplicationShowException(E),estp te muestra el error especifico;

Espero te sea de ayuda...
Responder Con Cita
  #3  
Antiguo 03-08-2004
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.

Como dice el compañero, es probable que simplemente no encuentre el registro a modificar, y no sea realmente que el registro se haya modificado.

Para asegurar la detección del registro, pón la propiedad UpdateMode del DataSetProvider a upWhereKeyOnly. Ahora solo te queda indicar cual es el campo de clave primaria. Esto lo tienes que hacer en la parte servidora, es decir en el ADOQuery. Abre sus campos persistentes, y en el campo que corresponde a la clave primaria, activa el flag pfInKey en la propiedad ProviderFlags.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 04-08-2004
luchopriet luchopriet is offline
Registrado
 
Registrado: ago 2004
Posts: 8
Poder: 0
luchopriet Va por buen camino
ClientDataSet

Hola amigos:

En primer lugar que DLBM y gracias por su respuesta pronta a mi consulta.
Atendiendo lo que me dijeron hice las pruebas pero me sale el mismo error
"record not found o changed by other user"
(asumiendo que apliqué su consejo al pie de la letra).

ApplicationShowException(E), me devolvió el mismo mensaje que me muestra la ventana del reconcilieerror del clientdataset.

Quisiera si puedan ahondar mas el asunto cuando se refiere a que hay problemas con la base de datos ( "llaves primarias, tablas desconocidas, llaves foraneas etc"). Uso access como base de datos. como probaria? quitando claves, indices, relaciones?

SIguiendo el consejo de que no encontraba el registro, hice :
propiedad UpdateMode del DataSetProvider a upWhereKeyOnly
propiedad ProviderFlags del campo que corresponde a la clave primaria a True.

ALGUNA OTRA SUGERENCIA?

PD: SI hay una forma de conversar en linea avisenme.
Responder Con Cita
  #5  
Antiguo 04-08-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Cita:
Empezado por luchopriet
En primer lugar que DLBM y gracias por su respuesta
¿ DLBM ?

Cita:
Empezado por luchopriet
SIguiendo el consejo de que no encontraba el registro, hice :
propiedad UpdateMode del DataSetProvider a upWhereKeyOnly
propiedad ProviderFlags del campo que corresponde a la clave primaria a True.
¿ Has utilizado el campo persistente correspondiente a la clave primaria del ClientDataset o del ADOQuery ? Como ya comenté, es importante que sea el campo del ADOQuery.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 05-08-2004
luchopriet luchopriet is offline
Registrado
 
Registrado: ago 2004
Posts: 8
Poder: 0
luchopriet Va por buen camino
Question

Hola guillotmarc

"¿ Has utilizado el campo persistente correspondiente a la clave primaria del ClientDataset o del ADOQuery ? Como ya comenté, es importante que sea el campo del ADOQuery."

SI agregué a la lista de campos todos de la tabla empleado (para el caso) y al campo que es la clave le puse activo el flag pfInKey en la propiedad ProviderFlags. todo en el servidor.
Pero sigue igual

QUE PUEDO HACER?

GRacias
Responder Con Cita
  #7  
Antiguo 07-08-2004
luchopriet luchopriet is offline
Registrado
 
Registrado: ago 2004
Posts: 8
Poder: 0
luchopriet Va por buen camino
ApplyUpdates

Hola amigos:

Logré resolver el problema de l mensaje de "registro no se encuentra o modificado por otro usuario". pero aparece uno en uncaso cuando hago applyupdates:

"[Microsoft][Controlador ODBC Microsoft Access] No se puede definir el atributo ahora"

A qué se refiere.?

Gracias
Responder Con Cita
  #8  
Antiguo 23-08-2004
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.

¿ Porqué utilizas el provider ODBC para acceder a Access ?, utiliza el nativo de Access, es decir el Jet 4.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 17-11-2007
darnaldo darnaldo is offline
Registrado
 
Registrado: abr 2006
Posts: 1
Poder: 0
darnaldo Va por buen camino
Thumbs up Solución al problema

Hola colega programador:

Para solucionar ese problema debes hacer lo siguiente si usas un datasetprovider debes de indicarle en las propiedades que actualize solo en la llave primaria, es decir en la siguiente ruta:

UpdateMode -> WhereKeyOnly

Luego debes de cargar en el componente que te trae la información todos los campos es decir darle un doble click al componente relacionado y en la lista de campos con el boton derecho del mouse en el menú seleccionar:

AddAllFields

Y en el campo que es llave en tu base de datos cambiar en las propiedades lo siguiente:

ProviderFlags -> pfInley

Y con eso resuelves el problema.

Con tablas que no tienen campos llave no cambies las opciones.

Saludos y suerte!!

Darnaldo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 22:03:08.


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