![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка I/O error 102. Что за ошибка и как убрать? [D5, Win2k]
Guitar © (2004-12-24 21:09:00)Я использую компонент SaveDialog1 для сохранения набора данных из ADOQuery1. Когда выполняется SaveDialog1.Execute то появляется стандартный диалог с пользователем. И если нажать "Отмена" то появляется это ошика. Что это значит и как её обработать?
olookin (2004-12-24 22:09:00) [21][14] Guitar © (24.12.04 22:08)
Но последний CloseFile тоже надо убрать....
Guitar (2004-12-24 22:08:00) [22]Я изменил. Но ничего не получилось.
procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg('Îøèáêà', mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:='';
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+'|'+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage('Îòìåíåíî');
CloseFile(f);
end;
olookin (2004-12-24 22:05:00) [23][11] aus (24.12.04 22:03)
Точно!
begin...end (2004-12-24 22:04:00) [24]> [9] Guitar © (24.12.04 21:55)
Ну вот видите, как просто. Если Вы нажимаете в диалоге кнопку "Отмена", то SaveDialog1.Executeвозвращает False. Файловая переменная fне связывается с маршрутом доступа к файлу. И происходит выполнение строки Rewrite(f). КАКОЙ файл прикажете открывать для записи?
aus (2004-12-24 22:03:00) [25]Assign() у тебя выполняется только если Execute, а CloseFile - в любом случае. Так вот при отмене в диалоговом окне Assign не выполняется, но файл закрыть ты пытаешься в конце процедуры. Отсюда ошибка.
olookin (2004-12-24 21:57:00) [26]procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg('Ошибка', mtinformation, [mbok], 0);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:='';
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+'|'+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage('Отменено');
CloseFile(f);
end;
Я правильно понимаю, что в случае ошибки происходит выход из процедуры? А при этом файл уже открыт, но не закрыт...
Guitar (2004-12-24 21:55:00) [27]procedure TForm1.Button6Click(Sender: TObject);
var
fname,Str :string;
f: textfile;
i: integer;
begin
fname:=edit6.text;
savedialog1.filename:=fname;
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
try
ADOQuery1.First;
except
messagedlg('Ошибка', mtinformation, [mbok], 0);
exit;
end;
Rewrite(f);
while not ADOQuery1.eof do
begin
Str:='';
for i:=0 to ADOQuery1.FieldCount-1 do
Str:=Str+'|'+ADOQuery1.Fields[i].AsString;
WriteLn(f,Str);
ADOQuery1.Next;
end;
end else showmessage('Отменено');
CloseFile(f);
end;
olookin (2004-12-24 21:42:00) [28]Но ведь если судить по моему приблизительному примеру и по [3], то я неправ в корне - 102 не возникает при использовании CloseFile?
begin...end (2004-12-24 21:36:00) [29]> [6] Guitar © (24.12.04 21:31)
А всё-таки покажите СВОЙ код.
Guitar (2004-12-24 21:31:00) [30]В своей программе ошибку я искал и ищу. Не нашёл. (((
Guitar (2004-12-24 21:29:00) [31]4 olookin © (24.12.04 21:15) [1]
Да именненно такой код и есть.
Дело в нём?
olookin (2004-12-24 21:23:00) [32][3] VMcL © (24.12.04 21:16)
* File not assigned
* Reported by Reset, Rewrite, Append, Rename, or Eraseif the file variable has not been assigned a name through a call to Assign or AssignFile.
Вот опять я ошибся...
VMcL (2004-12-24 21:16:00) [33]>> Guitar © (24.12.04 21:09)
> Что это значит
> * 102
* File not assigned
* Reported by Reset, Rewrite, Append, Rename, or Eraseif the file variable has not been assigned a name through a call to Assign or AssignFile.
> как её обработать?
Для начала поискать ошибку в своей программе.
olookin (2004-12-24 21:15:00) [34]Полагаю, что где-то в обработчике сохранения в файл есть что-то подобное:
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
...
...
end else showmessage('Aborted');
CloseFile(f);
Ну вы понимаете, да?
begin...end (2004-12-24 21:15:00) [35]> Guitar © (24.12.04 21:09)
См. I/O errorsв справке Delphi.