28.06.2006, 12:55 | #1 |
Участник
|
Всем доброго времени суток.
Пытаюсь найти записб во временной таблице TempPostedWhseReceiptLine. Написал следующий код: TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code"); TempPostedWhseReceiptLine."Item No." := SomeValue1; TempPostedWhseReceiptLine."Location Code" := SomeValue2; TempPostedWhseReceiptLine."Variant Code" := SomeValue3; IF TempPostedWhseReceiptLine.FIND THEN message('Find'); В результате выполнения кода запись не находится, хотя она там есть. Если написать код: TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code"); TempPostedWhseReceiptLine.setrange("Item No.",SomeValue1); TempPostedWhseReceiptLine.setrange("Location Code",SomeValue2); TempPostedWhseReceiptLine.setrange("Variant Code",SomeValue3); IF TempPostedWhseReceiptLine.FIND('-') THEN message('Find'); то запись находится успешно. В чем может быть ошибка? И какой код правильней использовать с точки зрения производительности? Заранее спасибо |
|
28.06.2006, 13:09 | #2 |
Участник
|
В справке написано "If SearchStr contains '=', '>' or '<', you must assign values to all fields of the current and primary keys before you call FIND." ( Nav 4.0 SP1)
, что нужно задать значения главный ключ для первого варианта, но так как он скорее всего не известен, то остается второй вариант! Что касается быстродействия, то быстрее конечно 1 вариант, так как в таблице содержится индекс первичного ключа, что уменьшит время поиска в отличии от варианта с SetRange. |
|
28.06.2006, 13:30 | #3 |
Участник
|
Но я не использую символы '+','-' или '=' для FIND. Или использование FIND без параметров эквивалентно FIND('=')?
|
|
28.06.2006, 14:11 | #4 |
Участник
|
Да!
И последний совет: RTFM |
|
28.06.2006, 17:45 | #5 |
Участник
|
Это всё стёб или всерьёз?
|
|
29.06.2006, 12:04 | #6 |
Участник
|
Это серьезный стеб!
А вообще он спросил я ответил! |
|
03.07.2006, 16:08 | #7 |
Участник
|
Использование FIND без параметров (или FIND('=')) аналогично использованию GET. Перед вызовом метода необходимо определить ВСЕ поля первичного ключа. При этом сам ключ устанавливать командой SETCURRENTKEY не обязательно.
|
|
04.07.2006, 10:36 | #8 |
Участник
|
Так действительно ли можно использовать при поиске присвоение без modify, как указано выше ?
Код: TempPostedWhseReceiptLine.SETCURRENTKEY("Item No.","Location Code","Variant Code"); TempPostedWhseReceiptLine."Item No." := SomeValue1; TempPostedWhseReceiptLine."Location Code" := SomeValue2; TempPostedWhseReceiptLine."Variant Code" := SomeValue3; IF TempPostedWhseReceiptLine.FIND THEN |
|
04.07.2006, 12:41 | #9 |
Участник
|
А тут модифай и не причем, здесь не стояла задача поменять значение записи. Объявление полей нужно для вызова Find без параметра. Но в этом примере нужно еще задать поля главного ключа, чтобы записи находились!
|
|
04.07.2006, 15:08 | #10 |
Участник
|
Имел в виду другое. Неужто можно использовать синтаксис присвоения для поиска?
|
|
04.07.2006, 17:29 | #11 |
Участник
|
FIND без параметров (то же самое, что и FIND('=')) это поиск по полям первичного ключа. Для того, чтобы искать по полям первичного ключа нужно эти поля определить. Используя оператор присвоения. Можно использовать функцию GET. Логика работы этого оператора наверное ни у кого не вызывает вопросов ...
|
|
04.07.2006, 19:18 | #12 |
Участник
|
GET'а? Да, не вызывает А вот с присвоением раньше просто не довелось столкнуться. Как-то обходился GET'ом в одну строчку
Что ж, бум знать, спасибо за инфо! |
|