Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблемма с типизированным файлом
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
ninja
Доброй ночи уважаемые форумчане!!! Пишу программу, что-то наподобие базы данных, сама программа работает номально, а вот при сохранении результата в типизированный файл возникла проблама.

Сохранение происходит следующим образом:



procedure TForm1.N2Click(Sender: TObject); {save}
type
zapis=record
mas1:array[1..4,1..3] of string[20];
mas2:array[1..3,1..10] of integer;
kolvo_chel:integer;
flag:boolean;
end;
var
s:zapis;
f:file of zapis;
fname:string;
a,b:integer;
begin
savedialog1.InitialDir:=getcurrentdir;
SaveDialog1.Title:='Сохранить в файле';
SaveDialog1.Filter :='Файлы базы данных |*.bd';
SaveDialog1.DefaultExt:='bd';
if SaveDialog1.Execute then
begin
fname:=SaveDialog1.FileName;
AssignFile(f,fname);
Rewrite(f);
reset(f);
s.kolvo_chel:=stringgrid1.rowcount-2;
write(f,s);
for a:=1 to stringgrid1.RowCount-2 do
begin
for b:=1 to stringgrid1.ColCount-1 do
begin
s.mas1[b,a]:=stringgrid1.Cells[b,a];
write(f,s);
end;
end;

closefile(f);
end;

end;




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

Сама программа

Нажмите для просмотра прикрепленного файла

Помогите разобраться с данной проблемой, заранее благодарю.
Lapp
Цитата(ninja @ 26.11.2009 1:06) *
вылетает ошибка.

какая?
ninja
Ошибка такая:

Код
Access violation at address 00402DC9 in module 'Project1.exe'. Write of address 20E0F2F5
ninja
Проблема решена smile.gif
volvo
Ты вылетаешь за пределы массива, неужели не видно? Смотри:
Цитата
zapis=record
mas1:array[1..4,1..3] of string[20];
mas2:array[1..3,1..10] of integer;
kolvo_chel:integer;
flag:boolean;
end;

Запомнил, какие индексы могут быть у mas2? А теперь см. сюда:
Цитата
        for a:=1 to stringgrid1.RowCount-2 do
begin
for b:=1 to stringgrid1.ColCount-1 do
begin
s.mas1[b,a]:=stringgrid1.Cells[b,a];
write(f,s);
end;
end;
И что будет, если RowCount больше 12? Что будет, если ColCount больше 4?
ninja
Да Вы правы, в данном примере я вылетаю за пределы массива.

type
zapis=record
mas1:array[1..4,1..3] of string[20];
mas2:array[1..3,1..10] of integer;
kolvo_chel:integer;
flag:boolean;
end;


Но, если поменять значение например вот так:

type
zapis=record
mas1:array[1..4,1..100] of string[20];
mas2:array[1..3,1..10] of integer;
kolvo_chel:integer;
flag:boolean;
end;


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

Исправил так:

type
zapis=record
flag:boolean;
kolvo_chel:integer;
zapici:string[20];
vznoci:string[10];
data:string[2];
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.