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 01-10-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 21
javiermorales Va por buen camino
Append y registro relacionado

Hola a todos/as, tengo el siguiente problema, la aplicación funcionaba correctamente y sin saber por que, me aparece el siguiente mensaje cuando intento realizar un Append sobre una tabla:
"... No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla OBR ..."

¿No se supone que al realizar un Append todos los campos están vacíos y es cuando se realiza el Post el momento en que se evalua la existencia de los datos en las tablas relacionadas?.

Hace unas horas no se producía el eror y no se que puede pasar, he compactado y reparado la BD (Access 2000), he realizado el Build del proyecto, he reiniciado, vamos todo lo típico y en Acces al realizar un Append en esa tabla todo funciona correctamente.

Espero vuestra ayuda. un saludo.
Responder Con Cita
  #2  
Antiguo 01-10-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si has establecido integridad referencial desde Access, ya sabes botón derecho relaciones añades tablas, relacionas, aplicas integridad referencial, actualización en cascada.......


Entonces al dar un alta en la tabla xxxx no te permite si el registro no existe antes en la tabla yyyy.

Claro que es una especulación, pero te recomiendo que mires las relaciones que tienes establecidas entre las tablas, incluso si declaraste algún campo búsqueda dentro de Access.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 01-10-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 21
javiermorales Va por buen camino
Gracias por responder, las relaciones no las he modificado y como comentas tengo montada la integridad relacional, con actualización y borrado en cascada.

Lo raro es que sin más salte ahora este problema, ya que he verificado que todos los datos son correctos. Pero ¿no te parece extraño que salte ese error cuando solo he realizado el DataSource.DataSet.Append, es decir todavía no he tenido tiempo de rellenar los datos para que me salte ese error y no he realizado el Post.
Responder Con Cita
  #4  
Antiguo 01-10-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues yo hago pruebas y no me salta el error hasta que intento, cambiar de fila o lo que es lo mismo hacer un Post;

AdoTable1.Append;


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 01-10-2003
Avatar de javiermorales
javiermorales javiermorales is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 272
Poder: 21
javiermorales Va por buen camino
Ya lo tengo Marcos, como suele ocurrir, cuando no sabes lo que pasa, revisalo todo. He mirado línea a línea todo el código y por curioso que resulte, dos líneas más abajo del Append, aparece una asignación incorrecta a un campo, que por supuesto no cumple la integridad referencial. Pero la cuestión es que el error saltaba dos líneas antes del lugar donde se realizaba la asignación incorrecta:
Código:
  Comparativo.DataSource1.DataSet.Append;
    //Obra
    Comparativo.DataSource1.DataSet.FieldValues['COMP_OBRA'] := codobra;
    Comparativo.DataSource1.DataSet.FieldValues['COMP_OBRA'] := false;
Eso es lo que me hacía mirar el código hasta ese punto y no más abajo. ¿No parece normal verdad?. Bueno, por lo menos esto me enseñará a no confiar al 100% en el punto que me indica el trazado.

Gracias por todo Marcos. Un saludo.
Responder Con Cita
  #6  
Antiguo 02-10-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Creo que es probable que lo que ocurra es que tu tabla ya está editando o insertando algún registro, y al llamar a append, el motor primero hace un post sobre el registro actual.

Creo que podes verificarlo facilmente haciendo:

Código:
  if Comparativo.DataSource1.DataSet.State in dsEditModes Then
  Begin
    ShowMessage('Se esta editando el registro');
    try
      Comparativo.DataSource1.DataSet.Post;  
    except
      ShowMessage('Si es aqui donde peta!');
      raise;
    end;
  End;
No es una solucion, pero te ilustrará el problema.

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
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:30:51.


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