Ver Mensaje Individual
  #1  
Antiguo 01-05-2007
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Reputación: 0
Adrian Murua Va por buen camino
Question Firebird Suma 2 valores en un campo autoincrementado en insercion de registro

Estimados Amigos:

Estoy desarrollando un modulo para Agregar, Modificar y Consultar datos de articulos para un kiosco.
Trabajo con Delphi 2005 y Firebird 2.0 y IBX

Tengo 2 tablas Articulos y Marcas( de Articulos ) ej: A: Chocolate - M: Pepito.
la estructura es la sig:

Articulos.

Articulo_ID, Integer, Autoincrem.(clave primaria)
Descripcion, char 50,
Precio Double,
Marca_ID, integer (Foreign Key)
...

Marcas.
Marca_ID, Integer, Autoincrem. (clave primaria)
Nombre char 50
...

Tengo estos formularios:

1. un datamodule que contiene un control IBDatabase, otro IBTransaction configurado:
"
read_committed
rec_version
nowait
"
y en defaultaction: "TACommitRetaining"., Ademas 2 IBDataset : Articulos y Marcas, donde Marcas tiene las siguientes definiciones en :
InsertSQL : "insert into Marcas( Nombre ) Values ( :Nombre )"
SelectSQL: "Select * from Marcas"
RefreshSQL: "Select * from Marcas"
GeneratorField :
"
Generator : MARCAS_MARCAID_GEN
field : MARCA_ID
INCREMENT BY : 1
EVENT : ON NEW RECORD;
"

2. Formulario para agregar, modificar articulos , que contiene una grilla en la cual presionando un boton se abre otro formulario para ingresar un articulo nuevo. Este formulario tiene controles del tipo TEdit y un boton para grabar.
En un control TComboBox selecciono la marca del producto o la agrego mediante un boton, donde se abre otro formulario para agregar la Marca (Nombre solamente), cuando termina de agregar la marca, sigo agregando los datos del articulo..

Pues bien, cuando termino de agregar la marca y se cierra el formulario (de Marcas), me graba el nuevo registro( nombre de la marca ) pero el Marca_ID , que es el campo autoincrementado, en vez de sumar 1 al ultimo, suma 2.
el codigo donde grabo los datos en la tabla de Marcas es el siguiente:

Código Delphi [-]
procedure TFrmMarcas.AgregarClick(Sender: TObject);
begin
        if Application.MessageBox('Graba los Datos ????','Información',
           MB_ICONQUESTION+MB_DEFBUTTON1+MB_YESNO)= 6 then
           begin
              with datos.Marcas do
              begin
                  append;
                  fieldbyname('Nombre').AsString := trim(eNombre.text);
                   Post;
              end;
              datos.Transaccion.CommitRetaining;
           end;
  close;

end;

Cuando se ejecuta la linea coloreada ya se observa ( con el IBExpert ) el incremento incorrecto.

Que puede estar sucediendo ?-

Desde ya Muchas Gracias
__________________
Adrián Murúa.
Responder Con Cita