Esa es la parte que escribe la lista de nombres de campos. En el resto del código no se hace referencia a ese objeto, por eso lo libero nada más terminar.
De todas formas voy a poner el procedimiento completo.
Código Delphi
[-]
procedure TForm1.Generico(tb: string);
var
s: string;
t: TextFile;
n,v: integer;
gs: TstringList;
ibb: TIBquery;
begin
AssignFile(t,destino.Text+tb+'.txt');
rewrite(t);
if not IBDatabase1.Connected then
begin
IBDatabase1.DatabaseName:=server.Text;
ibDatabase1.Connected:=true;
end;
ibb:= TibQuery.Create(nil);
ibb.Database:=Ibdatabase1;
ibb.Transaction:=IbTransaction1;
Ibb.SQL.Add('select * from '+tb);
ibb.Open;
ibb.First;
ibb.Last;
Progressbar1.Max:=Ibb.RecordCount;
progressbar1.Position:=0;
gs:=TstringList.Create;
gs:=ibb.FieldList;
s:='';
for v:=0 to gs.Count-1 do
s:=s+gs[v]+';';
writeln(t,s);
ibb.First;
n:=0;
while not ibb.Eof do
begin
s:='';
for v:=0 to ibb.FieldCount-1 do
s:=s+ibb.Fields.Fields[v].AsString+';';
writeln(t,s);
inc(n);
progressbar1.Position:=n;
ibb.Next;
end;
closeFile(t);
ibb.Close;
ibb.Free;
end;
(en este, he probado a ponerlo al final y solo no da error cuando está comentado y no actua.)
El error es algo como: "Exeception class EAccessViolation with message "Access violation at adress 000000. Read of adress 000000. Proced stoped"
Lo genera el debuger, creo.