Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доступ к таблице MS ACCESS из кода Delphi

375
14 мая 2007 года
dominator
199 / / 16.10.2003
Здравствуйте!
Мне нужно решить следующую задачу.
Существует сетевая бд, откуда нужно брать информацию, а затем писать все в локальную - MS Access.
Не придумал ничего лучше, как полученные запросом данные писать в двумерный массив (строка, столбец). Предполагаю открыть Access как com-объект, получить доступ к таблице и внести последовательно данные в каждое поле.
Создаю экземпляр Access-а, открываю файл, получаю ссылку на таблицу:
 
Код:
strConPath := 'C:\' + 'sodb.mdb';
oAccessApplication := CreateObject("Access.Application");    
oAccessApplication.OpenCurrentDatabase(strConPath);
oCurrentData := oAccessApplication.CurrentData;
oCurrentTable := oCurrentData.AllTables('View_M');

А как теперь получить доступ к строкам/столбцам и вставить данные?
Нигде не могу толкового описания найти.
А может есть способ проще? Как сделать нечто подобное "малой кровью"?

Может быть можно как-то обращаться к полученным данным как к представлению (View), и выбирать данные обычным запросом?
375
14 мая 2007 года
dominator
199 / / 16.10.2003
Наверное я не в ту степь залез...
Вообще говоря, нужно двумя запросами получить нужные данные из двух разных сетевых БД, а затем собрать все в кучу третьим запросом. Если бы можно было с полученным набором данных обращаться как с таблицей/представлением и производить SQL-запросом выборку оттуда, то никакой access, и вообще любые промежуточные звенья, не нужны были бы.
Либо, как вариант объеденить в одном запросе данные из двух баз (организовал два объекта TADOConnection, два TQuery)...
Может кто-нибудь сталкивался? Как реализовать подобное?
10
14 мая 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: dominator
Либо, как вариант объеденить в одном запросе данные из двух баз (организовал два объекта TADOConnection, два TQuery)...


Не знаю, можно ли это сделать в ADO, но когда-то можно было сделать в BDE. Почитай в справке BDE - есть специальный синтаксис, позволяющий задать alias непосредственно в тексте запроса и сделать запрос между разными alias-ами. Как точно - уже не помню.

Можно ещё сделать в Oracle, даже синтаксис навскидку могу подсказать, но не уверен, что оно тебе надо. ;)

375
15 мая 2007 года
dominator
199 / / 16.10.2003
Цитата: Freeman

Можно ещё сделать в Oracle, даже синтаксис навскидку могу подсказать, но не уверен, что оно тебе надо. ;)


Сетевые бд оракловые. использую адо.
Подскажи;)
я тут пришел к мысли (если уж не сделать такого в одном запросе), что проще всего разрешить эту задачу созданием временного экселевского файла, в разные листы которого помещать результат запросов. После того, как все данные будут получены, подцепляться к нему, и выбирать то, что нужно...

286
15 мая 2007 года
misha_turist
572 / / 28.11.2005
Зачем так сложно.....

Делаеш два ADO соединения для сетевой базы и для Access.
Два ADOQuery по одному для каждого соединения, в первом запрос на выборку, во втором запрос на савку с параметрами... и вперёд ADOQuery1.Parameters.ParamByName('...').Value:=ADOQuery2.FieldByName('...').Value;
Единственно с BLOB полями придётся подумать, но это решаемо... через потоки
10
15 мая 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: dominator
Сетевые бд оракловые. использую адо.


Извращение, конечно. Посмотри в справке Oracle оператор create link, а если непонятно, теорию по ним.

Считаю, что ты владеешь терминологией Oracle и не будешь называть базой другую схему в экземпляре - её достаточно указать через точку.

375
16 мая 2007 года
dominator
199 / / 16.10.2003
Цитата: misha_turist
Зачем так сложно.....

Делаеш два ADO соединения для сетевой базы и для Access.
Два ADOQuery по одному для каждого соединения, в первом запрос на выборку, во втором запрос на савку с параметрами... и вперёд ADOQuery1.Parameters.ParamByName('...').Value:=ADOQuery2.FieldByName('...').Value;
Единственно с BLOB полями придётся подумать, но это решаемо... через потоки



Спасибо, это действительно проще:)

375
16 мая 2007 года
dominator
199 / / 16.10.2003
Цитата: Freeman
Извращение, конечно. Посмотри в справке Oracle оператор create link, а если непонятно, теорию по ним.



Спасибо за ответ. Пожалуй, придется разбираться уже после того, как я предоставлю "быстрое решение", поскольку, как обычно, сейчас времени разбираться нет:(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог