PDA

Ver la Versión Completa : Delphi 7 + ADO + Acces + Insercción en tabla con clave autonumérica


sostro
15-07-2005, 04:38:28
Hola a todos. Antes de nada agradeceros vuestro tiempo.

Intento insertar un registro en una tabla con una clave primaria autonumérica en access, pero sólo soy capaz a crear el primer registro. Al intentar crear el segundo me dice que no puede hacer tal cosa pues se duplicaría la clave primaria (cosa que lógicamente es imposible hacer).
Se que el "problema" viene derivado de que es un campo autonumerico.
Sobre un insercción en SQL de esta forma:

open;
insert;
fieldByName('Id_Peritacion').asInteger:=NULL;
fieldByName('Id_Compania').asInteger:=Peritacion.Id_Compania;
...
(os ahorro un monton de lineas equivalentes, y por tanto innecesarias para esto)
...
fieldByName('IVAHonorarios').asFloat:=Peritacion.IVAHonorarios;
fieldByName('HonorarioNeto').asFloat:=Peritacion.HonorarioNeto;
post;
{Como uso autonumericos en acces, me interesa(mejor dicho, necesito) recuperar el valor de Peritacion}
Peritacion.Id_Peritacion:=fieldByName('Id_Peritacion').asInteger;
Close;


¿Qué debería saber para que mi programa y accces se entiendan bien en eso de trabajar con autonuméricos?

La insercción la hago sobre un objeto de la clase ADOTable.

Un saludo a todos y de nuevo agradeceros vuestro interes.

tcp_ip_es
15-07-2005, 12:55:50
simplemente no le asignes ningún valor...


with table1 do
begin
append;
fieldByName('Id_Compania').asInteger:=Peritacion.Id_Compania;
...
(os ahorro un monton de lineas equivalentes, y por tanto innecesarias para esto)
...
fieldByName('IVAHonorarios').asFloat:=Peritacion.IVAHonorarios;
fieldByName('HonorarioNeto').asFloat:=Peritacion.HonorarioNeto;
post;
end;



Saludos, Tony

sostro
15-07-2005, 16:12:53
Ya habia probado con esa opción de no asignar valor alguno, pero sigue haciendo lo mismo...

Raro, ¿verdad?.

Saludos y gracias...

Aztaroth
15-07-2005, 22:07:45
Una forma de hacer eso es que al campo en la ADOTable, en la propiedad
AutoGenerateValue lo pongas a ArAutoInc

y en la propiedad ProviderFlags ponle la propiedad pfInKey a true y wala, no debe haber el mayor problema ahora depende como tengas el cursor, si lo pones a modo CursorLocation = clUseServer y el CursorType = ctKeySet.

sostro
16-07-2005, 06:41:03
He hecho los cambios y sigo igual... seguro que es un detalle tonto, pero es lo que marca la deferencia... gracias. Gracias Aztaroth...

sostro
16-07-2005, 17:44:38
ya está... era una tonteria... por alguna razón me obceque en que era la clave primaria quien me daba el problema y era otro campo que le habia impuesto que fuera unico, y no lo estaba cumpliendo... así que resuelto.

Gracias a todos....