Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизОшибка I/O error 102. Что за ошибка и как убрать? Найти похожие ветки
← →
Guitar © (2004-12-24 21:09) [0]Я использую компонент SaveDialog1 для сохранения набора данных из ADOQuery1. Когда выполняется SaveDialog1.Execute то появляется стандартный диалог с пользователем. И если нажать "Отмена" то появляется это ошика. Что это значит и как её обработать?
← →
olookin © (2004-12-24 21:15) [1]Полагаю, что где-то в обработчике сохранения в файл есть что-то подобное:
if SaveDialog1.Execute then begin
AssignFile(f,SaveDialog1.FileName);
...
...
end else showmessage("Aborted");
CloseFile(f);
Ну вы понимаете, да?
← →
begin...end © (2004-12-24 21:15) [2]> Guitar © (24.12.04 21:09)
См. I/O errors в справке Delphi.
← →
VMcL © (2004-12-24 21:16) [3]>>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:23) [4][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.
Вот опять я ошибся...
← →
Guitar © (2004-12-24 21:29) [5]4 olookin © (24.12.04 21:15) [1]
Да именненно такой код и есть.
Дело в нём?
← →
Guitar © (2004-12-24 21:31) [6]В своей программе ошибку я искал и ищу. Не нашёл. (((
← →
begin...end © (2004-12-24 21:36) [7]> [6] Guitar © (24.12.04 21:31)
А всё-таки покажите СВОЙ код.
← →
olookin © (2004-12-24 21:42) [8]Но ведь если судить по моему приблизительному примеру и по [3], то я неправ в корне - 102 не возникает при использовании CloseFile?
← →
Guitar © (2004-12-24 21:55) [9]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:57) [10]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;
Я правильно понимаю, что в случае ошибки происходит выход из процедуры? А при этом файл уже открыт, но не закрыт...
← →
aus (2004-12-24 22:03) [11]Assign() у тебя выполняется только если Execute, а CloseFile - в любом случае. Так вот при отмене в диалоговом окне Assign не выполняется, но файл закрыть ты пытаешься в конце процедуры. Отсюда ошибка.
← →
begin...end © (2004-12-24 22:04) [12]> [9] Guitar © (24.12.04 21:55)
Ну вот видите, как просто. Если Вы нажимаете в диалоге кнопку "Отмена", то SaveDialog1.Execute возвращает False. Файловая переменная f не связывается с маршрутом доступа к файлу. И происходит выполнение строки Rewrite(f). КАКОЙ файл прикажете открывать для записи?
← →
olookin © (2004-12-24 22:05) [13][11] aus (24.12.04 22:03)
Точно!
← →
Guitar © (2004-12-24 22:08) [14]Я изменил. Но ничего не получилось.
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:09) [15][14] Guitar © (24.12.04 22:08)
Но последний CloseFile тоже надо убрать....
← →
begin...end © (2004-12-24 22:11) [16]> [14] Guitar © (24.12.04 22:08)
Конечно, ничего не изменилось. А что должно было измениться-то? Ситуация, которую я описал в [12], осталась. Вы по-прежнему пытаетесь открыть для записи файл, с которым не связан путь с помощью AssignFile.
← →
Guitar © (2004-12-24 22:11) [17][11] aus (24.12.04 22:03)
Вы ПРАВЫ!!!
Тема закрыта.
← →
Guitar © (2004-12-24 22:14) [18]А нет не прошло, сейчас по другой причине вылазит.
4 begin...end © (24.12.04 22:11) [16]
Сейчас попробую исправить.
← →
begin...end © (2004-12-24 22:21) [19]> Guitar
Приношу извинения. В [12] и [16] я НЕ ПРАВ. Ошибка в чём-то другом.
Запутался в end"ах.
Ещё раз - извините.
← →
olookin © (2004-12-24 22:25) [20]Э... А если exception не срабатывет, то все остальное работает отлично, да?
← →
Guitar © (2004-12-24 22:27) [21]КОроче я сам запутался. )))))))))ХА ХА)))
Буду искать. )))
← →
olookin © (2004-12-24 22:28) [22]Но хотя бы отладчик где отсанавливается?
← →
Zeqfreed © (2004-12-24 22:36) [23]Так должно работать:
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("Error?", mtinformation, [mbok], 0);
CloseFile(f);
Exit;
end;
Rewrite(f);
while not ADOQuery1.EOF do begin
Str := "";
for i := 0 to ADOQuery1.FieldCount - 1 do begin
Str := Str + "|" + ADOQuery1.Fields[i].AsString;
WriteLn(f, Str);
ADOQuery1.Next;
end;
end;
CloseFile(f);
end else showmessage("Cancel");
end;
← →
Guitar © (2004-12-24 22:36) [24]Вот такой вопрос. Это я плохо поимаю. В коде
try
ADOQuery1.First;
except
messagedlg("Îøèáêà", mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
Когда срабатываетexit
, то программы выходит из процедурыprocedure TForm1.Button6Click(Sender: TObject);
или какой то её части?
← →
Zeqfreed © (2004-12-24 22:40) [25]Выходит из процедуры...
← →
Guitar © (2004-12-24 22:43) [26]4 Zeqfreed
А что изменилось. И зачем?
← →
Zeqfreed © (2004-12-24 22:49) [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("Error?", mtinformation, [mbok], 0);
CloseFile(f);
Exit;
end; //Закончить обработку исключительной ситуации надо?
Rewrite(f);
while not ADOQuery1.EOF do begin
Str := "";
for i := 0 to ADOQuery1.FieldCount - 1 do begin
Str := Str + "|" + ADOQuery1.Fields[i].AsString;
WriteLn(f, Str);
ADOQuery1.Next;
end; //чтобы все 3 строки выполнялись в цикле
end;
CloseFile(f);
end else showmessage("Cancel");
end;
Ещё что-то вроде менял, не помню
Ты попробовал? не работает?
← →
Zeqfreed © (2004-12-24 22:50) [28]хм, сорри, вроде энд там и был, запутался ) сорри
← →
Zeqfreed © (2004-12-24 22:51) [29]блин, ваще все нафиг перепутал я там ))
спать видимо пора
← →
Guitar © (2004-12-24 22:53) [30]Сейчас ошибка стала появляться в результате другого события. Если в ADOQuery нет данных. А пользователь всё-равно пытается сохранить файл.
Может это о чём-то кому-то скажет...
← →
Guitar © (2004-12-24 22:55) [31]Эта ошибка появляется после моего сообщения "Ошибка".
try
ADOQuery1.First;
except
messagedlg("Îøèáêà", mtinformation, [mbok], 0);
CloseFile(f);
exit;
end;
← →
Zeqfreed © (2004-12-24 22:55) [32]а может попробовать назначить файл после ADO...First?
← →
Zeqfreed © (2004-12-24 22:56) [33]какая именно ошибка? EDatabaseError?
← →
Guitar © (2004-12-24 23:01) [34]Не, её то как раз я пытался обработать этим кодом, что выше. А после моего сообщения вылазит системная ошибка
Project1:I/O error 102
← →
Guitar © (2004-12-24 23:10) [35]Всё. Сделал. ))) Тема закрыта.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.041 c