Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Игорёк98
3 / 3 / 1
Регистрация: 17.12.2013
Сообщений: 181
1

Ошибка: EAccessViolation

08.08.2014, 20:51. Просмотров 686. Ответов 11
Метки нет (Все метки)

допустил ошибку, понятия не имею, в чем она заключается....(отмечена в коде)
EAccessViolation

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
unit Unit1;
 
 
interface
 
uses
  Classes, SysUtils,  Forms,Controls, Graphics, Dialogs,
  ComCtrls, ExtCtrls, StdCtrls, Grids, Menus,
  types;
 
type
  { TForm1 }
 
  TForm1 = class(TForm)
    strngrd1: TStringGrid;
    procedure LoadTable(Table: TStringGrid);
    procedure SaveTable(Table: TStringGrid);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid3Exit(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
 
  public
    { public declarations }
  end;
 
type TBase=  record
              date:TDateTime;
              name,lable:string[50];
              table:TStringList;
            end;
 
     FileBase=array[1..2] of TBase;
 
var
  Form1: TForm1;
  T: file of FileBase;
  searchResult: TSearchRec;
  Base: FileBase;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.SaveTable(Table: TStringGrid);
var i, j: Integer;
begin
with Table do
  for i:=1 to RowCount-1 do
  for j:=0 to  ColCount-1 do
    Base[tag].Table[i*ColCount+j]:=Cells[j, i];
end;
 
procedure TForm1.LoadTable(Table: TStringGrid);
var i, j: Integer;
begin
with Table do
  for i:=1 to  RowCount-1 do
  for j:=0 to  ColCount-1 do
тут ошибка>    Cells[j, i]:=Base[tag].Table[i*ColCount+j];
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
          Base[1].Table:=TStringList.Create;
          Base[2].Table:=TStringList.Create;
          Base[1].Table.Capacity:= 120;
          Base[2].Table.Capacity:= 120;
          assignfile(t,'db.fid');
          if findfirst('db.fid', faAnyFile, searchResult)=0 then
          begin
               reset(t);
               if sizeof(t)>0 then
               begin
                    read(t,Base);
                    Form1.LoadTable(strngrd1);
               end;
               closefile(t);
          end;
          FindClose(searchResult);
end;
 
 
end.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 20:51
Ответы с готовыми решениями:

Ошибка Eaccessviolation
library Data_Units; Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

EAccessViolation ошибка...
Добрый день. Я уже третий месяц пытаюсь сделать проект "датчик движения", но время от времени, в...

EAccessViolation ошибка
EAccessViolation ошибка при нажатии на кнопку, в коде при сложении.... procedure...

Ошибка: class EAccessViolation with message
При запуске выдаёт ошибкуProject Project1.exe raised exception class EAccessViolation with message...

Массив классов, ошибка EAccessViolation
Суть такова. Есть класс, описывающий учебные дисциплины. type TSubject = class(TObject) ...

11
northener
пофигист широкого профиля
3523 / 2396 / 645
Регистрация: 15.07.2013
Сообщений: 14,314
08.08.2014, 20:58 2
И что такое tag?
1
Игорёк98
3 / 3 / 1
Регистрация: 17.12.2013
Сообщений: 181
08.08.2014, 21:04  [ТС] 3
northener, strngrd1.tag=1, нужно, для использования нескольких таблиц, у каждой свой индекс
0
northener
пофигист широкого профиля
3523 / 2396 / 645
Регистрация: 15.07.2013
Сообщений: 14,314
08.08.2014, 21:18 4
Цитата Сообщение от Игорёк98 Посмотреть сообщение
strngrd1.tag=1, нужно, для использования нескольких таблиц, у каждой свой индекс
И где в коде strngrd1? В коде написано Base[tag] а значит имеется в виду Form1.Tag
1
08.08.2014, 21:18
Игорёк98
3 / 3 / 1
Регистрация: 17.12.2013
Сообщений: 181
08.08.2014, 21:36  [ТС] 5
Цитата Сообщение от Игорёк98 Посмотреть сообщение
with Table do
Table.tag, а table в данном случае = strngrd1
0
northener
пофигист широкого профиля
3523 / 2396 / 645
Регистрация: 15.07.2013
Сообщений: 14,314
09.08.2014, 02:14 6
В твоих именах переменных легко запутаться
Теперь по существу.
Вызови где-нибудь в программе вот такую строчку
Delphi
1
ShowMessage('Размер структуры TBase='+IntToStr(SizeOf(TBase))+' байт');
И посмотри что она выдаст на экран. Можешь сравнить её с размером файла db.fid, если он был задан тебе изначально, а не сформирован твоей же программой.
Тогда возможно поймёшь почему такую структуру нельзя записывать в типизированный файл.
1
Игорёк98
3 / 3 / 1
Регистрация: 17.12.2013
Сообщений: 181
09.08.2014, 02:41  [ТС] 7
northener, разница в два раза, почему?
0
Игорь[Igor]
722 / 474 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
09.08.2014, 02:48 8
Цитата Сообщение от Игорёк98 Посмотреть сообщение
Сообщение от Игорёк98
with Table do
Table.tag, а table в данном случае = strngrd1
для этого еще надо begin и end правильно расставить, а у тебя их вообще нет

Delphi
1
2
3
4
5
6
with Table do
begin
  for i:=1 to RowCount-1 do
  for j:=0 to  ColCount-1 do
    Base[tag].Table[i*ColCount+j]:=Cells[j, i];
end;
0
northener
пофигист широкого профиля
3523 / 2396 / 645
Регистрация: 15.07.2013
Сообщений: 14,314
09.08.2014, 02:54 9
Лучший ответ Сообщение было отмечено Игорёк98 как решение

Решение

Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
для этого еще надо begin и end правильно расставить, а у тебя их вообще нет
Код Delphi
А они там и не нужны. Посмотри внимательно.
Цитата Сообщение от Игорёк98 Посмотреть сообщение
northener, разница в два раза, почему?
То что в "два раза" это случайно.
Почему? Да потому что в структуре TBase присутствует ссылка на объект класса TStringList, но никак не содержимое его контейнера!
1
Игорь[Igor]
722 / 474 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
09.08.2014, 02:57 10
Да через циклы, но все равно на будущее
0
Игорёк98
3 / 3 / 1
Регистрация: 17.12.2013
Сообщений: 181
09.08.2014, 02:59  [ТС] 11
Игорь[Igor], спасибо, но вы не правы)

на будущее?) я знаю) но если оно тут не нужно, то смысла ставить не вижу)

Добавлено через 1 минуту
northener, понял ) спасибо))
0
northener
пофигист широкого профиля
3523 / 2396 / 645
Регистрация: 15.07.2013
Сообщений: 14,314
09.08.2014, 03:05 12
Цитата Сообщение от Игорёк98 Посмотреть сообщение
northener, понял ) спасибо))
Не за что.
1
09.08.2014, 03:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2014, 03:05

Ошибка EAccessViolation. Что делать?
Приветствую всех! Как можно разрешить странную ошибку eaccessviolation? Дело в том, что я пока...

Ошибка EAccessViolation в своей процедуре
Есть массив объявленный глобально, в обычных процедурах с ним можно делать что угодно... Когда...

Ошибка: Exception EAccessViolation in module
Добрый день! Люди, помогите, пожалуйста! Ошибка при запуске программы: Exception EAccessViolation...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.