0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 18
1

[Delphi+excel] - недостаточно памяти для завершения операции

20.04.2013, 13:34. Показов 5847. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Возникла следующая проблема: при импорте данных из excel в мою бд (access) возникает ошибка:"Недостаточно памяти для завершения операции". Ошибку выдает при запуске импорта на вот эту строку:Ap.Workbooks.Open(edit1.Text);
Путь к файлу прописывается верно.
Буду благодарен за любую помощь.


Кликните здесь для просмотра всего текста
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
procedure TForm17.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Form17.Edit1.Text:=Form17.OpenDialog1.FileName;
end;
 
procedure TForm17.FormCreate(Sender: TObject);
begin
Ap:= CreateOleObject('Excel.Application');
end;
 
procedure TForm17.BitBtn2Click(Sender: TObject);
var
i,j, r2 : integer;
otd, group,sotr : integer;
ocheck, scheck, gcheck : integer;
begin
Ap.Workbooks.Open(edit1.Text);     ///открываем книгу
 
 
//добавим данные об отделах
 
r2:=2;
 While ap.cells[7, r2].value<>'' do
 begin
   //добавим отдел
  Datamodule3.ADOTable1.First;
  ocheck:=0; //флаг
  for  i := 1 to datamodule3.ADOTable1.RecordCount do
  begin
   if datamodule3.ADOTable1.FieldByName('filial').Value=ap.cells[8,r2].value then
   begin
    ocheck:=1;
    otd:= DataModule3.adotable1.fieldbyname('id_otdel').value;
   end;
   DataModule3.ADOTable1.Next;
  end;
  if ocheck=0 then
  begin
     with DataModule3.ADOTable1 do
    begin
     Insert;
     FieldByName('filial').AsString:=ap.cells[8,r2].value;
     FieldByName('naimen').AsString:='центральный';
     Post;
    end;
    otd:=DataModule3.ADOTable1.FieldValues['id_otdel'];
  end;
 
  //Добавим сотрудника
  scheck:=0;
  i:=1;
  DataModule3.ADOTable4.First;
  for i:=1 to DataModule3.ADOTable4.RecordCount do
  begin
   if DataModule3.ADOTable4.FieldByName('fio').Value=ap.cells[7,r2].value then
   begin
    scheck:=1;
    sotr:=DataModule3.ADOTable4.FieldByName('id_sotr').Value;
   end;
   DataModule3.ADOTable4.Next;
  end;
  if scheck=0 then
  begin
   with DataModule3.ADOTable4 do
    begin
     insert;
     FieldByName('fio').AsString:=ap.cells[7,r2].value;
     FieldByName('id_otdela').AsInteger:=otd;
     FieldByName('kab').AsInteger:=ap.cells[9,r2].value;
     FieldByName('dolz').AsString:=ap.cells[6,r2].value;
     Post;
    end;
    sotr:=DataModule3.ADOTable4.FieldByName('id_sotr').Value;
  end;
 
  //сохраняем группу техники (group)
   gcheck:=0;
  i:=1;
  DataModule3.ADOTable3.First;
  for i:=1 to DataModule3.ADOTable3.RecordCount do
  begin
   if DataModule3.ADOTable3.FieldByName('naimen').Value=ap.cells[7,r2].value then
   group:=DataModule3.ADOTable3.FieldByName('naimen').Value;
   end;
 
 
   //добавим технику
   With  datamodule3.ADOTable5 do
   begin
    Insert;
    FieldByName('id_inv').AsString:=ap.cells[1,r2].value;
    FieldByName('sn').AsString:=ap.cells[2,r2].value;
    FieldByName('id_group').AsInteger:=group;
    FieldByName('id_sotr').AsInteger:=sotr;
    FieldByName('date_create').AsDateTime:=ap.cells[3,r2].value;
    FieldByName('date_use').AsDateTime:=date;
    post;
   end;
 
   r2:=r2+1;
 end;
 
 
 
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2013, 13:34
Ответы с готовыми решениями:

Ошибка Raised exception class EOleSysError with message 'Недостаточно памяти для завершения операции'
Доброго времени суток. Помогите пожалуйста с такой проблемой, делаю выгрузку двумерного...

Недостаточно памяти для выполнения
Передаю данные в хранимую процедуру, которая делает update для определенных таблиц. Данные передаю...

Недостаточно памяти для завершения операции
Доброй ночи всем. Достает ошибка нехватки памяти. Как это исправить? Ресурсы свободны,...

Недостаточно памяти для завершения операции, при подключении через RDP, Windows server 2012R2
помогите разобраться почему не пускает удаленно на сервер пишет недостаточно памяти для завершения...

7
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
20.04.2013, 14:01 2
don_t_worry, я ведь Вам расписал и показал, что лучше использовать компонент TOpenDialog (вкладка Dialogs) или, по-Вашему, лучше, если пользователь будет вручную
прописывать весь путь к файлу\имя файла.расширение (которое он может забыть указать)?
Delphi
1
2
3
if  not OpenDialog1.Execute then Exit; 
Ap.Workbooks.Open(OpenDialog1.FileName, false); //открываем книгу 
..............................
Добавлено через 4 минуты
создавайте и уничтожайте объект Ap по завершению работы внутри одного обработчика
1
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
20.04.2013, 15:10 3
Немного дополню. По крайней мере книгу надо закрывать при завершении импорта. Тогда если последовательно обрабатывается несколько книг, то расход памяти будет всегда соответствовать размерам одной книги.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
...
  exBook : Variant;
begin
  ...
  exBook := Ap.Workbooks.Open(edit1.Text); //открываем книгу
 
  {Импорт данных из книги.}
  ...
  ...
  ...
 
  //После завершения импорта закрываем книгу.
  exBook.Close;
end;
1
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
20.04.2013, 15:15 4
Mawrat,

Добавлено через 3 минуты
об этом я также упоминал ТС. Вот тема [Delphi=>excel=>access]
Delphi
1
2
3
4
5
//завершаем работу с экземпляром Excel
Excel.Workbooks.Close;
Excel.Quit;
Excel :=Unassigned;
end;
2
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 18
20.04.2013, 18:05  [ТС] 5
droider, Именно через этот компонент данные передаются в edit:
Delphi
1
2
if OpenDialog1.Execute then
Form17.Edit1.Text:=Form17.OpenDialog1.FileName;
Добавлено через 2 часа 31 минуту
Гуглил данную ошибку, много кто сталкивался, решения не нашел
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
20.04.2013, 22:02 6
don_t_worry, скиньте свой проект и excel файл
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 18
20.04.2013, 22:06  [ТС] 7
Спасибо за помощь!
Вложения
Тип файла: rar diplom.rar (533.0 Кб, 18 просмотров)
0
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 18
22.04.2013, 13:17  [ТС] 8
Поковырял, вот что получилось
Вложения
Тип файла: rar diplom.rar (551.5 Кб, 45 просмотров)
0
22.04.2013, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2013, 13:17
Помогаю со студенческими работами здесь

Недостаточно системных ресурсов для завершения операции
недостаточно системных ресурсов для завершения операции перезагрузил и все норм. что запричина...

Недостаточно системных ресурсов для завершения операции
пытаюсь установить программу Tunngle или Evolve.драйвер адаптеров не устанавливается сам. по этому...

Недостаточно место на диске (флэшке) для завершения операции
Источник копирования: смартфон Xiaomi Redmi Note 4 Приёмник копирования: Flashka Trancend MLC 32...

Недостаточно памяти сервера для обработки операции
Всем добрый день. На Windows 7 ultimate 64 имеется сетевая папка при входе на которую с другого...


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

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

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