Error 102 delphi

I/O 102 Delphi Решение и ответ на вопрос 184315

ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

1

31.10.2010, 14:26. Показов 12906. Ответов 18


Работаю с файлами (записываю типизированный файл)
В результате чего вылетает такая ошибка? I/O 102
я бы скинул код но там у меня запутанно.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

31.10.2010, 14:26

18

960 / 801 / 85

Регистрация: 21.07.2010

Сообщений: 3,522

31.10.2010, 14:40

2

PointsEqual, насколько я помню те страховка нужна, типа try
выложи код того района где выводится ошибка, и текст ошибки полностью



0



PointsEqual

ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

31.10.2010, 14:52

 [ТС]

3

ошибка: raised exception class EInOutError with message ‘I/O error 102’

unit1

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, jpeg, ExtCtrls, Grids;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N0: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N111: TMenuItem;
    N121: TMenuItem;
    N4: TMenuItem;
    N141: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N111Click(Sender: TObject);
    procedure N121Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses Unit2, Unit3;
 
type TZmain=record //NO?OEOO?A AE? INIIAIIAI OAEEA (oeiece?iaaiiiai oaeea)
     IDshop:        integer;    //  Eia oaoa:
     day:           byte;       //  Aaiu:
     month:         byte;       //  Ianyo:
     IDproduct:     string[26]; //  ID ecaaeey:
     cntProduct:    integer;    //  Eiee?anoai ecaaeee:
     cost1Product:  integer;    //  Oaia iaiiai ecaaeey:
 
end;
 
type TZreferenceBook=record //NO?OEOO?A AE? NI?AAI?IEEA (oaenoiaiai oaeea)
     IDshop:    integer;       //  Eia oaoa:
     nameShop:  string[26];    //  Iaeiaiiaaiea oaoa:
     FIO:       string[50];    //  OEI ia?aeuieea oaoa:
     phone:     string[26];    //  Oaeaoii:
end;
 
{$R *.dfm}
var
  sn: ansistring;
  s:string;
  Fmain:  file of TZmain;
  Zmain:  TZmain;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  form1.Width := 900;
  N0.Visible := false;
  N1.Visible := false;
  N2.Visible := false;
  N3.Visible := false;
end;
 
procedure TForm1.N15Click(Sender: TObject);
var
  f: integer;
begin
    f := MessageDlg('Au oaa?aiu ?oi oioeoa aueoe ec i?ia?aiiu', mtWarning, [mbOk,mbCancel],0);
    if (f = mrOk) then application.Terminate;
end;
 
procedure TForm1.N111Click(Sender: TObject);
begin
    s:=InputBox('Nicaaiea oaeea','aaaaeoa eiy','a.txt');
    AssignFile(Fmain,s);
    rewrite(Fmain);
     closefile(Fmain);
    mainf.Show;
 
end;
 
procedure TForm1.N121Click(Sender: TObject);
begin
  //Append(Fmain);
end;
 
procedure TForm1.Image1Click(Sender: TObject);
begin
  N0.Visible := true;
  N1.Visible := true;
  N2.Visible := true;
  N3.Visible := true;
  Image1.Visible := false;
end;
 
procedure TForm1.N6Click(Sender: TObject);
begin
  reference_book.Show;
end;
 
end.

unit2

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  Tmainf = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    Label7: TLabel;
    Button2: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    ComboBox5: TComboBox;
    ComboBox6: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  mainf: Tmainf;
 
implementation
 
uses Unit1, Unit3;
 
type TZmain=record //NO?OEOO?A AE? INIIAIIAI OAEEA (oeiece?iaaiiiai oaeea)
     IDshop:        integer;    //  Eia oaoa:
     day:           byte;       //  Aaiu:
     month:         byte;       //  Ianyo:
     IDproduct:     string[26]; //  ID ecaaeey:
     cntProduct:    integer;    //  Eiee?anoai ecaaeee:
     cost1Product:  integer;    //  Oaia iaiiai ecaaeey:
 
end;
 
{$R *.dfm}
Var
    Zmain:  TZmain;
    Fmain:  file of TZmain;
    s:      string;
 
procedure Tmainf.Button1Click(Sender: TObject);
begin
reset(Fmain);
with Zmain do
  begin
     IDshop       := strtoint(ComboBox1.Text);
     day          := strtoint(ComboBox2.Text);
     month        := strtoint(ComboBox3.Text);
     IDproduct    :=         (ComboBox4.Text);
     cntProduct   := strtoint(ComboBox5.Text);
     cost1Product := strtoint(ComboBox6.Text);
    write(Fmain,Zmain);
  end;
end;
 
end.

указывает на эту строку в UNIT2

Delphi
1
reset(Fmain);



0



39 / 39 / 2

Регистрация: 19.09.2010

Сообщений: 95

31.10.2010, 15:25

4

PointsEqual, на всякий случай проверяйте что копируете из Delphi.
Если идут кракозябры вместо русских символов советую попробовать переключить раскладку клавиатуры на русский а потом копировать — мне часто помогало.



0



ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

31.10.2010, 15:27

 [ТС]

5

кракозябры тут не важны, они появились в результате копирования из делфи в блокнот и на форум. Проблема в ошибке i/o 102



0



39 / 39 / 2

Регистрация: 19.09.2010

Сообщений: 95

31.10.2010, 15:56

6

Цитата
Сообщение от PointsEqual
Посмотреть сообщение

кракозябры тут не важны, они появились в результате копирования из делфи в блокнот и на форум. Проблема в ошибке i/o 102

Полностью с Вами согласен, только единственное, что коментарии читать легче — поэтому и написал, а пока пытаюсь найти в своих ресурсах информацию об ошибке.

Добавлено через 7 минут
Ага нашел в справке Delphi:

100
Disk read error
Reported by Read on a typed file if you attempt to read past the end of the file.

101
Disk write error
Reported by CloseFile, Write, WriteIn, or Flush if the disk becomes full.

102
File not assigned
Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.

103
File not open
Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open.

104
File not open for input
Reported by Read, Readln, Eof, Eoln, SeekEof, or SeekEoln on a text file if the file is not open for input.

105
File not open for output
Reported by Write or Writeln on a text file if you do not generate a Console application.

106
Invalid numeric format
Reported by Read or Readln if a numeric value read from a text file does not conform to the proper numeric format.

Если надо могу перевести.

Добавлено через 11 минут

Цитата
Сообщение от PointsEqual
Посмотреть сообщение

Fmain: file of TZmain;
//…
reset(Fmain);

Да кракозябры тут совсем не причем.

Закрытая переменная Fmain в UNIT2 встречается у Вас только дважды и нигде не ассоциируется с файлом.
А то что у Вас в другом модуле одноименная переменная есть, Так это совсем неважно первой.



2



ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

31.10.2010, 16:00

 [ТС]

7

sCreator, можете помочь разобратся в каком из юнитов какие переменные нужно оставить а какие лишние?

цель:
на первой форме(UNIT1) создаю типизированный файл , потом на второй форме(UNIT2) я записываю в этот файл данные



0



__PION__

960 / 801 / 85

Регистрация: 21.07.2010

Сообщений: 3,522

31.10.2010, 16:17

8

PointsEqual, здесь смари такая тема, ты пытаешься открыть файл, не проверив существует ли он, а это не безопасно, прога может сорваться если вдруг не будет фала:

Delphi
1
2
3
4
    s:=InputBox('Nicaaiea oaeea','aaaaeoa eiy','a.txt');
    AssignFile(Fmain,s);
    rewrite(Fmain);
     closefile(Fmain);

добавь такие вещи, для безопасности

Delphi
1
2
3
4
5
6
7
    s:=InputBox('Nicaaiea oaeea','aaaaeoa eiy','a.txt');
if FileExists('Fmain') then
    AssignFile(Fmain,s);
{$I-}  // это спец директивы
    rewrite(Fmain);
{$I+}
     closefile(Fmain);

просто имей ввиду

Добавлено через 2 минуты
после второй директивы может следовать такая проверка

Delphi
1
2
if IOResult = 0 then  begin
// дальнейший код в зависимости от проги....

Добавлено через 1 минуту
PointsEqual, ты подсоединил UNIT1 для UNIT2, сделай на всякий случай и обратную операцию, и для UNIT3, если она у тя есть



1



ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

31.10.2010, 16:20

 [ТС]

9

Цитата
Сообщение от Love_and_Peace
Посмотреть сообщение

PointsEqual, ты подсоединил UNIT1 для UNIT2, сделай на всякий случай и обратную операцию, и для UNIT3, если она у тя есть

ок, но он пока у меня пустой все равно.



0



39 / 39 / 2

Регистрация: 19.09.2010

Сообщений: 95

31.10.2010, 16:24

10

Во первых определитесь в какой форме он должен находиться, и оставьте в одном экземпляре ( где его местоположение — а то в Вашем примере в первой форме он открывается и на следующей строчке закрывается — я лично не понял).

Ага — если правильно понял mainf у Вас форма для редактирования файла.
После записи в файл она должна закрыться?
или может вообще должна быть модальная?



0



ниначмуроФ

851 / 535 / 110

Регистрация: 12.10.2009

Сообщений: 1,913

31.10.2010, 16:33

 [ТС]

11

Цитата
Сообщение от sCreator
Посмотреть сообщение

Ага — если правильно понял mainf у Вас форма для редактирования файла.

правильно.

Цитата
Сообщение от sCreator
Посмотреть сообщение

После записи в файл она должна закрыться?

да

Цитата
Сообщение от sCreator
Посмотреть сообщение

Во первых определитесь в какой форме он должен находиться, и оставьте в одном экземпляре ( где его местоположение — а то в Вашем примере в первой форме он открывается и на следующей строчке закрывается — я лично не понял).

closefile я убрал

Добавлено через 1 минуту
Ладно. Спасибо всем. Я тут подправил подкорректировал — ошибки исчезли. В файл все пишется.



0



sCreator

39 / 39 / 2

Регистрация: 19.09.2010

Сообщений: 95

31.10.2010, 16:33

12

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  public
    { Public declarations }
    Fmain:  file{ of TZmain};
    procedure MyFileSave(fileName: string);
  end;
 
var
  mainf: Tmainf;
 
 
implementation
 
{$R *.dfm}
 
procedure Tmainf.MyFileSave(fileName: string);
begin
    AssignFile(Fmain,s);
    rewrite(Fmain);
    Self.Show();
    // затем гдето идет запись и закрытие файла
end;

Хотя за это мне бы давно по рукам настучали. как и за глобальные переменные типа

Delphi
1
2
var
  mainf: Tmainf;



1



3 / 3 / 0

Регистрация: 16.05.2019

Сообщений: 145

12.12.2019, 12:25

13

У меня возникала такая ошибка (IO 102) при отмене диалога сохранения. (к примеру, случайно нажал на него)
Использовал метод
try

finally
SaveTextFileDialog1.FreeOnRelease;

Ошибка исчезла.



0



Модератор

3199 / 1813 / 664

Регистрация: 15.11.2015

Сообщений: 7,259

12.12.2019, 12:44

14

Цитата
Сообщение от Hevard
Посмотреть сообщение

Ошибка исчезла.

С try скорее всего ошибка не исчезла, а просто скрыта от глаз пользователя. При отмене диалога открытия надо сразу выйти из процедуры, а не пытаться дальше работать с файлом.



0



3 / 3 / 0

Регистрация: 16.05.2019

Сообщений: 145

12.12.2019, 13:49

15

Цитата
Сообщение от AzAtom
Посмотреть сообщение

При отмене диалога открытия надо сразу выйти из процедуры, а не пытаться дальше работать с файлом.

Если диалог отменён, то о какой работе может идти речь? Вообще, процесс должен быть автоматически завершаем, со всеми вытекающими.



0



mr-Crocodile

2802 / 1481 / 594

Регистрация: 19.03.2019

Сообщений: 4,907

12.12.2019, 14:34

16

Цитата
Сообщение от Hevard
Посмотреть сообщение

Если диалог отменён, то о какой работе может идти речь?

так и говорю — о какой?

Delphi
1
2
3
4
5
begin
   if SaveDialog1.Execute then begin
      ... код тут ....
   end
end;



0



Hevard

3 / 3 / 0

Регистрация: 16.05.2019

Сообщений: 145

12.12.2019, 15:00

17

Без Try и Finally при отмене диалога возникала ошибка «I/O error 102»

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if SaveTextFileDialog1.Execute then
    if FileExists(SaveTextFileDialog1.FileName) then
       raise Exception.Create('Такой файл уже создан.')
    else
       try
    AssignFile (DataFile,NameToFile+'.txt');
    Rewrite (DataFile);
    WriteLn (DataFile, Label1.Caption+' '+Edit1.Text);  // ФИО
    WriteLn (DataFile, Label2.Caption+' '+MaskEdit1.Text);  // Дата рождения
    WriteLn (DataFile, Label3.Caption+' '+Edit3.Text);  //  Возраст
    WriteLn (DataFile, Label4.Caption+' '+Edit4.Text+' '+Edit5.Text); // Адрес
    CloseFile(DataFile);
      finally
      SaveTextFileDialog1.FreeOnRelease;
    end;
end;



0



Flip

333 / 168 / 68

Регистрация: 25.02.2018

Сообщений: 611

12.12.2019, 15:32

18

А если так?

Delphi
1
2
3
4
5
6
7
8
9
10
11
Procedure Save;
begin
    // Если файл не указан, или нажата кнопка "Отмена", либо диалог закрыт по клавише Esc, то...
    if not SaveDialog1.Execute then
        // выходим.
        Exit;
        // Если файл указан и нажата кнопка сохранить,то....
    begin
    {тут что-то делаем}
    end;
end;



0



AzAtom

Модератор

3199 / 1813 / 664

Регистрация: 15.11.2015

Сообщений: 7,259

12.12.2019, 15:52

19

Цитата
Сообщение от Hevard
Посмотреть сообщение

Без Try и Finally при отмене диалога возникала ошибка «I/O error 102»

Примерно так я и понял ситуацию. Без Try…Finally при отмене команда Assign не выполняется, зато выполняется следующая команда Rewrite (DataFile);, что и вызывает ошибку.
Говорю же, надо выход делать, либо ставить begin…end:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
  if SaveTextFileDialog1.Execute then
    if FileExists(SaveTextFileDialog1.FileName) then
       raise Exception.Create('Такой файл уже создан.') // Не понятно зачем это.
    else begin // Без этого begin условие if..then..else действует только на одну следующую команду,
      AssignFile (DataFile, NameToFile+'.txt');
      Rewrite (DataFile);
      WriteLn (DataFile, Label1.Caption+' '+Edit1.Text);  // ФИО
      WriteLn (DataFile, Label2.Caption+' '+MaskEdit1.Text);  // Дата рождения
      WriteLn (DataFile, Label3.Caption+' '+Edit3.Text);  //  Возраст
      WriteLn (DataFile, Label4.Caption+' '+Edit4.Text+' '+Edit5.Text); // Адрес
      CloseFile(DataFile);
      SaveTextFileDialog1.FreeOnRelease;
    end;

Зачем ошибку выкидывать при наличии файла? В SaveDialog есть опция предупреждения, если файл уже существует.

Добавлено через 7 минут
Ещё можно попробовать такой вариант:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  if SaveTextFileDialog1.Execute then begin
    if FileExists(SaveTextFileDialog1.FileName) then begin
      // Вывод сообщения об ошибке
      Label1.Caption := 'Сохранение не выполнено: Файл "'+SaveTextFileDialog1.FileName+'" уже существует.');
      Exit;
    end;
    AssignFile (DataFile, NameToFile+'.txt');
    Rewrite (DataFile);
    WriteLn (DataFile, Label1.Caption+' '+Edit1.Text);  // ФИО
    WriteLn (DataFile, Label2.Caption+' '+MaskEdit1.Text);  // Дата рождения
    WriteLn (DataFile, Label3.Caption+' '+Edit3.Text);  //  Возраст
    WriteLn (DataFile, Label4.Caption+' '+Edit4.Text+' '+Edit5.Text); // Адрес
    CloseFile(DataFile);
    SaveTextFileDialog1.FreeOnRelease; // Зачем это?
  end;



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

12.12.2019, 15:52

19

My teacher assigned me to create a simple project: Create a form, which the user has to complete and when he presses the submit button, then the program should write all the information in different textfiles (For example, 1 textfile for their first name, onother for their last name etc) (i know it sounds insane, but a project is a project). Anyway, i tried this:

procedure TForm1.Button1Click(Sender: TObject);   //On Click
var 
F:Array[1..20]of textfile;                        //20 fields, 1 txt each one
Firstname,Fname:string;                           //Location,Field

Begin
Firstname:=ExtractFilePath(Paramstr(0))+'UserIdentityFirstName.txt'; //Location
Fname:=Edit1.text;

AssignFile(f[1],Firstname);
Rewrite(f[1],Firstname);
writeln(f[1],Fname);
closefile(f[1]);
end;

I searched on the google about this error:

I/O error 102,

All i found is that delphi does not assign the file, for some reasons. But i still don’t get why, the code looks absolutely correct and logical to me, Perhaps what i tried:

F:Array[1..20]of Textfile is wrong, the only reason i tried it, is because i wanted to start writing f1,f2,…,f20

What do you think i should do? Thanks

 
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]

Всё. Сделал. ))) Тема закрыта.


 

Ошибка I/O error 102

Сообщение21.05.2012, 17:45 


20/05/11
22

Ошибка «I/O error 102» указывает на строчку

Код:

Rewrite(name1);

Подскажите, пожалуйста, как исправить, почему появляется

Профиль  

Pavia 

Re: Ошибка I/O error 102

Сообщение21.05.2012, 19:44 

Аватара пользователя


31/10/08
1244

Natalya23

Учитесь пользоваться справкой.

102 File not assigned Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.

Профиль  

arseniiv 

 Re: Ошибка I/O error 102

Сообщение21.05.2012, 19:49 

Заслуженный участник


27/04/09
28128

Именно. Но иногда в справке можно не то искать — в таком случае, можно что-то найти в интернете.

Набрал в Google «Delphi IO error 102»:
Первый результат.
Второй результат.
И там, и там, в принципе, есть ссылка на то, что означает код 102.

Вольный перевод текста из справки: file not assigned возникает тогда, когда вы пытаетесь выполнить операции с файловой переменной, которой не присвоено никакое имя файла — забыли вызвать Assign или AssignFile (то же самое).

Профиль  

hurtsy 

Re: Ошибка I/O error 102

Сообщение22.05.2012, 11:28 


01/07/08
836
Киев

Natalya23

Есть ещё стандартный способ.

Код:

try
Rewrite(name1);
except
{
Здесь поместите коды с выводами информации для принятия решения, а можно просто
установить breakpoint.
}
end;

Профиль  

Joker_vD 

Re: Ошибка I/O error 102

Сообщение22.05.2012, 15:29 

Заслуженный участник


09/09/10
3729

А есть еще вариант получше — забыть про Assign/Rewrite как страшный сон и использовать стримы.

Профиль  

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы

Go Up to Delphi Compiler Errors Index

I/O (input-output) errors cause an exception to be thrown if a statement is compiled in the {$I+} state. (If the application does not include the System.SysUtils unit, the exception causes the application to terminate).

Handling I/O Errors

In the {$I-} state, the program continues to execute, and the error is reported by the IOResult function.

I/O Error List

The following table lists all I/O errors, numbers, and descriptions.

Number

Name

Description

100

Disk read error

Reported by Read on a typed file if you attempt to read past the end of the file.

101

Disk write error

Reported by CloseFile, Write, WriteIn, or Flush if the disk becomes full.

102

File not assigned

Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.

103

File not open

Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open.

104

File not open for input

Reported by Read, Readln, Eof, Eoln, SeekEof, or SeekEoln on a text file if the file is not open for input.

105

File not open for output

Reported by Write or Writeln on a text file if you do not generate a Console application.

106

Invalid numeric format

Reported by Read or Readln if a numeric value read from a text file does not conform to the proper numeric format.

See Also

  • Exception Handling
  • Resolving Internal Errors (Delphi)
  • Delphi Run-Time Errors
  • Fatal errors
  • Operating system errors

Понравилась статья? Поделить с друзьями:
  • Error 10170 verilog hdl syntax error at near text
  • Error 10170 quartus
  • Error 1017 что это
  • Error 1017 received logging on to the standby
  • Error 1016 что это значит