Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 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
  #2  
Antiguo 17-07-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ejecuta paso a paso el código.
Normalmemte el error de "Access Violation" da cuando utilizas un objeto que no está correctamente asignado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 17-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 0
cipce22 Va por buen camino
Fue el primer paso

Ejecuté paso a paso, todo va bien hasta llegar a esa linea, he hecho mas pruebas y llegando a la funcion, haga lo que haga, ya no puedo cerrar la transaccion, ya no me permite un commit, rollback, cerrar el dataset o incuso intentar cerrar el componente de la BD
¿Tendrá algo que ver con que el primer select fue mostrado en un dbgrid y no me permite cerrar la conexion?

Estoy sacando chispas y no logro hacer funcionar algo relativamente "sencillo"

) :
Responder Con Cita
  #4  
Antiguo 17-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cipce22 Ver Mensaje
Ejecuté paso a paso, todo va bien hasta llegar a esa linea, he hecho mas pruebas y llegando a la funcion, haga lo que haga, ya no puedo cerrar la transaccion, ya no me permite un commit, rollback, cerrar el dataset o incuso intentar cerrar el componente de la BD
Y cuando llega a esa línea, qué hace. ¿Por qué dices que no puedes cerrar la transacción?, ¿sale algún mensaje?, ¿qué error muestra?
Responder Con Cita
  #5  
Antiguo 18-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 0
cipce22 Va por buen camino
Mira

La cosa es esta

antes de llegar a esta linea (la que me muestra una violacion de acceso):
Código Delphi [-]
Transaction.StartTransaction;


puse lo siguiente, para saber si es que estaba abierta

Código Delphi [-]
if Transaction.Active then                          
                 begin                                       
      Transaction.Commit;                                
           end;

y sì. la muestra como activa comienza con el if, al llegar al commit, me da la misma violacion de acceso, por eso doy por hecho que es por la transaccion pero no estoy seguro, no entiendo del todo, he estado leyendo pero el procedimiento que uso en el select y en el update puestos al principio del post son mis unicas interacciones con la BD, no se cual podra ser el error
Responder Con Cita
  #6  
Antiguo 18-07-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira qué tienes después del commit, entonces, paso a paso, hasta la línea que da el error.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con transaccion mierda SQL 0 05-05-2007 16:23:18
Problema con transaccion en SQL server JuanchoArg SQL 2 13-12-2006 22:59:37
Problema con excepsión y transacción mpedra MS SQL Server 8 11-04-2006 22:33:32
Problema con transaccion con IB reina Varios 2 03-09-2005 02:40:11
Urgente - problema de insertar en tabla - Transaccion Activa Patricio Conexión con bases de datos 2 27-06-2005 16:29:06


La franja horaria es GMT +2. Ahora son las 10:07:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi