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 23-10-2008
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Error con AdoQuery y 2 Form

Hola.
He creado una pequeña aplicación para uso propio que tira de MySql para guardar una lista de Archivos de respaldo en DVD.

Hasta ahora tenía un form principal y un DataModule. En este último un método que es que uso para recoger y guardar datos en la tabla.

Código Delphi [-]
procedure TTDM.GetSql(consulta:string; var ds:Tdataset);
begin
  if not ADCON.Connected then
     ADCON.Connected:=true;

  ADQ.Close;
  adq.SQL.Clear;
  adq.SQL.Text:=consulta;
  adq.Open;
  ds:= adq;

END;

El problema viene cuando al crear una nueva form donde obtengo una lista de archivos agrupados por categorías con el núm de elementos:

Código Delphi [-]
Procedure Tform4.cargaCat;
var
  s: string;
  ds: TdataSet;
begin
s:='Select Categoria, count(*) as n from catdvd group by categoria';
ds:=Tdataset.Create(self);
Tdm.GetSql(s,ds);
with ListBox1 do
begin
  items.Clear;
  ds.First;
  while not ds.Eof do
  begin
    s:=ds.FieldByName('categoria').AsString;
    s:=s+'  ('+ds.FieldByName('n').AsString+')';
    items.Add(s);
    ds.Next;
  end;
end;
ds.Free;
end;

Aquí va todo correctamente, se muestran las categorías y todo.

Pero tras cerrar esta form, cuando hago cualquier nueva consulta desde la form principal da un error de "Access Violation at address..."

Esto pasa siempre que invoco al form de categorías. Y pasa al intentar cerrar el AdoQuery para una nueva consulta.

¿ que puede ser ?

He mirado todo, que no se quede abierto ningun DataSet, que la form de categorías se libere tras cerrarla y no doy con el problema.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #2  
Antiguo 23-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Cecilio, el error creo que te da por esta parte:

Aquí le pasas un dataset como parametro y cuando haces tu consulta con adq le asignas a ds, supongo que adq es un componente que debe estar en tu formulario o tu dataModule.

Código Delphi [-]
procedure TTDM.GetSql(consulta:string; var ds:Tdataset);
begin
  .......................
  ds:= adq;
end;

Y aquí despues de llamar a GetSql liberas ds, pero como en tu metodo le has asignado adq a ds, ambos estan apuntando a la misma dirección de memoria por lo tanto, si liberas uno se libera también el otro. Y al hacer nuevamente la llamada como no estas creando Adq en ejecución, te da el error del AccessViolation.

Código Delphi [-]
Procedure Tform4.cargaCat;
begin
 ds:=Tdataset.Create(self);
 Tdm.GetSql(s,ds);
 .............................
 .............................
 ds.Free;
end;

Porque no trabajas directamente sobre el DataSet que le mandas por parametro.

Código Delphi [-]
procedure TTDM.GetSql(consulta:string; var AdoQuery:TAdoQuery);
begin
  if not ADCON.Connected then
     ADCON.Connected:=true;
  
  AdoQuery.Connection := ADCON;

  AdoQuery.Close;
  AdoQuery.SQL.Clear;
  AdoQuery.SQL.Text:=consulta;
  AdoQuery.Open;
end;

Código Delphi [-]
Procedure Tform4.cargaCat;
var
  s: string;
  ds: TAdoQuery;
begin
  s:='Select Categoria, count(*) as n from catdvd group by categoria';
  ds:=TAdoQuery.Create(self);
  Tdm.GetSql(s,ds);

  with ListBox1 do
  .....................

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 23-10-2008
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Gracias caro

A simple vista creo que tienes razón, no me he dado cuenta que al liberar uno lo hacía con el otro.

Voy a probarlo. Sinceramente Gracias.
__________________
Saludos Cordiales.
------------------

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
Error ADOQuery con Parametros drykea SQL 5 09-09-2008 15:49:09
Qrchart + Adoquery Error Ferrolano Gráficos 0 22-05-2006 10:03:02
Error en ADOQuery ¡¡URGENTE!! Victor Pimentel Conexión con bases de datos 2 25-10-2004 08:34:35
Error al cerrar un ADOQuery Alexander Conexión con bases de datos 2 02-06-2004 13:42:18


La franja horaria es GMT +2. Ahora son las 18:25:43.


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