This is topic Чтение архива через ADO в DELPHI 5 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/000082.html

Posted by HI-TIGER (Участник № / Member № 1045) on :
 
При попытке почитать данные запросом вида
SELECT DISTINCT ARCHIVE.CHAN_NAME, ARCHIVE.CHAN_ID, ARCHIVE.ATTR_CODE, ARCHIVE.ATTR_NAME, ARCHIVE.FLAGS, ARCHIVE.VALUE FROM ARCHIVE
прекрасно читаю все данные, получая срез по последим изменениям из архива.
Стоит только добавить в запрос поле ARCHIVE.TIME -возникает исключение [Недоумение / Confused] , либо возвращается пустой набор данных. 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 [attention / внимание] (что именно записано в этом месте пока сказать сложно). Стоило исключить из запроса места с "битым" временем, как он стал выполняться. Есть вопросы:
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;

TIME VALUE CHAN_ID
19.07.2004 1:00:00 8,761896 385
19.07.2004 10:06:13 1006,094 386
19.07.2004 9:25:30 1042,666 387
78,09516 388
21.05.2004 11:19:26 88,38087 389
19.07.2004 10:15:13 4,21245 390
19.07.2004 1:00:00 0,5584854 391
.....................................
19.07.2004 1:00:00 46,0317 442
19.07.2004 10:26:34 44,38091 443
329,9142 444
19.07.2004 7:30:50 39,072 445
65,23071 446
19.07.2004 10:29:00 205,2306 447
19.07.2004 6:43:07 343,5894 448


Пробел или пустая ячейка в итоговой таблице, как раз и есть такое "битое" место в архиве. Собственно, ADO возвращает пустой набор данных из-за этого, то есть как только встречается в результате запроса неправильное значение соответствующее данному типу - набор данных считается неверным [А-а! / Eek!] .
 
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), то в СПАДЕ появляются записи с пустыми метками времени. Очень похоже на Ваш случай - может стоит в драйвере лог встроить, чтобы посмотреть какие метки у Вас по этим каналам приходят?
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2