В каких случаях GetFirst возвращает tsNotFound?
-
- заказчик
- Сообщения: 83
- Зарегистрирован: Пн, 10/12/2007 13:24
- Имя Фамилия: Сергей Золотухин
- Откуда: Северо-Западные Магистральные Нефтепроводы
- Контактная информация:
В каких случаях GetFirst возвращает tsNotFound?
Перестал обрабатываться в программе(vip) GetFirst KatOrg!
В таблице 6000 записей, а GetFirst KatOrg возвращает tsNotFound.
В чем проблема? Очень надо!!!
PS . Есть какие-то ограничения использования GetFirst при наличии в таблице записей с разными номерами офисов
В таблице 6000 записей, а GetFirst KatOrg возвращает tsNotFound.
В чем проблема? Очень надо!!!
PS . Есть какие-то ограничения использования GetFirst при наличии в таблице записей с разными номерами офисов
-
- топ-софт
- Сообщения: 197
- Зарегистрирован: Чт, 06/09/2007 17:38
- Имя Фамилия: Вадим Володько
- Откуда: ТопСофт
- Контактная информация:
Неплохо было бы указать, какая у Вас СУБД, включена ли филиальность по проблемной таблице, да и просто фрагмент кода в конце концов .
А то наши штатные телепаты в отпуске .
Некоторые из наиболее распространенных вариантов:
1. Прежде всего, tsNotFound может выдаваться, когда по заданному ключу не найдено записей.
Например, результат вот такого фрагмента будет всегда tsNotFound вне зависимости от количества записей в таблице:
2. Если по таблице включена филиальность, а права у пользователя, выполняющего GetFirst, распространены только на определенный офис (и записей в данной таблицы по данному офису нет) - результат tsNotFound также неудивителен.
3. В случае с СУБД Oracle не выполняется регламентное администрирование (сбор статистики). Без этого Oracle не просто катастрофически теряет производительность, но даже не гарантирует поиск записей. См. руководство администратора Oracle
А то наши штатные телепаты в отпуске .
Некоторые из наиболее распространенных вариантов:
1. Прежде всего, tsNotFound может выдаваться, когда по заданному ключу не найдено записей.
Например, результат вот такого фрагмента будет всегда tsNotFound вне зависимости от количества записей в таблице:
Код: Выделить всё
GetFirst Table where ((0 == Table.NRec))
3. В случае с СУБД Oracle не выполняется регламентное администрирование (сбор статистики). Без этого Oracle не просто катастрофически теряет производительность, но даже не гарантирует поиск записей. См. руководство администратора Oracle
-
- заказчик
- Сообщения: 83
- Зарегистрирован: Пн, 10/12/2007 13:24
- Имя Фамилия: Сергей Золотухин
- Откуда: Северо-Западные Магистральные Нефтепроводы
- Контактная информация:
1. СУБД Oracle 10g
2. филиальности нет, присутствуют записи с разыми номерами офиса.
3.
4.
2. филиальности нет, присутствуют записи с разыми номерами офиса.
3.
Код: Выделить всё
pCustomer:=comp(0);
if RunInterface('L_KATORG::GETKATOR', pCustomer, comp(0),false,comp(0),comp(0)) <> cmCancel
{
if(GetFirst Katorg where ((pCustomer == Katorg.NREC)) = tsOK)
{
// Сюда не попадает, хотя pCustomer имеет значение которое присутствует в таблице
sKontragent:=katorg.name;
}
регламентное администрирование (сбор статистики).
подскажите какой это именно документ(название), я у себя найти не могу.См. руководство администратора Oracle
-
- топ-софт
- Сообщения: 76
- Зарегистрирован: Вс, 16/09/2007 10:23
- Имя Фамилия: Леонид Поликутин
- Откуда: Галактика СПб
- Контактная информация:
Так как корпорация не может (по сути и не должна) выпускать документацию на сторонний програмный продукт, в т.ч. и Oracle, надо искать самому.подскажите какой это именно документ(название), я у себя найти не могу.
Например, см. www.sql.ru
или
http://download.oracle.com/docs/cd/B193 ... PFGRF30102
п.п. 14.3.1 Gathering Statistics with DBMS_STATS Procedures
-
- заказчик
- Сообщения: 83
- Зарегистрирован: Пн, 10/12/2007 13:24
- Имя Фамилия: Сергей Золотухин
- Откуда: Северо-Западные Магистральные Нефтепроводы
- Контактная информация:
То что есть sql.ru и документация по функциям самой СУБД, я в курсе.
Я спрашивал продокумент в котором написано следующее:
Я спрашивал продокумент в котором написано следующее:
В документации самого оракла написано про производительность, а то что не гарантирован поиск записей я что-то там такого не встречал.Без этого Oracle не просто катастрофически теряет производительность, но даже не гарантирует поиск записей.
-
- топ-софт
- Сообщения: 197
- Зарегистрирован: Чт, 06/09/2007 17:38
- Имя Фамилия: Вадим Володько
- Откуда: ТопСофт
- Контактная информация:
Сергей, это из опыта.
Мы не можем цитировать чужие документации и давать гарантии за наличие чего-то в документации на Oracle.
Но можем настоятельно рекомендовать и даже требовать: используйте все регламентные процедуры, к которым обязывает Oracle.
В противном случае - при неадекватном поведении СУБД - Галактика это никак не исправит.
Мы не можем цитировать чужие документации и давать гарантии за наличие чего-то в документации на Oracle.
Но можем настоятельно рекомендовать и даже требовать: используйте все регламентные процедуры, к которым обязывает Oracle.
В противном случае - при неадекватном поведении СУБД - Галактика это никак не исправит.
-
- топ-софт
- Сообщения: 566
- Зарегистрирован: Пт, 21/09/2007 15:19
- Имя Фамилия: Фёдор Терсин
- Откуда: Галактика Софт
- Контактная информация:
Сергей, причин - полно. Например - наличие жёсткой подцепки к Katorg какой-то таблицы, в которой для pCustomer == Katorg.NREC записей нет. Перечислить все причины никакой возможности нет. Поэтому попробуйте сами разобраться в своём коде, почему он перестал работать. Может быть что-то меняли в последнее время. Или пробуйте понемногу упрощать интерфейс. А можно ещё посмотреть ораклёвым трэйсом, какие запросы идут. Так же их можно посмотреть с помощью драйвера с протоколом, распостраняемым с Атлантисом, и кроме того высылаемым техподдержкой в подобных случаях.
-
- топ-софт
- Сообщения: 197
- Зарегистрирован: Чт, 06/09/2007 17:38
- Имя Фамилия: Вадим Володько
- Откуда: ТопСофт
- Контактная информация:
Чтобы быстро понять, не установлено ли жестких подцепок, достаточно сделать GetFirst не по KatOrg, а по синониму, объявив его в select рядом с katorg:
Да и вообще, синонимы обычно лучше использовать для временных целей: гарантированно не испортится буфер текущей записи, не поплывет отображение или работа каких-либо из встроенных алгоритмов Галактики, базирующихся на текущем буфере.
Большинство ведь ленится делать pushpos и poppos до и после вставки своего фрагмента кода (или вообще не понимает, когда и зачем это нужно)
Код: Выделить всё
select
*
from
...
, Katorg
, KatOrg KatOrg001
...
Большинство ведь ленится делать pushpos и poppos до и после вставки своего фрагмента кода (или вообще не понимает, когда и зачем это нужно)