Ver Mensaje Individual
  #1  
Antiguo 17-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Reputación: 0
cipce22 Va por buen camino
Problema al comenzar transaccion

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. :
Código Delphi [-]
dm.IBDatabase1.Close;


alguien podria ayudarme? o darme alguna pista de por donde atacar el problema?

Última edición por Neftali [Germán.Estévez] fecha: 17-07-2015 a las 08:56:07. Razón: corrección de formato
Responder Con Cita