Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.038 c
3-1103184184
Sergo
2004-12-16 11:03
2005.01.16
IBDataBase


3-1102840739
kvit
2004-12-12 11:38
2005.01.16
Query1


3-1103012079
MgFox
2004-12-14 11:14
2005.01.16
ADO Connection String не создается


14-1103707677
infom
2004-12-22 12:27
2005.01.16
Играете ли вы на работе в Counter Strike ?


3-1102657832
zunder
2004-12-10 08:50
2005.01.16
Run-Time Error: Expression illegal in evaluator





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский