Ver Mensaje Individual
  #2  
Antiguo 23-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Reputación: 24
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