PDA

Ver la Versión Completa : Problema con Insert dentro de Evento BeforePost


Jvilomar
21-11-2007, 15:52:40
Saludos mis queridos amigos...

Me gustari saber si pueden alludarme a solucionar una duda...

Utilizo Delphi 7, Con TADOQuery y me conecto a una Base de Datos SQL SErver 2000.

Tengo dos tablas T1 y T2 lo que deseo es que en el evento BeforePost de la Tabla 1 me haga una insercion de ciertos datos en la T2. Pero no puedo conseguir que ejecute la insercion en la t2.



procedure DataModulo.aoqryAnularBeforePost(DataSet : TDataSet);
Begin
with qryConsulta do
begin
Connection := SGGC;
Close;
SQL.Clear;
SQL.Add('Select * from tClientesApartamentos where idCuenta =:idCliente');
Parameters[0].Value := DataSet['idCliente'];
Open;
if IsEmpty then
begin
with qryActualizar do
begin
Connection := SGGC;
Close;
SQL.Clear;
SQL.Add('Insert into tClientesApartamentosTrans ');
SQL.Add('Select * from tClientesApartamentos where idCuenta =:idCliente');
ExecSQL;
End;
End;
End;
End;



el asunto es que cuando ejecuto el query que hace la insercion me parece que pierdo el estado del primer query.. podria alguien confirmarme que sucede o a lo mejor darme una idea de hacer esto mismo de una forma menos chapusera...

Gracias de AnteMano

hades2600
21-11-2007, 16:21:48
En ese código veo varios problemas.

En primer lugar tienes dos instrucciones with anidadas. Eso puede provocar que Delphi se vuelva loco y no tenga claro sobre qué consulta tiene que ejecutar cada una de las instrucciones. No debería tener nada que ver con tu problema, pero puede ayudar a leer mejor el código, tanto tú como como Delphi.

En segundo lugar, no tienes ningún tipo de protección de las instrucciones, es decir, no controlas que si alguna de la consulta de inserción produce un error, no se ejecute la instrucción principal (sentencia try...except/finally...end).

A la vista de tu código creo que tu problema viene porque intentas insertar en la tabla tClientesApartamentosTrans una serie de valores nulos (fíjate bien y verás:

if IsEmtpy then <- Hace referencia a QueryConsulta

después el insert lo haces con la misma tabla que te ha salido que está en blanco.

Además, ten en cuenta que no has asignado ningún valor al parámetro de la consulta de inserción, con lo cual puedes tener cualquier cosa en el parámetro menos lo que toca.

No sé si me explicado bien. Si tienes alguna duda, no dudes en preguntar.

poliburro
21-11-2007, 16:31:12
Un consejo, si usas Sql Server 2000, aprovecha la potencia de los procedimientos almacenados.

Puedes hacer un procedimiento que inserte en la primera tabla y despúes de esa inserción, proceda a insertar en la segunda.

:) Suerte