Как сделать select к разным БД

mitiok2002
Дата: 23.02.2008 19:54:21
Мне нужно чтобы select, который выбирает записи в текущей БД записывал данные в другую базу данных. Как это можно реализовать? Очень желательно, чтобы это делалось внутри запроса SQL. Ну, например:
Set dbs = "C:\База дынных для выгрузки.accdb"

SQL = "INSERT INTO dbs.Таблица1 SELECT * from Таблица2"

DoCmd.RunSQL SQL


Таблица2 - таблица в текущей БД
Таблица1 - таблица в БД в которую выгружаются данные.

Наверное делается очень просто, я к сожалению не знаю синтаксис.
Karfaqen
Дата: 23.02.2008 20:08:42
Например так можно:
INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 
SELECT * FROM Таблица2
mitiok2002
Дата: 23.02.2008 20:16:21
Karfaqen
Например так можно:
INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 
SELECT * FROM Таблица2


Спасибо огромное! Как все просто когда знаешь как :).
mitiok2002
Дата: 23.02.2008 20:39:07
Karfaqen
Например так можно:
INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 
SELECT * FROM Таблица2

А можно ли в этом случае использовать транзакции? Например:
START TRANSACTION    ' это просто примерный вариант вызова

SQL = "INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 SELECT * FROM Таблица2"
docmd.runSQL SQL

SQL = "UPDATE ..." ' какой-нибудь update
docmd.runSQL SQL

SQL = "UPDATE ..." ' еще что-нибудь
docmd.runSQL SQL

COMMIT TRANSACTION

on error ROLLBACK TRANSACTION

mitiok2002
Дата: 23.02.2008 20:48:03
mitiok2002
Karfaqen
Например так можно:
INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 
SELECT * FROM Таблица2

А можно ли в этом случае использовать транзакции? Например:
START TRANSACTION    ' это просто примерный вариант вызова

SQL = "INSERT INTO [C:\База дынных для выгрузки.accdb].Таблица1 SELECT * FROM Таблица2"
docmd.runSQL SQL

SQL = "UPDATE ..." ' какой-нибудь update
docmd.runSQL SQL

SQL = "UPDATE ..." ' еще что-нибудь
docmd.runSQL SQL

COMMIT TRANSACTION

on error ROLLBACK TRANSACTION



Я вот нашел в FAQ такой вариант. Можно ли в таком синтаксисе использовать запросы к разным БД, как описано выше?
Public Function Test()
On Error Goto Rollback_Label
  DBEngine(0).BeginTrans
    CurrentDb.Execute "Запрос1", dbFailOnError
    CurrentDb.Execute "Запрос2", dbFailOnError
    CurrentDb.Execute "Запрос3", dbFailOnError
  DBEngine(0).CommitTrans
Exit_Label:
  Exit Function
Rollback_Label:
  DBEngine(0).Rollback
  Resume Exit_Label
End Function
Karfaqen
Дата: 23.02.2008 21:06:44
А попробовать-то никак? Код у вас есть. Чего зря форум пытать, защитники отдыхают :)
mitiok2002
Дата: 23.02.2008 21:30:18
Karfaqen
А попробовать-то никак? Код у вас есть. Чего зря форум пытать, защитники отдыхают :)

Попробовал. Все работает. Спасибо огромное :). Но судя по всему rollback работает по текущей базе данных. Та БД в которую вставляются данные не откатывается.
mitiok2002
Дата: 23.02.2008 21:43:53
mitiok2002
Karfaqen
А попробовать-то никак? Код у вас есть. Чего зря форум пытать, защитники отдыхают :)

Попробовал. Все работает. Спасибо огромное :). Но судя по всему rollback работает по текущей базе данных. Та БД в которую вставляются данные не откатывается.

Фига-с ДВА! Rollback рабоатет по обоим БД. ОТЛИЧНО! Именно то чего и хотелось!