powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO и локальная таблица Access
19 сообщений из 19, страница 1 из 1
ADO и локальная таблица Access
    #39682546
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые знатоки.

tblLocal - локальная таблица в Access
tblServer - таблица на сервере (прилинковать их не получается)

Запрос вида

INSERT INTO tblLocal(F1, F2) SELECT F1, F2 FROM [ODBC;Driver={SQL Server};Server=...;Database=...;UID=...;PWD=...;].tblServer

работает прекрасно, но интересует обратная ситуация:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set obDB = New ADODB.Connection
With obDB
        .Provider = "SQLOLEDB"
        .ConnectionString = "User ID=...;Password=...;DATA SOURCE=...;INITIAL CATALOG=..."
        .Open
End With
Set obReport = New ADODB.Recordset
With obReport
      .ActiveConnection = obDB
      .Open INSERT INTO tblLocal(F1, F2) SELECT F1, F2 FROM tblServer
End With



Можно ли как-то указать локальную таблицу в таком запросе и если можно, то как это сделать?
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39682582
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39682600
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROI,

Полистал, но ответа на вопрос, к сожалению, не нашел.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39682643
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UralecROI,

Полистал, но ответа на вопрос, к сожалению, не нашел.
там все есть как работать с таблицами через ADO.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39683431
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIUralecROI,

Полистал, но ответа на вопрос, к сожалению, не нашел.
там все есть как работать с таблицами через ADO.алвк, странный ты "до крика" ...
чё ты ТСа по запросу "SQL" не отправил, спрашивается ? :)

ТС, не знаю, что тебя попёрло в ВБА с этой задачей, но она решается аналогично твоему решению для локал
Код: sql
1.
2.
INSERT INTO [ODBC;Driver={SQL Server};Server=myserver;Database=mydb;UID=sa;PWD=mypassword;].T ( id, txt )
SELECT id, txt from T;


то как ты хотел сделать "со старта", чрез провайдер МС СКЛ - тоже в принципе решаемо, через всякие МС СКЛ-ные опенровсет/опенквери, но это на порядок нафиг оно кому надо ! :)

А все эти адо, дао и прочие JDBC всего лишь способ общения клиента с бд
Не больше !
Если БД умеет работать с гетерогенными запросами, то пофик как ты её "попросишь" его выполнить :)
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684289
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Спасибо за отклик, но как правильно заполнить строку подключения я не понял:
Все это находится в файле accdb (2007 офис), который лежит на жестком диске компьютера

Поэтому что указать в качестве всех этих параметров непонятно.
Server - путь к файлу?
Database - имя файла accdb?
Пользователя нет (только если учетная запись Windows)
Пароля тоже нет

Пробовал и другой драйвер, тоже не срослось.

ВБА, потому что кроме этого ничего не знаю. Это так для себя, для облегчения работы.

Access, как я понял, может работать с гетерогенными запросами, если я правильно понял что это такое, но как привязаться к локальной таблице находящейся в accdb файле не пойму.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684368
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UralecЗапрос вида

Код: sql
1.
INSERT INTO tblLocal(F1, F2) SELECT F1, F2 FROM [ODBC;Driver={SQL Server};Server=...;Database=...;UID=...;PWD=...;].tblServer



работает прекрасно, но интересует обратная ситуация:Объясни, что обозначает эта твоя "обратная ситуация" ?
Тебе нужно из локальной/акцессовской таблицы tblLocal, залить данные в таблицу tblServer на СКЛ Сервере, или что ?

Или "обратная ситуация" обозначает работу именно в коннекте к серверу, а не из Акцесса ??
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684385
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Нет наоборот, мне нужно в локальную/акцессовскую таблицу tblLocal залить данные с сервера.

К этому серверу я могу подключиться только используя ADO,

либо используя конструкцию: INSERT INTO tblLocal(F1, F2) SELECT F1, F2 FROM [ODBC;Driver={SQL Server};Server=...;Database=...;UID=...;PWD=...;].tblServer

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

Надеюсь понятно объяснил.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684388
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

вот я открыл адошный коннект

Set obDB = New ADODB.Connection
With obDB
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=...;Password=...;DATA SOURCE=...;INITIAL CATALOG=..."
.Open
End With

Вот получил нужные данные в рекордсет
Set obReport = New ADODB.Recordset
With obReport
.ActiveConnection = obDB
.Open SELECT F1, F2 FROM tblServer
End With

И возникает вопрос как находясь в адошном подключении к серверу сослаться на локальную таблицу в акцессном файле, чтобы скинуть туда данные.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684390
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак, нужно открыть другое соединение к твоему акцессному файлу, а потом в цикле передать данные построчно из одного рекордсета в другой.

или как вариант присоеденить акцессную базу на сервере и работать там напрямую
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684399
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Спасибо, такой я способ знаю. Просто не хотелось циклом перебирать, а красивое решение сразу залить одним запросом, ну а если это не возможно, то придется так делать.

К тому серверу у меня доступ только на чтение и ни о каких присоединениях даже речи никто вести не будет.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684401
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда ваш путь - линковка нужных таблиц из сервера в ваш акцесс
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684405
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

да, свой сервер я линкую, но этот сервер я даже прилинковать не могу.

Находясь в адошном подключении таблицу своего сервера я указываю в запросе как:

[Сервер].БазаДанных.dbo.Таблица

и все работает. Думал есть такое же решение и для локальной таблицы.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684432
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UralecKonst_One,

да, свой сервер я линкую, но этот сервер я даже прилинковать не могу.

Находясь в адошном подключении таблицу своего сервера я указываю в запросе как:

[Сервер].БазаДанных.dbo.Таблица

и все работает. Думал есть такое же решение и для локальной таблицы.
Это, по всей видимости, линкованный к "твоему серверу", другой МС СКЛ Сервер.

Создай, один раз, в своей БД Акцесса, "запрос к серверу", (к "твоему серверу" !), где будет
Код: sql
1.
select * from [Сервер].БазаДанных.dbo.Таблица 


И дальше используй этот запрос вместо этой, [Сервер].БазаДанных.dbo.Таблица, таблицы везде где надо
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684436
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uralec,

"запрос к серверу", вдруг чо, это вот эта "штуковина"

...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684439
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Зря я про другой сервер написал, путаница только получается.

У меня есть 3 вида таблиц:
1. таблицы на сервере, доступном только через ADO
2. таблицы на моем сервере, которые приликованы к БД Акцесса.
3. локальные таблицы в БД Акцесса.

Делаю ADO подключение к серверу из пункта №1, делаю запрос к таблицам сервера №1, получаю данные и в этом же запросе скидываю их на сервер №2. То есть подружить 2 сервера в одном запросе у меня худо-бедно получается.

А вот локальную таблицу (пункт №3) и сервер, доступный только через ADO (пункт №1), нет.

Не совсем понял Ваше предложение на счет создания запроса в БД Акцесса. Я не могу в ADO подключении обратиться к локальной таблице (БД Акцесса) и также не могу обратиться к локальному запросу.
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684457
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

Интересная кнопка, в чем-то поможет.
Получается она заменила ADO подключение к недоступному серверу.

Интересно а вот такое можно как-то запихнуть через такой запрос:

Код: vbnet
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.
Set cmd = New ADODB.Command
    cmd.ActiveConnection = cnn
    cmd.CommandText = "delete from pResource where spid = @@spid "
    cmd.CommandType = adCmdText
    cmd.Execute
    
    cmd.CommandText = "insert pResource (spid, ResourceID) " & _
    "select @@spid,ResourceID " & _
    "from tResource " & _
    "where len(replace(Brief,' ','')) = 20 and " & _
    "BalanceID in (2140, 2123, 55015845) and " & _
    " (DateEnd <= current_timestamp or DateEnd = '19000101') "
    cmd.CommandType = adCmdText
    cmd.Execute
    
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "AccList_Rest"
    cmd.Parameters.Item("@Date") = iDate
    cmd.Execute
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL "delete from BalData_serv"
    cmd.CommandText = "insert into [server].bd.dbo.BalData (AccName, AccBrief, Rest, RestBs, Fund, Type, iDate) select r.Name as AccName, r.Brief as AccBrief, abs(rl.Rest) as Rest, abs(rl.RestBs) as RestBs, " & _
    "SUBSTRING (replace(s.ISONumber,' ',''),1,3) as Fund, " & _
    "r.CharType as Type, " & DDSQL(iDate) & " as iDate " & _
    "from pResList rl inner join " & _
    "tResource r on rl.spid = @@spid  and rl.Rest != 0 and rl.ResourceID = r.ResourceID inner join " & _
    "tCurrency s on rl.FundID = s.CurrencyID "
    cmd.CommandType = adCmdText
    cmd.Execute
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684638
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Uralec1. таблицы на сервере, доступном только через ADOКак это ? Логин/пароль не дают, или какая причина ?
UralecА вот локальную таблицу (пункт №3) и сервер, доступный только через ADO (пункт №1), нет.Возможность есть, но она не очень "френдли", т.с.
В коннекте к серверу, для записи в Акс-таблицу, можно использовать OPENROWSET (выше уже говорил)
Что-то типа :
Код: sql
1.
2.
insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','\\sqldev01\temp\test.accdb';'admin';'',tblLocal)
select * from tblServer

Только не советую с этой "возможностью" даже связываться. Слишком много "если" должно выполняться, что бы этой запрос работал:
- на сервере должны быть разрешены ad hoс запросы
- на сервере должен быть установлен ACE провайдер. Ещё и той же битности, что и сервер (а поставить и 64, и 32 одновременно нельзя)
- провайдеру нужно установить 2-е проперти какие-то "правильные"
- и главное, у логина под которым выполняется запрос должны быть достаточные права на доступ к файлу Акс-а с сервера.
UralecИнтересно а вот такое можно как-то запихнуть через такой запрос:Оно-то, в принципе, можно.
Пишешь все свои запросы в SQL этого "запроса к серверу", через ";" (можно программно через VBA) и выполняешь (опять же можно из VBA). Только параметры, в таком случае, нужно будет прописывать в запросе сразу литералами.

Но только не конкретно в твоём случае.
Твой АДО-конекшион (cnn), видимо где-то открыт глобально, и "держится" открытым всё время.
Иначе такие варианты:
Код: vbnet
1.
2.
3.
4.
    cmd.CommandText = "delete from pResource where spid = @@spid "
...
    cmd.CommandText = "insert pResource (spid, ResourceID) " & _
    "select @@spid,ResourceID " & _

не проходили бы.

Так вот, "запрос к серверу", в итоге, выполнится в другом коннекте, с другим @@spid
...
Рейтинг: 0 / 0
ADO и локальная таблица Access
    #39684714
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,

"Как это ? Логин/пароль не дают, или какая причина ?"

При попытке прилинковать таблицу: Внешние данные - Дополнительно - База данных ODBC

получаю сообщение:

ODBC - ошибка вызова
Истекло время ожидания запроса (#0)

И выходит пустое окошко "Связь с таблицами"

Почему так мне не понятно.

При этом как Вы показали в "запрос к серверу" использую тоже самое подключение и все работает.

Твой АДО-конекшион (cnn), видимо где-то открыт глобально, и "держится" открытым всё время.

Не знаю насколько глобально, просто я его открыл перед всеми этим командами и закрыл после их выполнения. Поэтому получается я в одной сессии нахожусь.

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

Спасибо большое.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO и локальная таблица Access
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]