Delphi - Obtener un número autoincremental después de agreg

   
Vista:

Obtener un número autoincremental después de agreg

Publicado por rmora (1 intervención) el 27/03/2010 01:24:12
Hola Amigos,

Tengo el siguiente problema: Desarrolle un Sistema Punto de venta con delphi 5 y Firebird 2.1, el cual al tener multiples usuarios facurando al mismo tiempo el sistema le asigna el mismo a dos transacciones "ID", para que tengan una idea de lo que hablo les muestro parte del codigo para una mejor comprension:

// CONSULTA PARA LEER EL VALOR MAXIMO DE LA TABLA
CONSULTA := CrearConsulta(SELECT MAX(CODIGO) FROM RESERVACION);
VALOR1 := CONSULTA.FIELDBYNAME('CODIGO').ASINTEGER + 1;

// PROCEDIMIENTO UTILIZADO PARA REALIZAR INSERT Y UPDATE A UNA TABLA
procedure EjecutaSQL (const Comando : String);
var
qry : tQuery;
begin
qry := tQuery.Create(nil);
qry.DatabaseName := Sessions[0].Databases[0].DatabaseName;
qry.SQL.Add(Comando);
qry.ExecSQL;
qry.Destroy;
end;

El cual recibe un string de lo que deseo hacer en la tabla, algo asi como:

EjecutaSQL('INSERT INTO RESERVACION (CAMPO1,CAMPO2,CAMPO3) VALUE (VALOR1,VALOR2,VALOR3));

Ahora bien el problema radica cuando hay varios usuarios realizando una misma operacion, el sistema le prodria asignar a uno de ellos un valor duplicado.

En este caso lo que requiero es minimizar el tiempo de la asignacion del "ID" para evitar duplicados y que se "caiga" el sistema.

Segun he investigado existe una posibilidad de utlizar algo asi como:

insert into Reservacion(VALOR2,VALOR3) returning VALOR1;

Lo anterior utilizando Triggers y un generador. Sin embargo no se como adaptar el procedimiento para que esto funcione ya que por lo que entiendo la sintaxis de la sentencia anterior no funcionaria con el procedimiento "EjecutaSql".

Les agradezco la valiosa colaboracion....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Obtener un número autoincremental después de ag

Publicado por martin (43 intervenciones) el 27/03/2010 02:45:28
No conosco firebird, pero no tiene algun tipo de dato auto increment o algo asi? o sea que el id lo gestione el servidor y no tu aplicacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar