Hola.
El error sucede por que no estas abriendo el archivo antes de escribir en él.
Pero además, la parte de tu código que debería copiar todos los registros desde el DBGrid sólo copiaría el actual.
Probá de este modo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
const
TAB = #9;
var
i: Integer;
Cabecera: string;
T: TextFile;
BM: TBookmarkStr;
begin
Dialogo.Initialdir := ExtractFilePath(application.ExeName);
Dialogo.Title := 'Indicar localización y nombre del archivo a grabar';
Dialogo.Filter := 'Archivos txt|*.txt';
if Dialogo.Execute then
begin
if FileExists(Dialogo.Filename) and
(Application.MessageBox('El fichero ya existe, ¿desea reemplazarlo?',
'ATENCION',MB_YESNO + MB_ICONWARNING) = IDNO) then
Exit;
AssignFile(T, Dialogo.FileName);
Rewrite(T);
Cabecera:= '';
for i:= 0 to DBGRid1.Columns.Count -1 do
Cabecera:= Cabecera + DBGrid1.Columns[i].Title.Caption + TAB;
Writeln(T, Cabecera);
BM:= DBGrid1.DataSource.DataSet.Bookmark;
DBGrid1.DataSource.DataSet.DisableControls;
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
begin
Writeln(T, Trim(DBGrid1.Columns[0].Field.AsString)+ TAB +
Trim(DBGrid1.Columns[2].Field.AsString)+ TAB +
Trim(DBGrid1.Columns[2].Field.AsString));
DBGrid1.DataSource.DataSet.Next;
end;
DBGrid1.DataSource.DataSet.Bookmark:= BM;
DBGrid1.DataSource.DataSet.EnableControls;
CloseFile(T);
end;
end;
Un comentario, este modo con el que guardas no tabulará correctamente los datos.
Saludos.