Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 14-12-2006
Edgtho Edgtho is offline
Miembro
 
Registrado: Apr 2006
Posts: 47
Poder: 0
Edgtho Va por buen camino
Error Master Missing Record

Esto es algo que me ha pasado tanto con Paradox como con Mysql por eso pongo aquí el mensaje.

El caso es que yo tengo una tabla de clientes, que cuenta con integridad referencial en varios campos (cuentacontable, divisa,provincia y tarifa). Estoy diseñando un programa que traspasa datos de una tabla a otra y me encuentro que muchas veces al hacer el POST me devuelve el error

"master missing record"

Pero no me identifica el campo en la cual la integridad referencial esta fallando.
En el try except tengo esto

Código:
try
except        
on E: Exception do
      begin
            mLog.lines.add(E.Message);
            exit;
      end;
¿Hay alguna manera de poder devolver dentro del mensaje de error el campo que esta ocasionando el fallo?
__________________
Dios es real a menos que sea declarado entero
Responder Con Cita
  #2  
Antiguo 14-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 17
Crandel Va por buen camino
Hola, muy posible que tu problema sea qe estas pasando los datos de la tabla detalle antes que los datos de la tabla maestro.

Para saber en que campo se origino el problema, podrias tener una variable que guarde el numero o nombre del campo que estas escribien y en la excepcion lo escribes tu log.

Espero que te ayude a resolver el problema.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 15-12-2006
Edgtho Edgtho is offline
Miembro
 
Registrado: Apr 2006
Posts: 47
Poder: 0
Edgtho Va por buen camino
Crandel no es un problema de la tabla detalle. Por otra parte no me sirve de nada guardar en una variable el nombre del campo, ya que el error salta cuando ejecuto "tabla1.post" no cuando asigno el valor de un campo a otro. De esa manera tendria siempre el nombre del ultimo campo de la tabla.

De todas maneras gracias por tu respuesta
__________________
Dios es real a menos que sea declarado entero
Responder Con Cita
  #4  
Antiguo 15-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 17
Crandel Va por buen camino
Cita:
Empezado por Edgtho
Crandel no es un problema de la tabla detalle. Por otra parte no me sirve de nada guardar en una variable el nombre del campo, ya que el error salta cuando ejecuto "tabla1.post" no cuando asigno el valor de un campo a otro. De esa manera tendria siempre el nombre del ultimo campo de la tabla.
y quien es tabla1???
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 15-12-2006
Edgtho Edgtho is offline
Miembro
 
Registrado: Apr 2006
Posts: 47
Poder: 0
Edgtho Va por buen camino
Tabla1 es un nombre que te he puesto de ejemplo, pero puede ser cualquier nombre que quieras ponerle. Lo esencial es como dentro del codigo de la excepcion se puede averiguar el nombre del campo que falla.

Los valores de Exception de tipo E:Exception o E: DatabaseError no acompañan del nombre del campo que ocasiona el fallo solo del fallo en si. Eso es lo que me interesa averiguar.

Por ponerte un ejemplo para que lo veas claro

Supongamos tabla1 = clientes.db

Código:
try
    tabla1.append;
    tabla1.fieldbyname('CODIGO').AsString := Campo1;
    tabla1.fieldbyname('NOMBRE').AsString := Campo2;
    tabla1.fieldbyname('DIVISA').AsString := Campo3;
    tabla1.fieldbyname('TARIFA').AsString := Campo4;
    tabla1.fieldbyname('PROVINCIA').AsString := Campo5;
    tabla1.post;
except
  On E: DatabaseError do
  begin
      ShowMessage(e.Message);
  end;
En donde Divisa, Tarifa y Provincia son campos que cuentan con integridad referencial hacia sus respectivas tablas.
Te salta un error al ejecutar el POST de tipo "Master missing record", que es lo que contiene e.Message
¿Como identificar que el error se produce en Tarifa, Divisa o Provincia?
__________________
Dios es real a menos que sea declarado entero
Responder Con Cita
  #6  
Antiguo 16-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 17
Crandel Va por buen camino
Cita:
Empezado por Edgtho
Tabla1 es un nombre que te he puesto de ejemplo, pero puede ser cualquier nombre que quieras ponerle.
En realidad lo del nombre no es trivial, porque justamente por el tipo de error es que te falta el campo al cual hace referencia en la tabla maestro.

Cita:
Empezado por Edgtho
Lo esencial es como dentro del codigo de la excepcion se puede averiguar el nombre del campo que falla.
...
En donde Divisa, Tarifa y Provincia son campos que cuentan con integridad referencial hacia sus respectivas tablas.
Te salta un error al ejecutar el POST de tipo "Master missing record", que es lo que contiene e.Message
¿Como identificar que el error se produce en Tarifa, Divisa o Provincia?
Aca queda un poco mas claro, lo primero que debes hacer es llenar las tablas Tarifa, Divisas y Provincia, y por último la Clientes.

Para encontrar donde esta tu problema o mas bien evitar el error puedes, por ejemplo, escribir un simple condicional que busque el valor en la Provincia, si el valor no existe en esa tabla que te escriba en un log que ese registro no se ha agregado y que continue con el siguiente.
__________________
[Crandel]
Responder Con Cita
  #7  
Antiguo 16-12-2006
Edgtho Edgtho is offline
Miembro
 
Registrado: Apr 2006
Posts: 47
Poder: 0
Edgtho Va por buen camino
Crandel, me vuelves a enfocar la solucion en un problema causado por supuesto desconocimiento de lo que es un maestro/detalle. Es de perogrullo y de principiante saber que primero tienes que rellenar unas tablas y despues otras. Y me gustaria no tener que volver a escribir por tercera vez lo mismo. Olvidate de maestros y detalles y de los nombres que les puedas poner a los componetes TTABLE y derivados.

Habia intentado plantear la pregunta de la manera mas sencilla posible para un mejor entendimiento. Veamos ahora si te explico la situacion entera lo entiendes mejor.

El programa que intento desarrollar realiza la sincronizacion entre tres tiendas con un servidor central. En cada tienda puedes dar de alta clientes u cualquier otro registro y este despues a una hora determinada se sincroniza con el servidor guardandose en una tabla unica los registros de las tres tiendas.
Asi si tenemos los clientes en la tienda 1 (1001,1002,1003), en la tienda 2 (2001,2003) y en la tienda 3 (3001,3002) en la tabla clientes del servidor tendriamos (1001,1002,1003,2001,2003,3001,3002). Esto es un ejemplo de una simple tabla (tenemos albaranes, facturas, vencimientos, etc que no son ya tan simples) y como comprenderas no se puede garantizar el que se rellenen todos los datos

¿Sabes cual seria el costo de tener que buscar en cada tabla de un campo de integridad referencial para saber si se cumple o no? Esto haria el programa lento e inviable en cuando se alcanzase determinada cantidad de registros. Eso sin contar con que tendrias que multiplicar el esfuerzo por tres (tres tiendas recuerdas?)

Si no sabes una forma en la cual dentro de una excepcion se pueda averiguar el campo causante de la misma, mejor me dices que no se puede y punto por que la solucion chapucera ya la sabia. Y dejamos de marear la perdiz. Lo siento si parezco seco y un gilipoyas, pero tener que explicarme en formato biblia cuando habia planteadoa un enunciado simple y claro me parece rayante.
__________________
Dios es real a menos que sea declarado entero
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error in module seleccionar: 'End'. missing at end of module. richi Varios 16 09-08-2006 12:44:56
Error Missing right quote gusanita SQL 9 05-08-2006 02:45:59
Error Record/key deleted tbolzan Conexión con bases de datos 1 22-10-2004 16:44:07
ERROR: Missing connection or ConnectionString!!!!!!!! DarkByte Conexión con bases de datos 3 09-09-2004 16:28:42
"Master record missing" en Maestro detalle Gelmin C++ Builder 1 26-03-2004 01:40:38


La franja horaria es GMT +2. Ahora son las 02:42:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi