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 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
  #2  
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.057
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
  #3  
Antiguo 18-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cipce22.

Dos consultas:
  • ¿ Form_Selección y campo_id_oficial están creados cuando llamas al procedimiento UPDATE_f ?
  • ¿ Cual es el contenido de la variable sqql cuando es enviada como argumento al procedimiento UPDATE_f ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 19-07-2015
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
A ver si puede ser este el problema, en la prtimera linea de tu mensaje pones 'qsql:='select ......', luego llamas a UPDATE_f(dm.IBQuery1,sqql,'Error al actualizar HISTOMAT');

Saludos
Responder Con Cita
  #5  
Antiguo 20-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 0
cipce22 Va por buen camino
Cita:
Empezado por jafera Ver Mensaje
A ver si puede ser este el problema, en la prtimera linea de tu mensaje pones 'qsql:='select ......', luego llamas a UPDATE_f(dm.IBQuery1,sqql,'Error al actualizar HISTOMAT');

Saludos

fue error de dedo, realmente si uso la variable qsql de tipo string : (

Gracias por responder jafera
Responder Con Cita
  #6  
Antiguo 20-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cipe22.

Dado que recibis un error Access Violation, apunto a que estas referenciando un objeto inexistente. Como para ir circunscribiendo el error, intentá hacer esta prueba:
Código Delphi [-]
procedure  UPDATE_f(dataset: TIBQuery; query: string; msgerror: string);
begin
  (* LINEAS AGREGADAS *)
  try
    ShowMessage(Transaction.Name);
  except
    raise Exception.Create('Transaction aún no ha sido creado');
  end;
  try
    ShowMessage(dataset.ClassName);
  except
    raise Exception.Create('dataset aún no ha sido creado');
  end;
  try
    ShowMessage(Form_Seleccion.Caption);
  except
    raise Exception.Create('Form_Selection aún no ha sido creado');
  end;
  try
    ShowMessage(IntToStr(Form_Seleccion.campo_id_oficial));
  except
    raise Exception.Create('campo_id_oficial aún no ha sido creado');
  end;
  (* FIN LINEAS AGREGADAS *)

  { código original
  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;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 21-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 0
cipce22 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola cipe22.

Dado que recibis un error Access Violation, apunto a que estas referenciando un objeto inexistente. Como para ir circunscribiendo el error, intentá hacer esta prueba:
Código Delphi [-]procedure UPDATE_f(dataset: TIBQuery; query: string; msgerror: string); begin (* LINEAS AGREGADAS *) try ShowMessage(Transaction.Name); except raise Exception.Create('Transaction aún no ha sido creado'); end; try ShowMessage(dataset.ClassName); except raise Exception.Create('dataset aún no ha sido creado'); end; try ShowMessage(Form_Seleccion.Caption); except raise Exception.Create('Form_Selection aún no ha sido creado'); end; try ShowMessage(IntToStr(Form_Seleccion.campo_id_oficial)); except raise Exception.Create('campo_id_oficial aún no ha sido creado'); end; (* FIN LINEAS AGREGADAS *) { código original 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;


Saludos
Gracias ecfisa, probando eso, todo está en su sitio, cada cosa ha sido creada y se muestran los valores en los mensajes

revisando el codigo ¿Esta linea podria ser la culpable?
Código Delphi [-]
Grid_sel.DataSource:=nil;
Grid_sel es un gridview en el cual muestro el resultado del primer select, el cual voy a tratar, con esa linea pretendo desasociar el dataset al gridview ¿es correcto?
Responder Con Cita
  #8  
Antiguo 20-07-2015
cipce22 cipce22 is offline
Miembro
NULL
 
Registrado: may 2015
Posts: 22
Poder: 0
cipce22 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola cipce22.

Dos consultas:
  • ¿ Form_Selección y campo_id_oficial están creados cuando llamas al procedimiento UPDATE_f ?
  • ¿ Cual es el contenido de la variable sqql cuando es enviada como argumento al procedimiento UPDATE_f ?
Saludos
Hola ecfisa, gracias por responder

Al ir con el depurador paso a paso sí me detecta el valor de Form_Seleccion.campo_id_oficial, de hecho los he mostrado en un mensaje en pantalla antes de mandarlos a la funcion, tanto como la sentencia SQL y el valor de la variable si estan ahí : (, la sentencia sql tal cual la copie del mensaje y ejecute en ibexpert y funcionó.

Estoy muy confundido he probado otras opciones, he creado otra transaccion (TIBTransaction) asosiada al mismo dataset(TIBquery) y a la misma BD (TIBDatabase), pero no la uso, solo lo he creado, al llegar a esta parte he intentado usar esa nueva transaccion y me la marca como ABIERTA, pero no he usado esta.... las sentencias del select y del update no son sobre la misma tabla ni estan ligadas en nada... hoy me tocas sufir con esto, llevo dias
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 19:08:01.


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