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)
-   -   findkey y fieldkind en sql (https://www.clubdelphi.com/foros/showthread.php?t=54498)

federicorl 20-03-2008 20:46:57

findkey y fieldkind en sql
 
saludos foristas estoy trabajando con Delphi 7 y con una base en SQL resulta que si manejo los Campos de identidad en SQL estos no se actualizan en deplhi al hacer un append, para solucionar esto hay que cambiar la propiedad fieldkind del campo a fkInternalCalc pero en este caso los indices dejan de funcionar y si haces un findkey o un locate no te localiza el registro en cuestion a menos que la propiedad fieldkind este en FkData alguien sabe como hacer para que el campo funcione como autoincremento pero se pueda usar como indice tambien, mil gracias por su tiempo Saludos!

mlara 09-04-2008 20:02:14

Quizá siendo un poco más explícito con relación al uso de componentes podría colaborar en algo... no no no, creo que no hay problema con esto. Estaba pensando en otras cosas. Continúo en el siguiente Post.

mlara 09-04-2008 20:34:57

Ya, creo que alguna vez me pasó lo mismo. Cuando se hace un append el componente no te recupera el valor del campo Identity que debería tener el registro. En realidad esto no es problema, ya que al hacer Post el servidor asigna el valor al campo Identify al nuevo registro.

La cuestión es que "quieras ver" el valor del campo Identity que tendrá el nuevo registro justo cuando ejecutas 'Append'. Bueno, pues en este caso, si tienes mucho problema al cambiar la propiedad FieldKind, entonces podrías hacer una consulta así:

Código SQL [-]
SELECT MAX(Id) FROM T
, donde Id es el campo Identity de la tabla T. Esto lo harías en el evento BeforeInsert del DataSet (sea Query, Table, o DataSet). Obviamente al tener este valor le sumas 1 y lo asignas al campo tipo Identity, así:

Código Delphi [-]
// Aquí la consulta anterior que podría recuperarse en la variable NewId.

...

Inc(NewId);
DataSet.Append;
DataSet.FieldByName('Id').AsInteger := NewId;

Espero que te haya podido colaborar.


La franja horaria es GMT +2. Ahora son las 09:25:53.

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