FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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;
__________________
Dios es real a menos que sea declarado entero |
#2
|
||||
|
||||
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] |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
Cita:
__________________
[Crandel] |
#5
|
|||
|
|||
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; 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 |
#6
|
||||
|
||||
Cita:
Cita:
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] |
#7
|
|||
|
|||
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 |
|
|
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 |
|