2014-08-22 3 views
0

Поэтому у меня есть следующие вопросы: Как работает функция SETCURRENTKEY() C/AL в Navision?

 
1. What does SETCURRENTKEY actually do? 
2. What is the benefit of SETCURRENTKEY? 
3. Why would I use SETCURRENTKEY? 
4. When would I use SETCURRENTKEY? 
5. What is the advantage of using an index and how do I tie this analogously to 
the example of an old sorting system of a library? 
6. What type of database querying efficiency problems does this function solve?

Я искал по всему интернету и «IT Pro Developer Справка» внутренняя документации Navision для этого плохо документированы функций, и я не могу найти правильный ответ на мои вопросы.

Единственное, что я знаю, это то, что SETCURRENTKEY устанавливает текущий ключ для переменной записи и сортирует набор записей на основе этого. Когда SETCURRENTKEY используется только с несколькими ключами, это может повысить производительность запросов. Я понятия не имею, что на самом деле происходит, когда база данных использует индекс или не использует индекс.

Кто-то сказал мне, что это работает, как работает SETCURRENTKEY: «Это похоже на старую систему картографических карточек в библиотеке: без SETCURRENTKEY вам придется проходить через каждую полку и вручную отфильтровывать книгу, которую вы хотите. сочетание случайных книг, и вы должны сказать: «Нет, не этот. Да, это один ». С помощью SETCURRENTKEY вы можете иметь индекс, аналогичный старой системе, где вы просто заходите в книжный или музыкальный компакт-диск на основе его« автора »или« исполнителя »и т. Д.«

Это все нормально , но я до сих пор не могу ответить на мои вопросы.

ответ

4
  1. С SETCURRENTKEY вы объявляете ключ (индекс таблицы, который может состоять из многих областей), которые будут использоваться при запросе базы данных с FINDSET/FindFirst/FindLast отчетности, а также порядок записи вы получите в то время как итерация recordset с инструкцией NEXT.
  2. Производительность. Сервер базы данных использует выбранный ключ (индекс таблицы) для извлечения набора записей. Вы всегда лучше указываете SETCURRENTKEY в своем коде, так как вы задумываетесь о своей структуре базы данных и требуемых индексах.
  3. Производительность, чтобы вы знали впереди порядка записей, которые вы получите при повторении через набор записей.
  4. Когда использовать:

Типичное использование заключается в следующем:

RecordVar.SETCURRENTKEY(...) 
RecordVar.SETRANGE(Field, ...) 
RecordVar.SETFILTER(Field, ...) 
RecordVar.SETRANGE(Field, ...) 
... 
IF RecordVar.FINDSET THEN REPEAT 
    // do something with records 
UNTIL RecordVar.NEXT = 0; 

SETCURRENTKEY декларативно, и вступает в силу только тогда, когда FINDSET выполняется. В настоящий момент FINDSET выполняется, база данных будет запрашиваться в таблице, представленной RecordVar, используя фильтры, объявленные SETRANGE/SETFILTER, и ключ/индекс, объявленный SETCURRENTKEY.

Для 5. и 6. и в целом я бы по-настоящему рекомендовал вам ознакомиться с basic database index theory. Это то, что он есть, довольно хорошо объяснил сам, используя аналогию с библиотекой/книгой.

+0

спасибо, Ivka. – MrStack

+1

В соответствии с первым утверждением выше, SETCURRENTKEY (...) не требуется с оператором GET (...). –

+0

Правда. GET() всегда будет использовать первичный ключ и будет игнорировать применяемые фильтры. – Ivka