Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка I/O error 102. Что за ошибка и как убрать? [D5, Win2k]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо