PDA

Ver la Versión Completa : al insertar algo en una tabla paradox.....


Rafe
02-08-2005, 02:28:59
Hola que tal ? , mi pregunta es la siguiente..... :
Yo tengo una tabla con un listado de productos, representada en un dbgrid, yo quiero que cuando agregue algun producto en esa tabla usando el dbgrid se me agregue en otra tabla que tengo. Uso el evento de la tabla "After Insert" para agregar , pero como hago para almacenar el producto que agrego , lo que hice yo fue esto ... :

Table1.AppendRecord ([table2.FieldByName('Nombre Producto').AsString]
pero me agrega solo vacio , porque no vale nada table2.FieldByName('Nombre Producto').AsString
en la tabla2 es en la que estoy insertando.

Como`podria hacer ??????? gracias!!!!

Lepe
02-08-2005, 11:46:29
This statement appends a record to the Customer table. Note that Nulls are entered for some of the values, but are not required for missing values at the end of the array argument, i.e. after the Discount field.

Customer.AppendRecord([CustNoEdit.Text,CoNameEdit.Text, AddrEdit.Text, Null, Null, Null, Null, Null, Null, DiscountEdit.Text]);

Como ves, tienes que pasarle valores a todos los campos.

Otro método podría ser:

table1.Append;
table1.FieldbyName('lo que sea ').AsString := table2.FieldbyName('nombre producto').asString;

table1.Post;


Otra forma, creando una query de actualizacion:

var q:Tquery;
begin
q := Tquery.Create(nil);
try
q.sql.text := 'INSERT INTO tablaDestino SET campo1 = valor1, campo2 = valor2';
q.ExecSql;
finally
freeandnil(q);
end;
end;


A ver cual te gusta más ;)

Un saludo

basti
02-08-2005, 13:58:43
Aparte de lo que te bien te dice Lepe, no debes utilizar el evento AfterInser en este caso, ya que este evento va después de insertar pero antes de introducir los datos. Deberías de ponerlo en el evento afterPost de la table2, comprobando si se trata de una inserción.


if Table2.State = dsInsert then
// aquí el código para insertar


un saludo

Rafe
02-08-2005, 17:23:27
Pero como hago para saber cual es el nuevo q inserte(estando siempre en el evento after insert o before insert) ????

Lepe
02-08-2005, 17:44:10
Puedes usar el evento más cercano a guardar los datos: BeforePost, pero haciendo la comprobación del millón:


if dsInsert inTableXXX.State then
// Va a ser guardado por primera vez.
// todos los datos deberían estar asignados.


La primera vez que se guarde el registro, entrará en el IF, cuando posteriormente se modifique el registro, ya no entra, porque el estado será dsEdit.

Mira en la ayuda de delphi por "TDataSetState type" verás en todos los estados que puede estar un dataset.

Un saludo