Тема / Topic: Невозможно получить данные по ODBC от ТМ через Linked Servers в MSSQLServer и RemoteView в VisualFoxPro
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
Наша цель - создать сервер, который будет собирать данные по 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 340 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Относительно MSSQLServer и VisualFoxPro сразу сказать, в чем причина, будет трудно. Нужно анализировать лог ODBC-транзакций в системе. Для этого Вам необходимо включить в системе ODBC трассировку всех транзакций в лог-файл и после воспроизведения описанных Вами ошибок проанализировать, что конкретно их вызывает. Также рекомендую обратить внимание в запросах на форматы времени. Дело в том, что формат времени и даты в разных СУБД разный (на него просто нет стандарта в ODBC, потому как при передаче - это всего лишь строка текста). Из-за этого зачастую и возникают проблемы с обменом по ODBC в разнородных системах. И еще одно - наш ODBC-драйвер не понимает вложенных запросов, типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}'), только односложные.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
В запросе типа: SELECT * FROM OPENQUERY(TMDSN, 'SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}') вашему драйверу должна посылаться только строка внутри кавычек (т.е. /SELECT * FROM ARCHIVE WHERE TIME>{d '2004-02-12'}/) - остальное обрабатывает MSSQLServer, но он не может выполнить такой запрос, т.к. внутри его кавычек вставлены ваши, и первую вашу он воспринимает как вторую свою и выдает ошибку синтаксиса!!!
Сообщения / Posts 340 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
А здесь уже ничего не поделаешь, можно только попробовать не одинарные кавычки, а двойные как во внутреннем запросе, так и во внешнем.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045
отправлено / posted
Занимаюсь решением подобной задачи могу поделиться опытом, как пишутся такие запросы Дело в том, что через линкованный сервер чтение данных из СПАД проходит хорошо только для количества параметров <= 100. Возможно дело в настройках самого SQL сервера. Я не докоался. Если читать значение текущее, по конретному индексу таким запросом, все работает хорошо. А вообще, мое мнение, делать надо по другому... Если проблема еще актуальна пиши на KuznetsovDS@kolatom.murmansk.ru
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |