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