Ls+odbc в postgres - один и тот же запрос выдает разные данные

anna

Lotus team
03.06.2014
400
7
#1
Добрый день, коллеги!
Есть некий скрипт, работает уже дцать лет, а тут внезапно стал работать нестабильно - на один и тот же SQL запрос то вернет правильное значение из базы, то вдруг ничего на найдет, потом снова найдет итп. При этом в самой Postgres базе ничего не меняется.
Какова может быть природа у такой странности?
запрос простой, типа select a."nob-kod" from PUB.k_ktnob a where (a."nob-dat-p"<=NOW()) AND(a."nob-dat-k">=NOW()) AND (a."nr-prac" = }+TabNum +{)}
Админ Postgres прислал скриншот, что у него на такой запрос выдается все красиво. А у меня - то пусто, то правильно, то пусто, то правильно.
 

savl

Lotus team
28.10.2011
2 131
102
#2
1. NOW() - возвращает время с секундами
2. Проверяйте поля a."nob-dat-k" и a."nob-dat-p" в базе, что там содержится, можно даже таблицу выгрузить глянуть.
 

anna

Lotus team
03.06.2014
400
7
#3

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#6
а что за либа, кот. парсит ответ от слона?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#8
или вовсе отказаться от ОДБЦ ;)
 

anna

Lotus team
03.06.2014
400
7
#9
2) в LS укажи явно какой режиме работы ODBC
Что значит режим работы? Где это?
[DOUBLEPOST=1426678734,1426678561][/DOUBLEPOST]
или вовсе отказаться от ОДБЦ ;)
Ну, систему в течение года вообще поменяем, поэтому переходить сейчас на что-то другое нет смысла.
И, все же, должна же быть причина у такого странного поведения!
 
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#10
И, все же, должна же быть причина у такого странного поведения!
ну вы же не описали - что поменялось ;)
апдейты на систему, апдейты на ОДБЦ, дривер устарел...
можно оттрейсить ответы от сервака, по сети (у ОДБЦ тоже есть режим
Для просмотра контента необходимо: Войти или зарегистрироваться
)
 

anna

Lotus team
03.06.2014
400
7
#11
Драйвер не устарел - новую версию базы не накатывали.
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
Трейсить - попробуем, правда, не знаю, что даст. Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
 

rinsk

Lotus team
12.11.2009
900
44
#12
Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
 

savl

Lotus team
28.10.2011
2 131
102
#13
Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
Можете передать вместо NOW-sql значение now из лотуса?
Чтобы передать и проверить работу со статичным значением.
 

anna

Lotus team
03.06.2014
400
7
#14
Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
:cool: тогда бы разброс был по разным вызовам и ошибки были бы разными.... Вначале-то проверка коннекта делается, и этот запрос в агенте отнюдь не первый, остальные-то отрабатывают
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#15
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
домине - ничего ;), а вот ОДБЦ вполне себе заглючит
[DOUBLEPOST=1426687199,1426687121][/DOUBLEPOST]
:cool: тогда бы разброс был по разным вызовам и ошибки были бы разными....
это от работы стека зависит (TCP повторы делает, при ошибках)
[DOUBLEPOST=1426687319][/DOUBLEPOST]
Для просмотра контента необходимо: Войти или зарегистрироваться
людя бились
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#16
Что значит режим работы? Где это?
ты в LS как к ODBC обращаешься?

Set ODCConn = New ODBCConnection
ODCConn.SilentMode = True

Set SQLQuery = New ODBCQuery
Set SQLQuery.Connection = ODCConn
SQLQuery.SQL = SQLCommand
Set ResultSet = New ODBCResultSet
Set ResultSet.Query = SQLQuery
ResultSet.CacheLimit = DB_NONE

Есть что нибудь подобное? ;)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#18
Для просмотра контента необходимо: Войти или зарегистрироваться
Свойство CacheLimit
Чтение: limit% = odbcResultSet.CacheLimitУстановка: odbcResultSet.CacheLimit = limit%
Максимальное количество записей (тип Integer), кэшируемых в памяти. Помимо числового значения качестве limit% допустимы также константы DB_ALL (кэшируется весь таблиц результатов) или DB_NONE (минимум - только текущая запись находится в памяти). Если задано также значение свойства FetchBachSize, то оно должно быть меньше или равно значения CacheLimit.
Ограничение размера кэша способствует экономии памяти. Но когда размер кэша ограничен, "недавно" прочитанные из базы записи будут постепенно замещать "более старые" записи в кэше. Если записи, которые уже были прочитаны из базы и были замещены в кэше, потребовались скрипту снова, они будут заново считываться из базы данных.
а как это трактует @ToxaRat - это у него узнать надо :)
 

anna

Lotus team
03.06.2014
400
7
#20
Подключила хэндлер ошибок И в ранее нормально работавшем агенте вижу странное:
Код:
Ошибка 640, LS:DO- Row has been UnCached., LS:DO- Row has been UnCached. on line 2
 
Последнее редактирование модератором: