Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перекачка данных из MS SQL Server в MS Access с пом. SQL-запроса [D6, MSSQL, MS Access]


Nikolai_S ©   (2002-08-28 12:25:00) 

Если имеем две базы данных MS Access (AccessDb1.mdb и AccessDb2.mdb), то чтобы перекинуть данный из базы 2 в 1 можно SQL запрос построить так:

INSERT INTO [Таблица в AccessDb1.mdb] IN "AccessDb1.mdb" SELECT * FROM AccessDb2.mdb

и выполнить этот запрос нужно из AccessDb2.mdb.

Можно ли так же из SQL Server данные перекачать в базу данных MS Access?


Nikolai_S   (2002-09-02 17:10:00) [1]

Я это пробовал под sa - работает. Под другим пользователем выдает ошибку:
"Ad hoc access to OLE DB provider "Microsoft.Jet.OLEDB.4.0" has been denied. You must access this provider through a linked server."


Delirium   (2002-09-02 16:45:00) [2]

OPENROWSET - это не процедура, а функция.
Для иcполнения нижеследующего запроса никаких особенных прав на MSSQL не требуется, "admin";"mypwd" - это логин и пароль для ACCESS.

SELECT a.*
FROM OPENROWSET("Microsoft.Jet.OLEDB.4.0",
"c:\MSOffice\Access\Samples\northwind.mdb";"admin";"mypwd", Orders)
AS a


Nikolai_S   (2002-09-02 16:24:00) [3]

Либо можно пойти все же путем от SQL Server"а. У него есть процедура OPENROWSET, которая позволяет доставать данные к в случае с Linked Server, но не требует присоединять сервер. Эта процедура для разового доступа к таблице в другой базе данных. Он полностью мне подходит, кроме того, что требует пользователя с правами sa. Можно ли дать права другому пользователю на возможность выполнения такой процедуры?


Nikolai_S   (2002-09-02 16:19:00) [4]

Я просмотрел документацию из MSDN вместе с примерами. Там к сожалению не заостряется вопрос обмена данными между СУБД. Есть лишь ссылка на справку по MS Access. А у меня она, к сожалению, не установлена полностью. Нужных разделов нету. Где можно найти синтаксис SQL запроса? В MSDN указан только такой:
INSERT INTO [DestinationTable] IN "AccessFileName.mdb" SELECT * FROM [SourceTable]

Я попробовал сделать так:
select * into New_Table from ODBCLink.Table
Однако Access ищет файл "ODBCLink.Table" в папке "Мои документы"


Delirium   (2002-09-02 13:00:00) [5]

А ещё разберись с примерами:
http://msdn.microsoft.com/code/default.asp?url=/code/sample.asp?url=/msdn-files/026/002/580/msdncompositedoc.xml


Delirium   (2002-09-02 12:58:00) [6]

Ну так это так и делается:

select * into New_Table from odbc_link_Table

А по Jet SQL читай MSDN - http://msdn.microsoft.com/library/en-us/dnacc2k/html/acadvsql.asp


Nikolai_S   (2002-09-02 12:48:00) [7]

Руками-то я это знаю как сделать. Мне нужно программно перекидывать выборку данных из MS SQL Server в базу данных MS Access. Пусть даже через ODBC. Может можно как-нибудь на SQL это сделать? Например, что-то вроде:
INSERT INTO [ACCESS_TABLE] FROM
SELECT * FROM [SQL_TABLE] IN <ODBCLink.SQLServerName.SQLServerDatabase.TableName>

Мне бы найти справку по SQL для Microsoft Jet. Тогда я бы там порылся и что-нибудь нашел...


Delirium   (2002-09-02 12:33:00) [8]

Никаких команд для этого не надо, это делается "руками". Создаёшь ODBC соединение с MSSQL (Control Panel /Панель управления/ -> ODBC Data Sources /Источники данных ODBC/). В ACCESS делаешь следущее (ACCESS2000 - рус.): Файл -> Внешние данные -> Связь с таблицами -> ODBC Databases -> Источник данных компьютера. А на счёт ole db, тут к сожалению ACCESS пока не функционален, однако как показывает практика, с MSSQL можно вполне корректно работать и средствами ODBC.


Nikolai_S   (2002-09-02 12:16:00) [9]

У меня к сожалению нет справки по SQL для MS Access. Не подскажешь функцию или команду с помощью которой можно это осуществить или еще лучше ссылку на описание с примерами. Кстати, ODBC я не использую. Я пользуюсь UDL - Universal data link.

Заранее, благодарен


Delirium   (2002-08-31 11:54:00) [10]

" можно ли подобным образом из MS Access подключиться к SQL Server"у" - разумеется, у ACCESS существует похожая технология - связка с ODBC-источником. Фактически, для каждой таблицы создаётся, как бы удалённое представление, с которым можно работать как с обычной таблицей.


Nikolai_S   (2002-08-30 18:22:00) [11]

Спасибо за ссылку. Я разобрался. Однако проблема отсалась не решенной. Дело в том, что в моей задаче имеется один SQL Server и много клиентов, которые к нему подсоединяются.

Поэтому как конкретный клиент, имеющий на SQL-Server"е права только на свою БД, может создать Linked Server? И потом примет ли функция sp_addlinkedserver в качетсве имени Access"кого файла сетевой путь, если не подключен сетевой диск?

Поэтому новый вопрос: можно ли подобным образом из MS Access подключиться к SQL Server"у, чтобы с пом. SQL-запросов считывать и вставлять из него данные?


Delirium   (2002-08-28 13:01:00) [12]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_adda_8gqa.asp


Nikolai_S   (2002-08-28 12:56:00) [13]

Можно по подробнее?


Delirium   (2002-08-28 12:51:00) [14]

Linked Server


Наверх

Титульная страница Поиск, карта сайта Написать письмо