This is topic Невозможно получить данные по ODBC от ТМ через Linked Servers в MSSQLServer и RemoteView в VisualFoxPro in forum Работа в MS Windows (ODBC/DDE/OPC/NET) / Working under MS Windows at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/13/t/000071.html

Posted by Kramarenko Stanislav (Участник № / Member № 119) on :
 
Наша цель - создать сервер, который будет собирать данные по ODBC со многих МРВ.

Попытались использовать для этого MSSQLServer.
В MSSQLServer попробовали использовать процедуру импорта данных из внешней базы через ODBC - получилось, но сам способ не годится.
Решили подключить МРВ как связанный сервер (Linked Server) - он подключился, но в ответ на запрос выдает пустую таблицу (т.е. структура есть, а данных нет). При этом успешно выдает свои системные таблицы. Несколько раз удалось получить данные, когда МРВ и MSSQLServer были запущены на одной машине, но результат нестабильный.

Еще хуже с VisualFoxPro. Connection создается, но при попытке создать RemoteView (даже для МРВ на той же машине) при добавлении таблицы ARCHIVE возникает ошибка "Connectiviti error: Unable to retrieve specific error information. Driver is probably out of resources".

Приложения EXCEL и ACCESS успешно принимают данные через тот же DSN.

Кроме того, MSSQLServer невозможно выполнить запрос к связанному серверу используя временнЫе границы, т.к. в запросе --SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}')-- одинарные кавычки в структуре TIME воспринимаются как закрывающие, а структура #12.06.2004# вообще не воспринимается (вызывает ошибку ODBC).
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Относительно MSSQLServer и VisualFoxPro сразу сказать, в чем причина, будет трудно. Нужно анализировать лог ODBC-транзакций в системе. Для этого Вам необходимо включить в системе ODBC трассировку всех транзакций в лог-файл и после воспроизведения описанных Вами ошибок проанализировать, что конкретно их вызывает. Также рекомендую обратить внимание в запросах на форматы времени. Дело в том, что формат времени и даты в разных СУБД разный (на него просто нет стандарта в ODBC, потому как при передаче - это всего лишь строка текста). Из-за этого зачастую и возникают проблемы с обменом по ODBC в разнородных системах.
И еще одно - наш ODBC-драйвер не понимает вложенных запросов, типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}'), только односложные.
 
Posted by Kramarenko Stanislav (Участник № / Member № 119) on :
 
В запросе типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}') вашему драйверу должна посылаться только строка внутри кавычек (т.е. /SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}/) - остальное обрабатывает MSSQLServer, но он не может выполнить такой запрос, т.к. внутри его кавычек вставлены ваши, и первую вашу он воспринимает как вторую свою и выдает ошибку синтаксиса!!!
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
А здесь уже ничего не поделаешь, можно только попробовать не одинарные кавычки, а двойные как во внутреннем запросе, так и во внешнем.
 
Posted by HI-TIGER (Участник № / Member № 1045) on :
 
Занимаюсь решением подобной задачи могу поделиться опытом, как пишутся такие запросы [clever / умный] Дело в том, что через линкованный сервер чтение данных из СПАД проходит хорошо только для количества параметров <= 100. Возможно дело в настройках самого SQL сервера. Я не докоался. Если читать значение текущее, по конретному индексу таким запросом, все работает хорошо. А вообще, мое мнение, делать надо по другому... Если проблема еще актуальна пиши
на KuznetsovDS@kolatom.murmansk.ru [fun / веселый]
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2