PDA

Ver la Versión Completa : findkey y fieldkind en sql


federicorl
20-03-2008, 20:46:57
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í:

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í:


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