This is topic Чтение архива через ADO в DELPHI 5 in forum Работа в MS Windows (ODBC/DDE/OPC/NET) / Working under MS Windows at Форум TRACE MODE: техническая поддержка.
При попытке почитать данные запросом вида SELECT DISTINCT ARCHIVE.CHAN_NAME, ARCHIVE.CHAN_ID, ARCHIVE.ATTR_CODE, ARCHIVE.ATTR_NAME, ARCHIVE.FLAGS, ARCHIVE.VALUE FROM ARCHIVE прекрасно читаю все данные, получая срез по последим изменениям из архива. Стоит только добавить в запрос поле ARCHIVE.TIME -возникает исключение , либо возвращается пустой набор данных. ADO я патчил, результат тотже. При этом SQL Explorerom запрос выполняется хорошо и с ARCHIVE.TIME - это поле идентифицируется как тип TIMESTAMP (16 битное). Быть может Вам приходилось отвечать на подобный вопрос или решать подобную проблему. Ничего не стоит перейти с Dеlphi на С++, интересует сама природа проблемы.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Причина здесь скорее всего в формате времени - дело в том, что в SQL дата и время передаются в строковом формате и нет единого стандарта по этому поводу, каждый драйвер реализует собственный синтаксис (кто во что горазд). Скорее всего при работе из Delphi - синтаксис отличается от того же SQL Explorer (даже у MS SQL и MS Access они отличаются), что и приводит либо к ситуации с фатальной ошибкой, либо к просто ошибочной выборке.
Posted by HI-TIGER (Участник № / Member № 1045) on :
С этой проблемой я частично разобрался. Запрос не выполнялся по той причине, что в архиве встречаются записи с искаженной или неправильной временной меткой в поле TIME (что именно записано в этом месте пока сказать сложно). Стоило исключить из запроса места с "битым" временем, как он стал выполняться. Есть вопросы: 1. По какой причине в архиве появляются такие записи. 2. Как правильно сформировать запрос с временным интервалом.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) А как выглядят эти записи с "битыми" метками времени? 2) Для запроса интервала Вам необходимо выполнять обычный запрос без DISTINCT.
Posted by HI-TIGER (Участник № / Member № 1045) on :
Вот фрагмент выборки сделанной в MS Access из архива запросом : SELECT DISTINCT TIME, VALUE, CHAN_ID FROM ARCHIVE;
Пробел или пустая ячейка в итоговой таблице, как раз и есть такое "битое" место в архиве. Собственно, ADO возвращает пустой набор данных из-за этого, то есть как только встречается в результате запроса неправильное значение соответствующее данному типу - набор данных считается неверным .
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В проекте даные каналы не по M-Link получают значения?Какой релиз ТМ?
Posted by HI-TIGER (Участник № / Member № 1045) on :
Релиз 5.11. Подтип канала КОНТР_2. Драйвер реализует прием данных от аппаратуры по TCP/IP.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
КОНТР_2 - это посложнее будет... Дело в том, что если метка времени в канале задана вне диапазона времени (максимальное значение 0xFFFFFFF), то в СПАДЕ появляются записи с пустыми метками времени. Очень похоже на Ваш случай - может стоит в драйвере лог встроить, чтобы посмотреть какие метки у Вас по этим каналам приходят?