Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Работа в MS Windows (ODBC/DDE/OPC/NET) / Working under MS Windows » Невозможно получить данные по ODBC от ТМ через Linked Servers в MSSQLServer и RemoteView в VisualFoxPro

   
Автор / Author Тема / Topic: Невозможно получить данные по ODBC от ТМ через Linked Servers в MSSQLServer и RemoteView в VisualFoxPro
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 5 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
Наша цель - создать сервер, который будет собирать данные по 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).

Сообщения / Posts 338 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 9 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Относительно MSSQLServer и VisualFoxPro сразу сказать, в чем причина, будет трудно. Нужно анализировать лог ODBC-транзакций в системе. Для этого Вам необходимо включить в системе ODBC трассировку всех транзакций в лог-файл и после воспроизведения описанных Вами ошибок проанализировать, что конкретно их вызывает. Также рекомендую обратить внимание в запросах на форматы времени. Дело в том, что формат времени и даты в разных СУБД разный (на него просто нет стандарта в ODBC, потому как при передаче - это всего лишь строка текста). Из-за этого зачастую и возникают проблемы с обменом по ODBC в разнородных системах.
И еще одно - наш ODBC-драйвер не понимает вложенных запросов, типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}'), только односложные.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119


Icon 8 отправлено / posted      Профиль для / Profile for Kramarenko Stanislav           Редактировать/удалить сообщение / Edit/Delete Post 
В запросе типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}') вашему драйверу должна посылаться только строка внутри кавычек (т.е. /SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}/) - остальное обрабатывает MSSQLServer, но он не может выполнить такой запрос, т.к. внутри его кавычек вставлены ваши, и первую вашу он воспринимает как вторую свою и выдает ошибку синтаксиса!!!
Сообщения / Posts 338 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 9 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
А здесь уже ничего не поделаешь, можно только попробовать не одинарные кавычки, а двойные как во внутреннем запросе, так и во внешнем.
Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045


Icon 7 отправлено / posted      Профиль для / Profile for HI-TIGER           Редактировать/удалить сообщение / Edit/Delete Post 
Занимаюсь решением подобной задачи могу поделиться опытом, как пишутся такие запросы [clever / умный] Дело в том, что через линкованный сервер чтение данных из СПАД проходит хорошо только для количества параметров <= 100. Возможно дело в настройках самого SQL сервера. Я не докоался. Если читать значение текущее, по конретному индексу таким запросом, все работает хорошо. А вообще, мое мнение, делать надо по другому... Если проблема еще актуальна пиши
на KuznetsovDS@kolatom.murmansk.ru [fun / веселый]

Сообщения / Posts 6 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2