FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Ayuda: "Record not found or changed by another user"
Hola,
Tengo un proceso que sumariza los detalles de una factura para determinar el importe e impuesto totales, en base a tales detalles. pe_regoper es un objeto que contiene propiedades (property) que escriben los datos a los campos de la tabla. También tiene asociado el ClientDataSet que accede a la tabla. Partidas es otro objeto relacionado a pe_regoper que contiene propiedades de las partidas, y su ClientDataSet, que accede a la tabla de partidas. if (pe_regoper.Cierre = 'N') and (not pe_regoper.Partidas.z_DataSet.EOF) then begin pe_regoper.z_DataSet.Edit; pe_regoper.TotalImporte:= 0; pe_regoper.TotalIVA:= 0; with pe_regoper.Partidas.z_dataSet do begin First; while not Eof do begin pe_regoper.TotalImporte:= pe_regoper.TotalImporte + pe_regoper.Partidas.Importe; pe_regoper.TotalIVA:= pe_regoper.TotalIVA + pe_regoper.Partidas.IVA; next; end; end; pe_regoper.z_dataSet.Post; if TClientDataSet( pe_regoper.z_dataSet ).ApplyUpdates(0) > 0 then TClientDataSet( pe_regoper.z_dataSet ).CancelUpdates; end; En el debugger veo que entra a la condición sin problema, y efectúa las operaciones de totalización correctamente. El problema viene al aplicar el ApplyUpdates, obtengo "Record not found or changed by another user". Cada ClientDataSet está asociado al Provider, y este a su vez a un ZQuery de Zeos que conecta a MySQL 5. Uso Delphi 7 Qué podrá estar pasando? Gracias, Guillermo |
#2
|
||||
|
||||
¡Hola!
Justo en la parte inferior de esta página aparecen varios enlaces a otros hilos con el mismo mensaje de error. El problema podría estar en lo mismo que encontramos en esta otra situación: http://www.clubdelphi.com/foros/showthread.php?t=63945 Muy importante: Usa las etiquetas especiales para darle formato al código que publiques, haciendo que quede más legible. Saludos. Al González. |
#3
|
|||
|
|||
Hola Al,
Gracias por la respuesta. Estoy viendo en el DataModule las propiedades del Provider y del ZQuery en lo que son los campos: La propiedad SQL del ZQuery contiene:
Dado que se trata de una vista y no una tabla, en el evento del Provider OnGetTableName, tengo:
Esta mecánica la uso en otras vistas, y me funciona bien. Lo diferente de los otros casos, es que en este que tengo problemas, el query tiene parámetos "where": where regoper_id= :regoper_id En el Provider, el UpdateMode lo tengo como "upWhereKeyOnly", y he comprobado tanto en los campos del ZQuery como del ClientDataSet, que:
En el enlace que me indicas, Bauhaus tenía el problema de que externamente se le estaba modificando el "upWhereKeyOnly" a "upWhereAll", más no entendí muy bien de qué manera podría rastrearse eso en el código. Como comentaba, tengo otros 4 ZQueries en donde no tengo problema con el ApplyUpdates, excepto con este, que tiene un parámetro "where" en la sentencia SQL y que uso para agrupar los detalles asociados a una tabla maestro. Qué podrá ser? Gracias, Guillermo |
#4
|
|||
|
|||
Como elemento adicional, y en caso de que pueda ayudar a que encontremos una pista del problema (esperando no confundir más):
En dxDBGrid en que muestro los registros de detalle, filtrados según el registro "master" o encabezado, al momento de seleccionar uno para modificar, sucede algo extraño: 1- Si es la primera vez que entro al grid y elijo un registro a modificar dentro de una forma con el mismo dataSource, se elige bien el registro y se muestra bien en la forma. 2- Si después, navegando en el grid, elijo visualmente otro registro a modificar, la forma toma otro registro distinto al elegido y al regresar al dbgrid, la lista parece volverse loca, ya que el cursor se reposiciona en el número de registro que elegí, pero mostrando el registro equivocado tomado por la forma. Si se hace repaint al dbGrid, se redibujan correctamente los datos. Esto no sucede en los dbgrid en que no hay Params en el ZQuery. Gracias |
#5
|
||||
|
||||
Hola de nuevo Guillermo.
Por lo que nos comentas, creo que sólo te falta la bandera pfInKey en el campo ID, ya que de otra manera, por tratarse del modo upWhereKeyOnly, no se tomaría en cuenta el campo. En cuanto al comportamiento que mencionas de la rejilla, tal vez se trate de un problema aparte. Primero dinos cómo te funciona con la bandera pfInKey debidamente activada. Saludos. Al González. |
#6
|
|||
|
|||
Hola Al,
Me he asegurado de que en el id de la tabla/view se tengan las banderas [pfInUpdate,pfInWhere,pfInKey] tanto en el ZQuery como en el ClientDataSet. ya están puestas, de hecho estaban en el ZQuery, y en el ClientDataSet solo faltaba el "pfInKey". Lo volví a ejecutar y aún marca el error |
#7
|
||||
|
||||
OK, ¿podrías mostrarnos el contenido de la vista regoper_part_v? Esto para saber cómo estás obteniendo el campo ID.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
TClientDataSet.applyupdates (error: record not found or changed by another user) | Bauhaus1975 | Conexión con bases de datos | 11 | 17-03-2009 11:30:51 |
applyupdates (record not found or changed by another user) | Stell | Conexión con bases de datos | 4 | 13-05-2008 13:36:20 |
Error: "Record not found or changed by another user" | jmlifi | Varios | 0 | 27-01-2006 10:16:57 |
Record not found or changed by another user | felixgo | Conexión con bases de datos | 1 | 30-09-2005 13:07:40 |
Record not found or changed by another user. | Luis | Conexión con bases de datos | 2 | 12-08-2005 19:50:45 |
|