Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.01.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.007 c
15-1432040304
Kerk
2015-05-19 15:58
2016.01.31
Еще раз о курении


2-1404816598
Sakipiel
2014-07-08 14:49
2016.01.31
Можно ли положить форму на форму?


3-1305880313
beriya
2011-05-20 12:31
2016.01.31
разнотипные БД в одном запросе


2-1404910328
Imagination
2014-07-09 16:52
2016.01.31
В Stringgrid точку поменять на запятую


15-1432714180
Pavia
2015-05-27 11:09
2016.01.31
Двойной замок