Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-06-2008
vicacos vicacos is offline
Miembro
 
Registrado: may 2008
Ubicación: Valencia Venezuela
Posts: 35
Poder: 0
vicacos Va por buen camino
Asignar ID despues de insert

trabajo en un proyecto con delphi 7, FIBplus y Firebird 2.0 quiero agregar un numero correlativo a un campo de una tabla x (por ejemplo campo ID) de tipo smallint pero que este se agregue en el momento de confirmar el ingreso es decir no en el Inser mismo (No con un trigger before o after Insert) sino por ejemplo en el evento before post del dataset. Esto con la finalidad de no dejar huecos en la tabla y que siempre tenga numeros consecutivos 1,2,3,4...etc. Gracias por la ayuda que me puedan dar
Responder Con Cita
  #2  
Antiguo 03-06-2008
Wiarbumu Wiarbumu is offline
Miembro
 
Registrado: ene 2008
Posts: 15
Poder: 0
Wiarbumu Va por buen camino
Consejo

Te aconsejo que agregues a tu tabla un campo con restricción UNIQUE para asignar el numero sin huecos( independiente de la clave principal), por ejemplo supangamos que tenemos una tabla de nombre "PEDIDOS", a la cual agregamos un campo de nombre "Numero" en el que vamos a guardar el numero de pedido sin huecos; para agregar el número de pedido sin huecos debemos crear una tabla que llamaremos "CONTADORES" con un unico campo de nombre "IDUltimo" en el que insertaremos un primer registro, luego crearemos un trigger que asigne el número mas o menos así:




Código SQL [-]
create table CONTADORES (
IDUltimo INTEGER NOT NULL
);

insert into CONTADORES values(1);

create trigger BIPEDIDOS for PEDIDOS
active before insert position 0 as
begin
update CONTADORES
set IDUltimo = IDUltimo + 1;
select IDUltimo - 1
from CONTADORES
into new.Numero;
end!
Responder Con Cita
  #3  
Antiguo 03-06-2008
Wiarbumu Wiarbumu is offline
Miembro
 
Registrado: ene 2008
Posts: 15
Poder: 0
Wiarbumu Va por buen camino
otra forma

Si no quieres utilizar triggers, otra forma menos ortodoxa es crear un procedimiento almacenado que te devuelva el valor máximo del campo en cuestión , luego creas una función en la que al valor devuelto por el procedimiento le sumas 1, así pues, puedes asignar el valor de la función en el evento que mas te plazca a dicho campo, y te quedaría sin huecos.

Saludos
Responder Con Cita
  #4  
Antiguo 04-06-2008
vicacos vicacos is offline
Miembro
 
Registrado: may 2008
Ubicación: Valencia Venezuela
Posts: 35
Poder: 0
vicacos Va por buen camino
Solucion

Gracias por el comentario pero eso, no funciona para esta situacion: 2 usuarios A y B hacen una peticion a la misma tabla en ese orden primero A y despues B, luego el usuario B confirma pero el usuario A cancela. Con ese metodo se genereria un salto en la data es decir 1,2,3,....5,. La isea es que el numero se genere en el ultimo momento despues de haber confirmado la transacción. Bueno para el ejemplo genere 1 tabla, un Generador y coloque 4 componentes en la form; database, transaction, query, datasource para conexion con los componentes visuales.
CREATE TABLE EJEMPLO (
ID SMALLINT,
NOMBRE VARCHAR(25) NOT NULL,
PESO NUMERIC(6,2),
FOTO BLOB SUB TYPE SEGMENT SIZE 80
);

CREATE GENERATOR MAESTRO;
SET GENERATOR MAESTRO TO 0;

En el evento afterpost del dataset coloque
procedure Tform1.miDatasetAfterPost(Dataset: Tdataset);
If not midataset.FielByName('ID').Asboolean then begin
QueryId.Sql.clear;
QueryId.Sql.Add('UPDATE TABLA SET ID = GEN_ID(MAESTRO,1) '+);
QueryId.Sql.Add('WHERE ID IS NULL');
QueryId.ExecQuery;
end;
MidataSet.Transaction.CommitRetaining;
end;

Puede existir una mejor forma pero esta funciono para mi
Saludos
Gracias a todos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar despues de un Insert Jose Roman SQL 1 03-02-2008 14:32:17
Despues de un insert KeyMan PHP 1 23-04-2007 21:43:19
Recuperar autoinc. después de Insert to aig MS SQL Server 2 22-09-2004 10:41:28
Después de un INSERT SaurioNet SQL 3 02-03-2004 16:19:06
Insert automatico despues de Delete jealousy Conexión con bases de datos 2 20-09-2003 02:25:14


La franja horaria es GMT +2. Ahora son las 03:06:16.


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
Copyright 1996-2007 Club Delphi