PDA

Ver la Versión Completa : Problema con los IBO y Firebird


Ubed
29-02-2008, 09:44:10
Hola tengo una aplicacion con esta funcion para generar los autoincrementos, pero he tenido que cambiar los ib_Dataset por dataset normales.

Bien mi problema es que como debo hacer esta funcion ahora?

if (IB_Dataset.State=dssInsert) AND (IB_Dataset.FieldByName('ID_MONITOR').IsNull) then
IB_Dataset.FieldByName('ID_MONITOR').AsInteger:=IB_Dataset.Gen_ID('GEN_ID_MONITOR',1);
end;

Gracias de antemano

Lepe
29-02-2008, 12:58:51
Esto suele hacerse del lado servidor, dentro de la base de datos en un trigger before insert:

if new.id_monitor is null then
new.id_monitor = Gen_ID('GEN_ID_MONITOR',1);

Ahora al tiempo de insertar, omites el campo id_monitor o directamente en la SQL le pasas el valor NULL (declara la unidad Variants en el uses para que compile).

Para hacerlo del método que tú quieres, tendrías que lanzar otra consulta más para generar el valor:

query1.sql.text := 'select Gen_ID('+ quotedstr('GEN_ID_MONITOR')+',1)';
query1.Open
IB_Dataset.FieldByName('ID_MONITOR').AsInteger:=
query1.Fields[0].AsInteger;
query1.Close;

(dicho de memoria, espero que funcione).

Saludos