![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
АДО и запрос к гетерогенным источникам данных [D7, MSSQL, dBase, FoxPro]
Виталий Панасенко © (2008-02-01 09:13:00)С АДО мало сталкиваюсь, но тут возникла необходимость в использовании этой технологии. Столкнулся с такой проблемой, которую не знаю, как решить в АДО. Нужно выбрать данные из одного источника, опираясь на значения из другого. Т.е. есть подключение к MS SQL, нужно выбрать из БД сервера данные, которые присутствуют в другом иоточнике данных, VFP, через ODBC. В BDE можно было сделать так: select * from maintable where key_field in (select key_field2 from ":ALIAS2:TABLE")..
А в АДО как можно проделать аналогичное ?
sniknik (2008-02-01 17:04:00) [21]> Значится обойти можно так (пробовал только с ораклом + мс скл).
у меня меня вопрос - зачем ОБХОДИТЬ?... ЧТО обходить? тупость свою? неспособность вместо
> StrToDateTime('гдето в мае когда полюбила я в первый раз...');
написать
StrToDateTime('05.15.2007'); (или др. в зависимости от локализации/драйвера в варианте с openrowset)
????
боюсь ЭТО, никакие советы "обойти" не помогут...
ANB (2008-02-01 16:43:00) [22]
> Виталий Панасенко(дом) (01.02.08 14:17) [10]
Значится обойти можно так (пробовал только с ораклом + мс скл).
В МС СКЛ настраивается удаленный сервер вроде как на основе ОДБС источника данных. Делаем эти шлюзы ко все нужным базам. Потом через АДО подключаемся к МС СКЛ и гоним запросы в него.
Во всяком случае в оракл без проблем лазит. Обратный шлюз (из оракла в мс скл) работает и настраивается намного хуже.
Есть мощная грабля. Запросы через шлюз должны быть совместимы с ОБОИМИ субд. Ну и гетерогенные по любому будут тормозить.
Приемлемый выход - собрать данные из разных источников в мс скл и уже там извращаться.
sniknik (2008-02-01 14:46:00) [23]> точнее, синтаксис правильный, но ....
var
dt: TDateTime;
begin
dt:= StrToDateTime('гдето в мае когда полюбила я в первый раз...');
...
end;
синтаксис правильный? правильный. работать будет? ...
Виталий Панасенко(дом) (2008-02-01 14:17:00) [24]одно.. но ведь суть в том, что "не заводится"... точнее, синтаксис правильный, но ....
sniknik (2008-02-01 12:08:00) [25]про запрос это был всего лиш совет, а не руководство по исправлению глюка (руководством можно считать про просмотр BOL)
еще совет такого же плана...
> select * from saldo ...
тебе нужны все поля?
sniknik (2008-02-01 12:04:00) [26]> Вопрос лучше задать в форуме по MS SQL на sql.ru
с тем же успехом... имхо.
> На счет параметров бредовых не понял?
openrowset('MSDASQL',' Persist Security Info=False;Data Source=REMOTE_ODBC', 'select * from saldo where bls=2202')
выделенное бред, обрывки чегото, набор ничем не связанных слов, ты обращаешься к ODBC (первый параметр 'MSDASQL') и даже не указываешь драйвер/dsn который должен обработать твой запрос.
при том что в BOL приведен вполне рабочий пример.
MsGuns (2008-02-01 11:54:00) [27]MS SQL Server DTS
либо
Два коннекта и два датасета на клиенте - из одного последовательно читать, а в другой добавлять
Anatoly Podgoretsky (2008-02-01 11:33:00) [28]Вопрос лучше задать в форуме по MS SQL на sql.ru
Вариантов выполнения гетерогенных запросов в MS SQL множество, в том числе и самые разнообразные функции OPENxx, а не только openrowset и конечно прилинкованые серверы.
Виталий Панасенко (2008-02-01 11:27:00) [29]передела так
select top 5 s2.* from
openrowset('MSDASQL','Persist Security Info=False;Data Source=REMOTE_ODBC', 'select * from saldo where bls=2202') S2
нет тяну всю таблицу.. пытаюсь выполнить в Query Analizerе - ошибка та же
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error. The provider did not give any information about the error.
OLE DB error trace [OLE/DB Provider 'MSDASQL' IDBInitialize::Initialize returned 0x80004005: The provider did not give any information about the error.].
На счет параметров бредовых не понял? я взял и копипастом (чуть подрехтовав) из ConnectionString ADOConnectiong вытянул. Лишние ? Или ошибочные ?
sniknik (2008-02-01 10:24:00) [30]> Гетерогенные запросы вроде только БДЕ допускала.
ADOне допускает, это только посредник, а запросы выполняет sql движок/сервер, в том числе и гетерогенные если конечно позволяет.
> правильно ли я синтаксически написал запросик
синтаксис похож... хотя и не понятны все эти замены в условии, что с чем сравнивается... т.е. скорее всего условие нерабочее, будеш пустой рекордсет получать. но это логика. а синтаксис запроса вроде верный. и еше в параметры openrowset бред передаешь, но и тут вопрос не об этом...
посмотри в BOL примеры по openrowset, и не лепи сразу "сложный" запрос, сделай минимум select * from openrowset(...), а вот когда разберешься/заработает можно и дальше.
и еще совет, не ставь имя таблицы в openrowset(..., ..., SALDO) зачем тебе тянуть ее всю если потом отсекаешь? задавай там запрос с предварительным условием ограничивающим количество данных.
Виталий Панасенко (2008-02-01 10:02:00) [31]Пытаюсь выполнить такой запрос:
select top 5 s2.* from saldo s2
join
openrowset('MSDASQL','Persist Security Info=False;Data Source=REMOTE_ODBC', SALDO) S
on
cast(replace(s2.nls, substring(s2.nls,1, 4), substring(s2.nls,1, 4)+s2.kss) as varchar(14))=cast(nls as varchar(14))
where S.BLS=2202
получаю сообщение об ошибке:
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDASQL' reported an error. The provider did not give any information about the error.
OLE DB error trace [OLE/DB Provider 'MSDASQL' IDBInitialize::Initialize returned 0x80004005: The provider did not give any information about the error.].
Не подскажет никто, правильно ли я синтаксически написал запросик и что это за ошибка инициализации ? может, из-за кривости текста запроса ?
Виталий Панасенко (2008-02-01 09:32:00) [32]они на разных машинах лежат.. сервер - удаленный.. вроде нашел, OPENROWSET надо использовать
Sergey13 (2008-02-01 09:23:00) [33]Гетерогенные запросы вроде только БДЕ допускала.
Может можно ДБФ-ки подлинковать к скулю?