Hola a todos, estoy utilizando delphi 2010, windows 8 y los componentes de Interbase (TIBQuery,IBTransaction,TIBDatabase) alojados en un modulo de datos(dm) realizando una aplicacion que busque ciertos registros en base a un CAMPO y un VALOR que solicito al cliente, los muestro posteriorment en un grid, de la sig. manera
Código Delphi
[-]qsql:='select matricul.id,matricula,bastidor, marca, modelo, ano, placasauto, cf1 || '+chr(39)+' '+chr(39)+' || apellido1 || '+chr(39)+' '+chr(39)+' || apellido2 as NOMBRE'+ ' from
matricul join clientes on matricul.rfnclientes=clientes.id' +' where '+Cb_Identificador.Text+' like '+CHR(39)+'%'+Edit_valor.Text+CHR(39);
dm.IBDatabase1.Open;
with dm.IBQuery1 do
begin
if Transaction.Active then
begin
Transaction.Commit;
end;
Transaction.StartTransaction;
SQL.Clear;
SQL.Add(qsql);
OPEN;
Transaction.CommitRetaining;
end;
Hasta aqui todo sigue bien, despues de eso debo actualizar los registros no seleccionados, hice este procedimiento para lograrlo:
Código Delphi
[-]procedure UPDATE_f(dataset: TIBQuery; query: string; msgerror: string);
begin
with dataset do
begin
Transaction.StartTransaction;
SQL.Clear;
SQL.Add(query);
Prepare;
params.ParamByName('id_matricula_nvo').AsInteger:=Form_Seleccion.campo_id_oficial;
ExecSQL;
try
Transaction.Commit;
except
on E: Exception do
begin
Application.MessageBox( PChar( E.Message ), PChar( msgerror ), MB_ICONSTOP );
dataset.Transaction.Rollback;
end;
end;
end;
end;
Al ser muchas querys a actualizar distintas la ejecuto así
Código Delphi
[-]UPDATE_f(dm.IBQuery1,sqql,'Error al actualizar HISTOMAT');
Este lo uso dandole el valor de la query que voy armando en otra parte, el problema es el siguiente y por el cual pongo todo lo anterior:
al llegar a la linea de la funcion, me da una violacion de acceso
Código Delphi
[-]Transaction.StartTransaction;
Ya intenté hacerlo sin el procedure(digamos que escrito una y otra vez, en cada parte), ya probé duplicando los componentes de la base de datos(obviamente cambiando los nombres) y
nada, sigo con el error de la violacion, tambien aparece si en esa linea o en el procedimiento pongo lo sig. :
alguien podria ayudarme? o darme alguna pista de por donde atacar el problema?