Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите разобраться с ошибкой.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
iFlight
Здравствуйте, помоги пожалуйсто разобраться в чём проблемма, при работе программы выдаётся ошибка,причём если скомпилировать программа выполяется верно, но переодически вылазит окно с ошибкой:
Цитата
Project Project1.exe raised exeption class EInOutError with message 'I/O error 103'.Process stopped.Use Step or run to continue


Подчёркивает начало цикла While в следующем куске кода:
procedure TForm1.ComboBox2Select(Sender: TObject);
var Wear:TShmot;
Par:string;
poch,zar:Real;
begin
Edit3.Text:=IntToStr(80);
AssignFile(f,'wear.db');
Reset(f);
While not EOF(f) do
Begin
Read(f,Wear);
If Wear.name=ComboBox2.Text then
Begin
Par:=wear.name+' ['+IntToStr(wear.param.lvl)+']'+#13+'Раса:'+wear.param.rassa+#13;
With wear do
Begin
With param do
Begin

Причём перед этим, в другой процедуре уже выполняется такой же цикл и никаких ошибок не выдаёт, да и эту ошибку раньше не выдавало...
Помогите разобраться что это и как с этим бороться. Зарание спасибо:)
volvo
Можно посмотреть полностью ВСЮ процедуру ComboBox2Select, и ту, другую (тоже полностью), где выполняется такой же цикл? А еще лучше - присоединить проект. "I/O error 103" это "Файл не открыт", где-то ты что-то не то делаешь с файлом. Чтобы понять, где, надо видеть код, а не обрывки...
iFlight
Полностью код:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
StaticText1: TStaticText;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
UpDown1: TUpDown;
Label4: TLabel;
Edit2: TEdit;
UpDown2: TUpDown;
Label5: TLabel;
Label6: TLabel;
Edit3: TEdit;
UpDown3: TUpDown;
Label7: TLabel;
Edit4: TEdit;
UpDown4: TUpDown;
Label8: TLabel;
Label9: TLabel;
Edit5: TEdit;
UpDown5: TUpDown;
Label10: TLabel;
StaticText2: TStaticText;
procedure ComboBox1Select(Sender: TObject);
procedure ComboBox2Select(Sender: TObject);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
Twear = record
W_type:string[40];
lvl:integer;
cost:real;
prochnost:integer;
cost_pr:real;
zarjad:integer;
cost_zar:real;
vlijan_sili:integer;
tochnost:integer;
distancija:integer;
rassa:string[10];
uron_min:integer;
uron_max:integer;
sila:integer;
lovkost:integer;
reakcija:integer;
zlost:integer;
udach:integer;
hp:integer;
kul_boi:integer;
zachita:integer;
vl_oruzhiem:integer;
metkost:integer;
ob_uvarot:integer;
ob_udachi:integer;
ob_otvet:integer;
ob_krit:integer;
anti_ob_uvarot:integer;
anti_ob_udachi:integer;
anti_ob_otvet:integer;
anti_ob_krit:integer;
bron_golovi:integer;
bron_tela:integer;
bron_ruk:integer;
bron_nog:integer;
end;
TShmot = record
name:string[50];
param:Twear;
end;
var
Form1: TForm1;
f: file of TShmot;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Select(Sender: TObject);
var Wear:TShmot;
begin
AssignFile(f,'wear.db');
Reset(f);
While not EOF(f) do
Begin
Read(f,Wear);
If Wear.param.W_type=ComboBox1.Text then
ComboBox2.items.Add(Wear.name);
End;
CloseFile(f);
end;

procedure TForm1.ComboBox2Select(Sender: TObject);
var Wear:TShmot;
Par:string;
poch,zar:Real;
begin
Edit3.Text:=IntToStr(80);
AssignFile(f,'wear.db');
Reset(f);
While not EOF(f) do
Begin
Read(f,Wear);
If Wear.name=ComboBox2.Text then
Begin
Par:=wear.name+' ['+IntToStr(wear.param.lvl)+']'+#13+'Раса:'+wear.param.rassa+#13;
With wear do
Begin
With param do
Begin
{****Установка границ переключателей****}
UpDown1.Max:=prochnost;
UpDown2.Max:= zarjad;
UpDown4.Max:=Round(cost)+1;
{******заполнение форм******}
Edit1.Text:=IntToStr(prochnost);
Edit2.Text:=IntToStr(zarjad);
poch:=((prochnost-StrToInt(Edit1.Text))*cost_pr);
zar:=((zarjad-StrToInt(Edit2.text))*cost_zar);
Edit4.Text:=FloatToStr((cost/100) * StrToInt(Edit3.Text));
Label8.Caption:='Затраты на починку:'+FloatToStr(poch)+' соток'+#13+'Затраты на зарядку:'+FloatToStr(zar)+' соток';
Edit5.Text:='100';
Label10.Caption:='Цена продажи:'+FloatToStr(cost/100 *StrToInt(Edit5.Text))+' соток';
StaticText2.Caption:='Прибыль :'+ FloatToStr(((cost/100 *StrToInt(Edit5.Text))-
StrToFloat(Edit4.Text)-(prochnost-StrToInt(Edit1.Text))*cost_pr) -
((zarjad-StrToInt(Edit2.text))*cost_zar))+ ' соток';
label1.Caption:='Цена в лавке: '+FloatToStr(cost)+' соток';
Label3.Caption:='из '+ IntToStr(prochnost);
Label5.Caption:='из '+ IntToStr(zarjad);
{****Заполнение формы с параметрами Вещи*******}
If distancija <> 0 then par:=par+#13+'Радиус:'+IntToStr(distancija);
If (uron_min <> 0) or (uron_max <> 0) then par:=par+#13+IntToStr(uron_min)+'-'+IntToStr(uron_min)+#13;
If sila <> 0 then par:=par+#13+'Сила: '+IntToStr(sila);
If lovkost <> 0 then par:=par+#13+'Ливкость: '+IntToStr(lovkost);
If reakcija <> 0 then par:=par+#13+'Реакция: '+IntToStr(reakcija);
If zlost <> 0 then par:=par+#13+'Злость: '+IntToStr(zlost);
If udach <> 0 then par:=par+#13+'Удача: '+IntToStr(udach);
If hp <> 0 then par:=par+#13+'Сложение: '+IntToStr(hp);
If kul_boi <> 0 then par:=par+#13+'Кулачный бой: '+IntToStr(kul_boi);
If zachita <> 0 then par:=par+#13+'Защита: '+IntToStr(zachita);
If vl_oruzhiem <> 0 then par:=par+#13+'Владение оружием: '+IntToStr(vl_oruzhiem);
If metkost <> 0 then par:=par+#13+'Меткость: '+IntToStr(vl_oruzhiem);
If ob_uvarot <> 0 then par:=par+#13+'Оберег уворота: '+IntToStr(ob_uvarot);
If ob_udachi <> 0 then par:=par+#13+'Оберег удачи: '+IntToStr(ob_udachi);
If ob_otvet <> 0 then par:=par+#13+'Оберег удачи: '+IntToStr(ob_otvet);
If ob_krit <> 0 then par:=par+#13+'Оберег крита: '+IntToStr(ob_krit);
If anti_ob_uvarot <> 0 then par:=par+#13+'Антиоберег уворота: '+IntToStr(anti_ob_uvarot);
If anti_ob_udachi <> 0 then par:=par+#13+'Антиоберег удачи: '+IntToStr(anti_ob_udachi);
If anti_ob_otvet <> 0 then par:=par+#13+'Антиоберег ответа: '+IntToStr(anti_ob_otvet);
If anti_ob_krit <> 0 then par:=par+#13+'Антиоберег крита: '+IntToStr(anti_ob_krit);
If bron_golovi <> 0 then par:=par+#13+'Броня головы: '+IntToStr(bron_golovi);
If bron_tela <> 0 then par:=par+#13+'Броня тела: '+IntToStr(bron_tela);
If bron_ruk <> 0 then par:=par+#13+'Броня рук: '+IntToStr(bron_ruk);
If bron_nog <> 0 then par:=par+#13+'Броня ног: '+IntToStr(bron_nog);
End;
End;
End;
End;
CloseFile(f);
StaticText1.Caption:=Par;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
If key='.' then
key:=',';
end;

End

В ходе работы обращается к Wear.db который заполняется через другую прогу...тож самодельную
volvo
Бррр... Ужас. Скажи, а файл Wear.db, он большой? То есть, ты уверен, что после того, как ты открыл его и просматриваешь (бред, конечно просматривать постоянно весь файл ради одной - единственной записи), но перед тем, как ЕЩЕ РАЗ выбираешь новый элемент в ComboBox2, файл успел просмотреться полностью и закрыться? Если нет, то у тебя второй вызов TForm1.ComboBox2Select не способен будет открыть файл, он уже открыт предыдущим вызовом и доступа к нему нет, пока он не закроется.

P.S. Настоятельно рекомендую перейти сейчас, пока программа не разбухла до ужасных размеров, на хранение данных в БД. Это во-первых, скажется на размере кода (он станет меньше), а во вторых - на удобстве работы с данными.
iFlight
Wear.db весит 45.8 кб,пока что, но будет с пол метра наверное, и записей там куча,сейчас где то около 200(

Я бы с радостью перешёл, но пока что не умею..sad.gif
volvo
Цитата
Я бы с радостью перешёл, но пока что не умею
Вот как раз самое время научиться smile.gif Drkb скачал себе? Там есть информация о работе с БД, причем для самых начинающих...
iFlight
скачал) будем учится) Спасибо:)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.