Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   por que duplicidad de registros con clientdataset sin ingresar registros ...mysql (https://www.clubdelphi.com/foros/showthread.php?t=35167)

Arturo 02-09-2006 18:43:16

por que duplicidad de registros con clientdataset sin ingresar registros ...mysql
 
buenos

tengo un problema con dos tablas de mysql que tienen una relacion tipo maestro/detalle, la cual al detalle es como esta:

Código PHP:

create table detalle(
det int not null,
aplicacion varchar(50),
descripcion varchar(50),
key fk_det (det)
);

ALTER TABLE detalle ADD FOREIGN KEY (DetREFERENCES equipos (equip_idON DELETE CASCADE ON UPDATE CASCADE

como se ve en el detalle no defino como primary key (det) por que no me permite ingresar datos razon por la cual cree un indice y luego una referencia foranea a mi tabla principal.
el problema comienza en que ahora que uso los clientdataset, datasetprovider con un sqlquery de los componentes dbexpress con estas dos tabla me ingresa los datos en el detalle pero si recorro al siguiente (next) registro y despues regreso me doy cuenta que se van incrementando los registros cuando en realidad por decirlo ingrese dos, los duplica, pense voy a reiniciar la pc pero no es asi me sigue pasando, alguine le ha sucedido algo parecido a esto.
Espero haberme explicado pero no entiendo por que lo hace el delphi y los clientedataset's.

gracias, no he podido enterder este comportamiento.

dec 03-09-2006 12:13:29

Hola,

¿No debería tener la tabla "detalle" un campo que fuese la "clave primaria", que se autoincrementase y no pudiera repetirse ni ser nulo? No tendría que ver con el campo "det", que podrías utilizar para lo que te fuera menester.

Lo digo porque comentas que no puedes tener una "clave primaria" en la tabla "detalles" porque no puedes entonces añadir datos... creo que no tiene que ver una cosa con la otra. Lo que acaso no puedes tener es el campo "det" como "clave primaria", pero, nada te impide contar con un campo "ID" en la tabla "detalle", este sí, como digo, sería la "clave primaria".

Por otro lado, me parece (no estoy seguro) que si no cuentas con una "clave primaria" nada impide que puedan "duplicarse" los registros. Con una clave primaria no podrías duplicarse puesto que se produciría una "violación de la clave primaria".

¿O estoy completamente equivocado? Mira que no me extrañaría...

Arturo 04-09-2006 15:33:00

miren la verdad cree una base de datos aparte solo para ver analizar el comportamiento de llevar la tabla maestra / detalle:
Código PHP:

create table detalle(
det int not null primary key,
aplicacion varchar(50),
descripcion varchar(50),
key fk_det (det)
);
y luego la llave foraneaALTER TABLE detalle ADD FOREIGN KEY (DetREFERENCES equipos (equip_idON DELETE CASCADE ON UPDATE CASCADE

al ingresar datos me da error duplicate entry '1' for key 1
ahora bien no he podido hacer como mantener en memoria los registros ingresados para hacer llaves compuestas de esta manera:
Código PHP:

create table detalle(
det int not null,
renglon int not null,
aplicacion varchar(50),
descripcion varchar(50),
primary key (detrenglon),
key fk_det (det)); 

esta tabla creada si me permite ingresar datos pero desde el delphi no he podido encontrar algo para solucionarlo.
Código PHP:

al usar esta tabla quedarian asi los regsitros:
det  renglon  aplicacion
 1     1         una cosa
 1     2         otra cosa
 2     1         una mas
 2     2         una mas del regitro 2
 2     3         y asi
... 

espero haberme explicado. gracias


Arturo 05-09-2006 18:39:37

y que dicen alguna posible solucion, con las relaciones de mysql
u como lo solucionan ?

gracias club.


La franja horaria es GMT +2. Ahora son las 15:35:05.

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