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

  • Автор темы Автор темы anna
  • Дата начала Дата начала
A

anna

Добрый день, коллеги!
Есть некий скрипт, работает уже дцать лет, а тут внезапно стал работать нестабильно - на один и тот же 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 прислал скриншот, что у него на такой запрос выдается все красиво. А у меня - то пусто, то правильно, то пусто, то правильно.
 
1. NOW() - возвращает время с секундами
2. Проверяйте поля a."nob-dat-k" и a."nob-dat-p" в базе, что там содержится, можно даже таблицу выгрузить глянуть.
 
а что за либа, кот. парсит ответ от слона?
 
или вовсе отказаться от ОДБЦ ;)
 
2) в LS укажи явно какой режиме работы ODBC
Что значит режим работы? Где это?
[DOUBLEPOST=1426678734,1426678561][/DOUBLEPOST]
или вовсе отказаться от ОДБЦ ;)
Ну, систему в течение года вообще поменяем, поэтому переходить сейчас на что-то другое нет смысла.
И, все же, должна же быть причина у такого странного поведения!
 
Последнее редактирование:
И, все же, должна же быть причина у такого странного поведения!
ну вы же не описали - что поменялось ;)
апдейты на систему, апдейты на ОДБЦ, дривер устарел...
можно оттрейсить ответы от сервака, по сети (у ОДБЦ тоже есть режим )
 
Драйвер не устарел - новую версию базы не накатывали.
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
Трейсить - попробуем, правда, не знаю, что даст. Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
 
Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
 
Вижу, что через раз правильно отдает, а с какого перепугу - неясно.
Можете передать вместо NOW-sql значение now из лотуса?
Чтобы передать и проверить работу со статичным значением.
 
Эзернет кабель поменяйте да и вообще - сеть проверьте. Там такие чудеса бывают...
8-) тогда бы разброс был по разным вызовам и ошибки были бы разными.... Вначале-то проверка коннекта делается, и этот запрос в агенте отнюдь не первый, остальные-то отрабатывают
 
апдейты на систему - не накатывались, да и если были, то лотусу-то что?
домине - ничего ;), а вот ОДБЦ вполне себе заглючит
[DOUBLEPOST=1426687199,1426687121][/DOUBLEPOST]
:cool: тогда бы разброс был по разным вызовам и ошибки были бы разными....
это от работы стека зависит (TCP повторы делает, при ошибках)
[DOUBLEPOST=1426687319][/DOUBLEPOST] людя бились
 
Что значит режим работы? Где это?
ты в 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

Есть что нибудь подобное? ;)
 
Свойство CacheLimit
Чтение: limit% = odbcResultSet.CacheLimitУстановка: odbcResultSet.CacheLimit = limit%
Максимальное количество записей (тип Integer), кэшируемых в памяти. Помимо числового значения качестве limit% допустимы также константы DB_ALL (кэшируется весь таблиц результатов) или DB_NONE (минимум - только текущая запись находится в памяти). Если задано также значение свойства FetchBachSize, то оно должно быть меньше или равно значения CacheLimit.
Ограничение размера кэша способствует экономии памяти. Но когда размер кэша ограничен, "недавно" прочитанные из базы записи будут постепенно замещать "более старые" записи в кэше. Если записи, которые уже были прочитаны из базы и были замещены в кэше, потребовались скрипту снова, они будут заново считываться из базы данных.
а как это трактует @ToxaRat - это у него узнать надо :)
 
Подключила хэндлер ошибок И в ранее нормально работавшем агенте вижу странное:
Код:
Ошибка 640, LS:DO- Row has been UnCached., LS:DO- Row has been UnCached. on line 2
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!