Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2009, 20:52   #1
Slava
 
Аватар для Slava
 
Регистрация: 07.12.2006
Сообщений: 9
Вопрос Вставка данных в Excel через ADO

Здравствуйте!
У меня возникла проблема
Есть процедура которая (в цикле) вставляет,обновляет данные
примерно такая:

...
begin
for i:=1 to n do
Begin
SQLStr:='insert into DataTable(...) values (...)'
DefDBStr := ExtractFilePath(ParamStr(0)) + sDataPath;
ADOConnection1.Close;
ADOConnection1.DefaultDatabase := DefDBStr;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(SQLStr);
for i := 0 to ADOConnection1.DataSetCount - 1 do
ADOConnection1.DataSets[i].Close;
for i:= 0 to ParamCount-1 do
begin
ADOQuery.Parameters[i].Value := Param[i];
end;
ADOQuery.ExecSQL;
End;
end;
...

Проблема в том что при выполнении запросов объем используемой памяти увеличивается - память не освобождается и
при выполнени большого количества запросов система выдает ошибку: [Microsoft] [Driver ODBC DBASE] Недостаточно системных ресурсов.

Подскажите пожалуйста что я не так делаю

---

Последний раз редактировалось Slava; 15.07.2009 в 21:28.
Slava вне форума Ответить с цитированием
Старый 15.07.2009, 21:37   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

у тебя 3 цикла и в них используется один и тот же идентификатор
а должны быть разные
soleil@mmc вне форума Ответить с цитированием
Старый 15.07.2009, 21:56   #3
Slava
 
Аватар для Slava
 
Регистрация: 07.12.2006
Сообщений: 9
По умолчанию

извините ошибся

procedure TBASEFORM.ADOConnParam(ADOQuery : TADOQuery; Param: array of Variant; ParamCount: Integer);
var i,j,k: Integer;
begin
for i:=1 to n do
Begin
SQLStr:='insert into DataTable(...) values (...)'
DefDBStr := ExtractFilePath(ParamStr(0)) + sDataPath;
ADOConnection1.Close;
ADOConnection1.DefaultDatabase := DefDBStr;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(SQLStr);
for k := 0 to adoConnAPK.DataSetCount - 1 do
ADOConnAPK.DataSets[k].Open;
for j:= 0 to ParamCount-1 do
begin
ADOQuery.Parameters[j].Value := Param[j];
end;
ADOQuery.ExecSQL;
End;
end;
...
---
Проблема та же.

Последний раз редактировалось Slava; 15.07.2009 в 22:01.
Slava вне форума Ответить с цитированием
Старый 15.07.2009, 22:33   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

еще желательно чтобы вы сами смогли словами описать что же вы пытаетесь сделать

по ходу дела вы заполняете DataTable данными, но неясно зачем это делается N-раз?
и еще неясно зачем делается вот это:
Код:
for k := 0 to adoConnAPK.DataSetCount - 1 do
ADOConnAPK.DataSets[k].Open;
soleil@mmc вне форума Ответить с цитированием
Старый 19.07.2009, 22:22   #5
Slava
 
Аватар для Slava
 
Регистрация: 07.12.2006
Сообщений: 9
По умолчанию

Решение в общем нашел
причина оказалась в драйвере Microsoft Access dBASE Driver.
После обновления "MICROSOFT OFFICE ACCESS 2007 DATA CONNECTIVITY COMPONENTS" все заработало.
---
Тему можно считать закрытой. Спасибо всем.
Slava вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно соединица со своей базой данных в интернете через ADO? dj kisel' БД в Delphi 0 26.05.2008 23:11
Открытие(подключение) уже существующей базы данных MS Access через ADO Moel БД в Delphi 7 24.10.2007 16:57
Вставка данных(Excel) из clipboard в DBGrid mahsus Общие вопросы Delphi 1 07.10.2007 02:02