Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 8
1

Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00467ECA in modul

03.11.2017, 19:35. Показов 2299. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Впервые решил обратится сюда,вообщем проблема пустяковая
Суть в том что нужно в делфи подгрузить файл из Excel, и нужно сделать вычисления с него и всё это сохранить обратно
Стал писать алгоритм по нахождению n, и он выдал ошибку,по гуглил,но все решения проблемы мне к сожалению не подошли
Расскажите где изъян
Код
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls,ComObj;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var xl: Variant;
s:string ;
k,i,n:integer;
begin
stringgrid1.Visible:=true;
xl := CreateOleObject('Excel.Application');
xl.DisplayAlerts := True;
xl.Workbooks.Open('s');
k:=0;
n:=0;
i:=1;
while k=0 do begin
s:=xl.Cells[2,i];
if s[1] in ['А'..'Я', 'а'..'я', 'A'..'Z', 'a'..'z'] then begin    {Ошибка тут}
n:=n+1;
i:=i+7;
end
else
k:=-1;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.Visible:=false;
stringgrid1.Cells[0,0]:= 'Фио Ученика';
stringgrid1.Cells[1,0]:= '% сданых зачетов';
stringgrid1.Cells[2,0]:= '% сданых экзаменов';
stringgrid1.Cells[3,0]:= 'Кол-во долгов';
end;
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2017, 19:35
Ответы с готовыми решениями:

Project Incassaciya.exe raised exception class EAccessViolation with message 'Access violation at address
Помогите пожалуйста. При запуске программы вылезает ошибка: Project Incassaciya.exe raised...

Ошибка: Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address
Работаю с файлом *.xls через OpenOffice Calc. На форме 2 элемента RadioButton1 и RadioButton2. Если...

Project Hotel.exe raised exception class EAccessViolation with message"Access violation at address 007B90DA
будет много букв \ сорян При Запуске выходит такая ошибка Project Hotel.exe raised exception...

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 007B90DA in module 'Project1.exe'...
При нажатии кнопки "Добавить запись" должна показываться вторая форма, вместо этого ошибка ...

7
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
03.11.2017, 21:50 2
Внимательно почитай как нужно работать с OLE объектами
На форуме в шапке есть тема по экселю
0
Фриланс Pascal/Delphi etc
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
04.11.2017, 13:07 3
У вас ошибка в доступе к несуществующей переменной.
Проверьте объект возвращаемый CreateOleObject() на валидность Assigned().
0
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 8
04.11.2017, 16:17  [ТС] 4
А можно немного конкретнее,гайд что в шапке темы я смотрел,и собственно делал по нему,просто пробовал переписывать по разному и все равно встаёт на этом месте
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
04.11.2017, 17:25 5
Лучший ответ Сообщение было отмечено Никитка98 как решение

Решение

Цитата Сообщение от Никитка98 Посмотреть сообщение
xl.Workbooks.Open('s');
Это у Вас файл так называется: s без расширения?
Цитата Сообщение от Никитка98 Посмотреть сообщение
s:=xl.Cells[2,i];
Вы почему-то не проверяете ячейку на пустоту и сразу присваиваете ее значение строковой переменной, а потом пытаетесь обратиться к ее первому элементу... А если его (этого первого элемента) просто нет?
1
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 8
04.11.2017, 17:51  [ТС] 6
Цитата Сообщение от D1973 Посмотреть сообщение
Сообщение от Никитка98
s:=xl.Cells[2,i];
Вы почему-то не проверяете ячейку на пустоту и сразу присваиваете ее значение строковой переменной, а потом пытаетесь обратиться к ее первому элементу... А если его (этого первого элемента) просто нет?
Спасибо!
Можете напоследок рассказать почему с проверкой на пустоту она заработала?
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
procedure TForm1.Button1Click(Sender: TObject);
var xl: Variant;
s:string ;
k,i,n:integer;
begin
stringgrid1.Visible:=true;
xl := CreateOleObject('Excel.Application');
xl.DisplayAlerts := True;
xl.Workbooks.Open('s.xlsx');
k:=0;
n:=0;
i:=1;
while k=0 do begin
s:=xl.Cells[2,i];
if length(s)=0 then
k:=-1
else
if s[1] in ['А'..'Я', 'а'..'я', 'A'..'Z', 'a'..'z'] then begin    {Ошибка тут}
n:=n+1;
i:=i+7;
end;
end;
stringgrid1.Cells[0,1]:= inttostr(n);
end;
end.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
04.11.2017, 18:40 7
Цитата Сообщение от Никитка98 Посмотреть сообщение
А можно немного конкретнее,гайд что в шапке темы я смотрел
Инструкция: Использование Excel из Delphi

вот ты создал объект
Цитата Сообщение от Никитка98 Посмотреть сообщение
xl := CreateOleObject('Excel.Application');
а где его убиваешь?
попробуй нажать на кнопку несколько раз и загляни в диспетчер задач
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
04.11.2017, 19:53 8
Цитата Сообщение от Никитка98 Посмотреть сообщение
Можете напоследок рассказать почему с проверкой на пустоту она заработала?
Так я уже рассказал. Вы присваиваете значение пустой ячейки в переменную s. Чему равна длина такой строки? Правильно, нулю. Потом Вы пытаетесь оперировать 1-м элементом строки, длина которой = 0. Попытка работать с тем, чего нет - вот Вам и вылет...
0
04.11.2017, 19:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2017, 19:53
Помогаю со студенческими работами здесь

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0045DC8E in module 'Project1.exe'. Write of ad'
Всем доброго времени суток, у меня возникла вот такая проблема, после компиляции проекта, при...

Ошибка: Exception class EAccessViolation with message 'Access violation at address 0045DE23'
Ошибка в программе, сначала выходит вот это сообщение , а потом вот это . Хотелось бы узнать в чем...

Project raised exception class eaccessviolation with message
Очередная тема про наболевшую тему (извиняюсь за каламбурчик и за глупую тему). Пишу...

Project raised exception class EAccessViolation with message...
var Form1: TForm1; Bana:TStringList; procedure TForm1.button1Click(Sender: TObject); var...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru