HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045
отправлено / posted
При попытке почитать данные запросом вида 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 на С++, интересует сама природа проблемы.
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Причина здесь скорее всего в формате времени - дело в том, что в SQL дата и время передаются в строковом формате и нет единого стандарта по этому поводу, каждый драйвер реализует собственный синтаксис (кто во что горазд). Скорее всего при работе из Delphi - синтаксис отличается от того же SQL Explorer (даже у MS SQL и MS Access они отличаются), что и приводит либо к ситуации с фатальной ошибкой, либо к просто ошибочной выборке.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045
отправлено / posted
С этой проблемой я частично разобрался. Запрос не выполнялся по той причине, что в архиве встречаются записи с искаженной или неправильной временной меткой в поле TIME (что именно записано в этом месте пока сказать сложно). Стоило исключить из запроса места с "битым" временем, как он стал выполняться. Есть вопросы: 1. По какой причине в архиве появляются такие записи. 2. Как правильно сформировать запрос с временным интервалом.
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1) А как выглядят эти записи с "битыми" метками времени? 2) Для запроса интервала Вам необходимо выполнять обычный запрос без DISTINCT.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045
отправлено / posted
Вот фрагмент выборки сделанной в MS Access из архива запросом : SELECT DISTINCT TIME, VALUE, CHAN_ID FROM ARCHIVE;
Пробел или пустая ячейка в итоговой таблице, как раз и есть такое "битое" место в архиве. Собственно, ADO возвращает пустой набор данных из-за этого, то есть как только встречается в результате запроса неправильное значение соответствующее данному типу - набор данных считается неверным .
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HI-TIGER
Junior Member / Новичок
Участник № / Member № 1045
отправлено / posted
Релиз 5.11. Подтип канала КОНТР_2. Драйвер реализует прием данных от аппаратуры по TCP/IP.
Сообщения / Posts 6 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
КОНТР_2 - это посложнее будет... Дело в том, что если метка времени в канале задана вне диапазона времени (максимальное значение 0xFFFFFFF), то в СПАДЕ появляются записи с пустыми метками времени. Очень похоже на Ваш случай - может стоит в драйвере лог встроить, чтобы посмотреть какие метки у Вас по этим каналам приходят?
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |