Как скопировать данные из одной базы в другую?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Как скопировать данные из одной базы в другую?

Сообщение lonejan » 15.05.2006 (Пн) 9:33

Есть MSSQL и Аксессовская база(пустая). На МССКЛ работает 1С:7.7.
Мне надо периодически выгружать данные из 1С в MDB. Написал прогу на ВБ6.0. Но я выбираю данные из сервера в рекордсет, потом каждую запись в цикле инсертом вставляю в MDB. Так долго получается. Я видел тут на форуме по ВБ.НЕТ делают подмен конекшна(http://bbs.vbstreets.ru/viewtopic.php?t=24544). Работают через какой-то Адаптер. Я пробовал и копировать рекордсеты и обновлять потом и подмену конекшна, но ничего не получается. Чувствую, что можно так сделать, но как не знаю. Типа данные из одного рекордсета скопировать в другой, потом обновить или ещё как-то, только чтобы не в цикле инсертом. Подскажите как?
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Как скопировать данные из одной базы в другую?

Сообщение Andrey Fedorov » 15.05.2006 (Пн) 9:40

lonejan писал(а):Подскажите как?


См. Help (по TSQL) по DTS, OPENROWSET, Linked Servers...
И на свой вкус и выбирай как удобней...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 9:48

Не сочтите за наглость, но у меня сроки горят:/// Не могли бы Вы мне подсказать как сделать лучше, через что. Было бы время я б и на форум не писал:/ Спасибо за понимание :oops:
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 10:05

И реализовать это надо именно в моей проге на ВБ
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.05.2006 (Пн) 10:12

Лучше через Linked Server, вдобавок тебе и VB не понадобиться.
Открываешь в Access нужную БД, линкуешь к ней таблицы с MSSQL и создаешь несколько запросов для импорта информации. Эти запросы и будешь запускать время от времени.
Lasciate ogni speranza, voi ch'entrate.

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 10:15

Если бы. Дело в том, что надо ИМЕННО на ВБ, там в МДБ будет несколько таблиц, это как заготовка, заполнять не все надо, только те, по которым щёлкнет юзер. Без ВБ я знаю как, а вот надо именно с ним. Там и интерфейс приделать, короче тока ВБ:/
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.05.2006 (Пн) 10:31

Из VB будет точно также.
Открываешь БД (MDB), линкуешь к ней таблицы с MSSQL, и делаешь запрос (не по одной записи, а сразу всю таблицу).
Только все-равно не понимаю, зачем нужен именно VB.
В Access интерфейс тоже можно нарисовать без проблем.
Lasciate ogni speranza, voi ch'entrate.

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 10:34

Только все-равно не понимаю, зачем нужен именно VB.

... Такая работа:/
А можно то что вы выше указали только небольшой пример?:)
Это всё часть одного комплекса.
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.05.2006 (Пн) 10:39

Один из примеров. Я еще где-то другой пример выкладывал, как мне кажется, тебе он подойдет больше. Но вот найти что-то не могу.
Lasciate ogni speranza, voi ch'entrate.

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 10:41

Поищите, плззз...
С меня ТВО БИРС%)
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 15.05.2006 (Пн) 13:48

Пиво испортицца.

Тебе дело говорят, через Линкед Сервер и запросами выливаешь в МДБ... Создашь Джобы и они каждые скока хочешь минут будут тебе обновлять базу... VB здесь нафик не нужен, только для вида, что ты работаешь, можешь написать прогу с кнопкой и прогрессбаром...
Пора уже всем хорошим людям собраться и убить всех плохих людей.

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 15:50

...
Рассказываю:
На ВБ есть уже прога, к ней надо придрать модуль обновлений. В МДБ будут порядка 15 таблиц, но заполнятся будут не все, а по выбору пользователя, в СКЛ сервере(с которго работает 1Ска) их валом, мне нужно чтоп пользователь, выбрал какие данные он хочет обновить и потом нажал батон и они загрузились в МДБ, которая потом рассылается для обновления. Ещё одно, такую штуку надо реализовать не только тут где я нахожусь, но и ещё по нескольким десяткам филиалов, куда я просто физически не смогу попасть и всё настроить :roll: Надо так чтоб только польз. указал СКЛ сервер и выбрал данные для обновления и потом жмакнул ВЫРУЗИТЬ ОБНОВЛЕНИЯ ДЛЯ КЛИЕНТА. Тоесть СКЛ запросы будут менятся, так как на каждом из филиалов разные названия исходных таблиц для 1С и разные названия для полей.
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 15.05.2006 (Пн) 16:06

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как скопировать данные из одной базы в другую?

Сообщение alibek » 15.05.2006 (Пн) 16:12

Я так понял, что основная проблема в этом?
lonejan писал(а):Но я выбираю данные из сервера в рекордсет, потом каждую запись в цикле инсертом вставляю в MDB. Так долго получается.

Так привяжи ты таблицу и выгружай SQL-запросами, INSERT INTO MDBTable FROM SQLLinkTable, уже четвертый раз тебе говорят.
Lasciate ogni speranza, voi ch'entrate.

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 16:17

Как программно в ВБ создать связь с таблицей на СКЛ сервере?
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.05.2006 (Пн) 16:20

Зачем?
Ты создай связь с SQL-сервером.
Ссылки имеются в треде и в поиске.
Впрочем и ссылки на SQL-сервере создаются почти точно так.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.05.2006 (Пн) 16:51

lonejan писал(а):Как программно в ВБ создать связь с таблицей на СКЛ сервере?


Можно, кстати, так:

Код: Выделить всё
cnMDB.Execute "INSERT INTO [Users] (ID_User, [User])
SELECT tblUsers.ID_User, tblUsers.User
FROM tblUsers IN '[ODBC;DRIVER=SQL Server;SERVER=MySqlServer;DATABASE=MySqlBase;Trusted_Connection=Yes]'"


Правда просто?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 17:22

Код: Выделить всё
CUp.Execute ("INSERT INTO NOM SELECT * FROM tblUsers IN '[ODBC;DRIVER=SQL Server;SERVER=TEACDOC;DATABASE=ODESSA;Trusted_Connection=Yes]'")

Не пашет, говорит файл не найден. Оно ищет файл с именем 'ODBC;DRIVER=SQL Server;SERVER=TEACDOC;DATABASE=ODESSA;Trusted_Connection=Yes' Как сделать?
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 15.05.2006 (Пн) 17:25

сделай в базе passthru запрос к сиквел-серверу и посмотри правильный синтаксис строки связи, а уже потом выполняй инсерт

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 17:36

Что за запрос такой passthru? Если можно подробно%)
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 15.05.2006 (Пн) 18:29

Короче так. В Аксесе нашёл создавалку строк ОДБС, в АКСЕСе - всё гуд! Всё работает как надо только когда выбираю тип запроса - запрос к серверу, если просто запрос и вставляю строку подключения к ОДБС в запрос - ничего не работает как в аксесе так и в ВБ6.0
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 16.05.2006 (Вт) 9:40

Народ не молчите.. :cry:
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 16.05.2006 (Вт) 10:04

Короче так. В Аксесе нашёл создавалку строк ОДБС, в АКСЕСе - всё гуд!

Что гуд: у тебя в ацевском окне базы данных видно прилинкованые таблицы с sql сервака?

lonejan
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 15.05.2006 (Пн) 9:24
Откуда: Houston

Сообщение lonejan » 16.05.2006 (Вт) 10:06

...
Так я ш спрашивал как из программно из ВБ прилинковать а мне сказали, что такого запроса хватит :?
как программно прилинковатиь из ВБ к аксесовской базе таблицы?
...и если есть те кто приходят к тебе, найдутся и те кто придёт за тобой...(С) Наутилус

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.05.2006 (Вт) 14:09


Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 16.05.2006 (Вт) 14:25

Интересна реализация линковки таблиц с SQL Server через ADO и ADOX, в Jet OLEDB:Create Link и Jet OLEDB:Link Datasource что прописывать?
предположу что (проверить нет возможности):
Код: Выделить всё
tbl.Properties("Jet OLEDB:Link Datasource") =имя_сервера
tbl.Properties("Jet OLEDB:Link Provider String") ="ODBC;DRIVER=SQL Server;SERVER=" & имя_сервера & ";DATABASE=" & имя_базы_sql & ";UID=" & пользователь & ";PWD=" & пароль

Прокатит?
Код: Выделить всё
Dim con As ADODB.Connection
Dim cat As ADOX.Catalog
Dim tbl As ADOX.Table
Set con = New ADODB.Connection
con.Provider = "Microsoft.Jet.OLEDB.4.0"
con.ConnectionString = путь_к_базе_access & "\имя.mdb"
con.Open
Set cat = New ADOX.Catalog
cat.ActiveConnection = con
Set tbl = New ADOX.Table
tbl.Name = имя_таблицы'которое будет отображаться в окне базы данных accsess
Set tbl.ParentCatalog = cat
tbl.Properties("Jet OLEDB:Create Link") = True
tbl.Properties("Jet OLEDB:Link Datasource") =??
tbl.Properties("Jet OLEDB:Link Provider String") = ??
tbl.Properties("Jet OLEDB:Remote Table Name") = имя_таблички_на_sql_сервере
cat.Tables.Append tbl
текст_запроса="insert into имя_таблицы_access (поле1,поле2) select имя_таблицы.поле1, имя_таблицы.поле2 from имя_таблицы"
con.execute текст_запроса
cat.Tables.Delete имя_таблицы 'удаляем прилинкованную табличку после импорта
con.close
Set cat = Nothing
Set tbl = Nothing
Set con = Nothing

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.05.2006 (Чт) 11:35

lonejan писал(а):
Код: Выделить всё
CUp.Execute ("INSERT INTO NOM SELECT * FROM tblUsers IN '[ODBC;DRIVER=SQL Server;SERVER=TEACDOC;DATABASE=ODESSA;Trusted_Connection=Yes]'")

Не пашет, говорит файл не найден. Оно ищет файл с именем 'ODBC;DRIVER=SQL Server;SERVER=TEACDOC;DATABASE=ODESSA;Trusted_Connection=Yes' Как сделать?


Вставь данную строку в окошко конструктора запроса в Access-e:

Код: Выделить всё
SELECT * FROM tblUsers IN '[ODBC;DRIVER=SQL Server;SERVER=TEACDOC;DATABASE=ODESSA;Trusted_Connection=Yes]'


Запрос выполняется?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.05.2006 (Чт) 11:47

А вот такой код работает из VB6 (проверено только что):

Код: Выделить всё
    Dim cn As New ADODB.Connection
   
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\db2.mdb"
   
    cn.Execute "INSERT INTO [Users] (ID_User, [User])" & vbCrLf _
        & "SELECT ID_User, User" & vbCrLf _
        & "FROM tblUsers IN '' [ODBC;DRIVER=SQL Server;SERVER=MySqlServer;DATABASE=MyDatabase;Trusted_Connection=Yes]"
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList  
cron