Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

АДО и запрос к гетерогенным источникам данных [D7, MSSQL, dBase, FoxPro]


Страницы:   1 2

Виталий Панасенко ©   (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]

Гетерогенные запросы вроде только БДЕ допускала.
Может можно ДБФ-ки подлинковать к скулю?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо