Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Delphi 7 + ADO + Acces + Insercción en tabla con clave autonumérica (https://www.clubdelphi.com/foros/showthread.php?t=23391)

sostro 15-07-2005 04:38:28

Delphi 7 + ADO + Acces + Insercción en tabla con clave autonumérica
 
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:
Código Delphi [-]
        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...

Código Delphi [-]
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

Campo Autonumerico
 
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

sin avances....
 
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

resuelto
 
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....


La franja horaria es GMT +2. Ahora son las 23:12:06.

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