Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Ошибка при попытке прочитать файл   Найти похожие ветки 

 
Женя   (2012-04-20 22:35) [0]

При попытке открыть файл .dat  выдаёт ошибку  "Project C:...путь...project1.exe faulted with message:"access violation at 0x3332c30: read of adress 0x3332c30...
Подскажите пожалуйста в чём проблема...
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Menus;

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   N4: TMenuItem;
   N5: TMenuItem;
   N10: TMenuItem;
   N11: TMenuItem;
   N6: TMenuItem;
   N7: TMenuItem;
   N8: TMenuItem;
   N9: TMenuItem;
   N12: TMenuItem;
   N13: TMenuItem;
   GroupBox1: TGroupBox;
   GroupBox2: TGroupBox;
   Panel1: TPanel;
   Edit2: TEdit;
   Edit3: TEdit;
   Edit4: TEdit;
   Edit5: TEdit;
   Edit1: TEdit;
   Label4: TLabel;
   Label3: TLabel;
   Label2: TLabel;
   Label1: TLabel;
   Label5: TLabel;
   Label6: TLabel;
   Label7: TLabel;
   Label8: TLabel;
   ListBox1: TListBox;
   Button1: TButton;
   Button2: TButton;
   OpenDialog1: TOpenDialog;
   SaveDialog1: TSaveDialog;
   FontDialog1: TFontDialog;
   procedure Button1Click(Sender: TObject);
   procedure ListBox1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure N2Click(Sender: TObject);
   procedure N4Click(Sender: TObject);
   procedure N5Click(Sender: TObject);
   procedure N12Click(Sender: TObject);
   procedure N11Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
const MaxRec=10;
Type TSteel=record
Name:string[10];
C:real;
Mn:real;
Si:real;
Cr:real;
end;
var
 Form1: TForm1;
Steel:array [1.. MaxRec] of TSteel;
Fr:file of TSteel; //файловая переменная и ее тип
FileRecName:string;
NumRecord:integer;
implementation

{$R *.dfm}
Function ViewRecord(k:integer):string;
begin
with Steel[k] do
begin
ViewRecord:=Name+" - C:"+FloatToStr(C)
+"% Mn:"+FloatToStr(Mn)
+"% Si:"+FloatToStr(Si)
+"% Cr:"+FloatToStr(Cr)+"%";
end;
end;
Procedure ClearAll;
begin
Form1.Edit1.Text:="";
Form1.Edit2.Text:="";
Form1.Edit3.Text:="";
Form1.Edit4.Text:="";
Form1.Edit5.Text:="";
NumRecord:=0;
Form1.Label6.Caption:="";
Form1.Label8.Caption:="";
Form1.ListBox1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
NumRecord:=NumRecord+1;
if NumRecord>MaxRec then
MessageDlg("Количество записей больше "+IntToStr
(MaxRec),mtError,[mbOk],0)
else begin
with Steel[NumRecord] do
begin
Name:=Edit1.Text;
C:=StrToFloat(Edit2.Text);
Mn:=StrToFloat(Edit3.Text);
Si:=StrToFloat(Edit4.Text);
Cr:=StrToFloat(Edit5.Text);
ListBox1.Items.Add(ViewRecord(NumRecord));
end;
Label6.Caption:=IntToStr(NumRecord);
Edit1.Text:="";
Edit2.Text:="";
Edit3.Text:="";
Edit4.Text:="";
Edit5.Text:="";
end; end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
with Steel[ListBox1.ItemIndex+1] do
begin
Edit1.Text:=Name;
Edit2.Text:=FloatToStr(C);
Edit3.Text:=FloatToStr(Mn);
Edit4.Text:=FloatToStr(Si);
Edit5.Text:=FloatToStr(Cr);
end;
Label8.Caption:=IntToStr(ListBox1.ItemIndex+1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if NumRecord >=1 then
begin
with Steel[ListBox1.ItemIndex+1] do
begin
Name:=Edit1.Text;
C:=StrToFloat(Edit2.Text);
Mn:=StrToFloat(Edit3.Text);
Si:=StrToFloat(Edit4.Text);
Cr:=StrToFloat(Edit5.Text);
end;
ListBox1.Items[ListBox1.ItemIndex]:=
ViewRecord(ListBox1.ItemIndex+1);
end;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
ClearAll;
end;

procedure TForm1.N4Click(Sender: TObject);
var i:integer;
begin
if OpenDialog1.Execute then
begin
ClearAll;
FileRecName:=OpenDialog1.FileName;
AssignFile(Fr,FileRecName);
Reset(Fr);
NumRecord:=0;
While not Eof(Fr) do
begin
NumRecord:=NumRecord+1;
read(fr,Steel[NumRecord]);
ListBox1.Items.Add(ViewRecord(NumRecord));
end;
CloseFile(Fr);
Label6.Caption:=IntToStr(NumRecord);
MessageDlg("Файл "+FileRecName+" открыт.",
mtInformation,[mbOk],0);
end;
end;

procedure TForm1.N5Click(Sender: TObject);
var i:integer;
begin
if SaveDialog1.Execute then
begin
FileRecName:=SaveDialog1.FileName;
AssignFile(Fr,FileRecName);
Rewrite(Fr);
for i:=1 to NumRecord do write(Fr,Steel[i]);
CloseFile(Fr);
MessageDlg("Файл "+FileRecName+" сохранен.",
mtInformation,[mbOk],0);
end;
end;

procedure TForm1.N12Click(Sender: TObject);
begin
if FontDialog1.Execute then
ListBox1.Font.Assign(FontDialog1.Font);
end;

procedure TForm1.N11Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ClearAll;
end;

end.


 
Плохиш ©   (2012-04-20 23:53) [1]

На какой строке выдаёт?


 
Германн ©   (2012-04-21 00:02) [2]


> NumRecord:=NumRecord+1;
> if NumRecord>MaxRec then
> MessageDlg("Количество записей больше "+IntToStr
> (MaxRec),mtError,[mbOk],0)
>

Если нажать кнопку Button1 раз двадцать, то каким будет NumRecord?


 
Женя   (2012-04-21 00:17) [3]

Оно выдаёт не на строки, а уже при запуске программы, когда я выбираю какой файл загрузить... в некоторых случаях ошибку пишет, а в некоторых загружает файл, но эффекта ноль


 
Германн ©   (2012-04-21 00:57) [4]


> в некоторых случаях ошибку пишет, а в некоторых загружает
> файл, но эффекта ноль

Стандартное поведение для таких ошибок. Можешь выложить куда-нибудь файл, который при загрузке "в некоторых случаях ошибку пишет, а в некоторых загружается, но эффекта ноль"?


 
Женя   (2012-04-21 01:18) [5]

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


 
Германн ©   (2012-04-21 01:45) [6]


> Так в том то и дело, что я экспериментирую и просто пишу
> разные данные, чтобы понять как должно быть правильно.

Ну вот ты экспериментируешь и записываешь файл, а он при чтении даёт ошибку. Так ты дай этот файл нам для проверки. Уточню. Сами данные о значениях Name, C, Mn, Si, Cr меня не интересуют. Интересует только сам файл (а точнее его размеры).


 
Cobalt ©   (2012-04-21 11:11) [7]

Запускай программу из среды разработки - при возникновении исключительной ситуации (исключения) - встроенный отладчик укажет тебе, в какой строке кода это случилось.


 
Плохиш ©   (2012-04-21 11:23) [8]


> Женя   (21.04.12 00:17) [3]
> Оно выдаёт не на строки, а уже при запуске программы, когда
> я выбираю какой файл загрузить... в некоторых случаях ошибку
> пишет, а в некоторых загружает файл, но эффекта ноль

Значит надо нанять программиста.
Кстати, чем "начинающим" не угодила?


 
Нанятый программист   (2012-04-21 15:22) [9]

> Плохиш ©   (21.04.12 11:23) [8]
> Значит надо нанять программиста.

:)


 
Dimka Maslov ©   (2012-04-25 13:31) [10]

Корень зла:
1. Steel : array [1..MaxRec] of TSteel
2. While not Eof(Fr) do

Подумай что здесь не так и почему так нельзя.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.072 c
15-1347362518
Дмитрий С
2012-09-11 15:21
2013.03.22
Табличка "Туалет занят"


2-1346093178
s_t_d
2012-08-27 22:46
2013.03.22
Как из D-7 открыть Acrobat,?


2-1328430400
FIL-23
2012-02-05 12:26
2013.03.22
переменная типа memo


2-1328181215
harisma
2012-02-02 15:13
2013.03.22
Корректно освободить память


15-1337354166
Дуремар
2012-05-18 19:16
2013.03.22
Сломал клаву?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский