Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2016.01.31;
Скачать: [xml.tar.bz2];

Вниз

разнотипные БД в одном запросе   Найти похожие ветки 

 
beriya ©   (2011-05-20 12:31) [0]

Здравствуйте, умные люди!

Есть таблица на MS SQL сервере и есть файл с базой данных Access Сканы.mdb Мне необходимо сделать запрос и из Скульной таблицы, и из Аццесовской, при этом используя ADO.
Искал, искал в интернете - есть варианты, но не работают.
В ADODataSet мне удобнее (но не принципиально) ставить Connection от SQL-сервера, а базу Акцессовскую удобнее писать вручную в самом запросе. типа
Select * from [;d:\Сканы].Товар
Дельфи такой запрос не принимает, если при этом коннекшн установлен Скульный. А такой конекшн мне нужен для того, чтобы добавить в запрос еще кое-что из Скульной базы данных.

Помогите, пожалуйста, если это вообще возможно...


 
Ega23 ©   (2011-05-20 12:37) [1]

http://msdn.microsoft.com/ru-ru/library/ms190312.aspx


 
b z   (2011-05-20 12:38) [2]

OPENROWSET


 
Anatoly Podgoretsky ©   (2011-05-20 13:00) [3]

> beriya  (20.05.2011 12:31:00)  [0]

Их много вариантов, как сделать гетерогенный запрос, но читать надо не
всемирную помойку, а БОЛ


 
beriya ©   (2011-05-20 13:00) [4]

блиннн, выдает ошибку:

Невозможно использовать поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для распределенных запросов, поскольку поставщик настроен на работу в потоке контейнера с одним потоком

в инете пишут что это особенность 64-битного MS SQL 2008 (а у меня именно такой sql сервер стоит).

пока копаю сам как обойти, но если у вас на кончиках пальцев уже есть готовое решение, пожалуйста подскажите


 
sniknik ©   (2011-05-20 13:19) [5]

настроить jet под пять потоков? (значение по умолчанию у "честной" 32битной оси)


 
beriya ©   (2011-05-20 13:32) [6]

я посмотрел, вообще задница:
в том офисе где я программирую сервер стоит Windows server 2008, MS SSQL 2008, все 64-битное, и там стоит поставщик OLE DB 12.0. ну настрою я поставщика, будет у меня в офисе работать.
а там где все это будет использоваться, на филиалах в других городах - стоит Windows server 2003 и SQL-2000 все 32-битное. и там поставщик 4.0 ((((((

спасибо за советы, порою в другом направлении. Этот вопрос я хотел бы решить, было бы приятно, но и без него не помру.

на всякий случай изложу задачу целиком:
на sql-сервере есть таблица "Товар".
в mdb-базе тоже есть таблица "Товар".
И там, и там меня интересует только наименование.
Мне нужно взять из скульной таблицы те товары, которых нет в акцесовской. в данный момент я делаю ублюдочно: выбираю все записи из скульной в один дадасет. затем в дельфи перебираю все записи на предмет наличия в Акцесовской таблице. если нет, то добавляю. перебор занимает около минуты. тоска для юзеров и позор для меня-программиста.
а ведь наверняка все это можно было бы сделать одним запросом. Причем, я не имею права вносить изменения в SQL-базу, потому что она не моя, т.е. я не могу использовать представления, хранимые процедуры, так как при следующем обновлении все мои изменения улетучатся. А вот Акцесовская база моя - и там я могу творить все что угодно.


 
b z   (2011-05-20 13:54) [7]

А если слинковать сервер?


 
Anatoly Podgoretsky ©   (2011-05-20 13:59) [8]

> beriya  (20.05.2011 13:32:06)  [6]

Гнилая попытка самопальной репликации.


 
sniknik ©   (2011-05-20 14:01) [9]

> и там поставщик 4.0 ((((((
у тебя он тоже должен быть. проверь. во всяком случае 32битные приложения у меня с jet на 64 битной оси работают.
или 64 версия не ставится?
хотя, там вся разница в строке подключения. можно и 2/настраиваемо иметь...

> выбираю все записи из скульной в один дадасет
выбирай только идентификаторы...

> хранимые процедуры
пакет из команд в mssql работает ничуть не хуже процедуры, и все, типа переменные/курсоры и т.д. там тоже возможны.


 
beriya ©   (2011-05-20 14:04) [10]

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


 
Anatoly Podgoretsky ©   (2011-05-20 14:08) [11]

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


 
Anatoly Podgoretsky ©   (2011-05-20 14:12) [12]

> beriya  (20.05.2011 14:04:10)  [10]

Репликацию можно делать с принесеной бумажки, ручками.


 
ов (дом)   (2011-05-20 16:05) [13]

а сколь велик mdb?
не проще ли будет bulk insert из него в tmpTable и join с реальной
и уже из  tmp в mdb скинуть


 
beriya ©   (2011-05-20 16:44) [14]

короче, когда коннекшн у ADODataSet настроен на акцессовскую БД, то получается сделать запрос из скульной таблицы таким образом:

select * from Товар IN  "" [ODBC;Driver={SQL Server};Server=server;DATABASE=Market_f]

в принципе, мне этого достаточно.
а вот наоборот, когда коннекшн нацелен на скул, а выборку делать из Акцесса - как ни бился, так и не смог заставить работать запрос. постоянно выдает "неправильная конструкция около IN".

Я так понимаю - ADO только передает текст запроса соответствующему провайдеру. так что внутри надо писать на том языке, на какой передается. А TransactSQL для SQL, для Access, да и даже для парадоксовских таблиц db весьма отличается один от другого. внешне похож, а в тонкостях то там оджна конструкция не работает,  то другая.... в свое время столкнулся при переходе с парадоксовских таблиц на скул, даже простейшие запросы не удавалось простым копированием перенести, приходилось ручками рихтовать


 
ов (дом)   (2011-05-20 16:57) [15]


> ак что внутри надо писать на том языке, на какой передается

разумеется

для Access, например, руки мозолями покроются joinы писать, придется в стиле "from t1, t2  "

Иногда приходится, делаю так: делаю в самом А, "с лица", запрос чтоб работал, а потом переношу в программу


 
lw   (2011-05-30 22:48) [16]

Создать в акцессной базе подключения к требуем таблицам.
Они станут доступны как обычные таблицы.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2016.01.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1432742556
Pavelnk
2015-05-27 19:02
2016.01.31
Эволюция и галактический год


15-1432953284
wl
2015-05-30 05:34
2016.01.31
MMU


2-1404975191
i2e
2014-07-10 10:53
2016.01.31
Как сделать цветные строки в StringGrid?


15-1432798311
Ega23
2015-05-28 10:31
2016.01.31
Я тут смотрю, начали ср.. споры возникать всякие


15-1432504637
Германн
2015-05-25 00:57
2016.01.31
Зависает IDE при запуске проекта по F9





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский