Возвращается значение контрольной суммы, вычисленное для текущей записи таблицы в текущей рабочей области. Это значение Вы можете использовать для контроля изменения данных, сохраненных в таблице. Вы можете вычислять контрольные суммы для данных как 16-битные, так и 32-битные для очень больших символьных массивов (строк).

SYS(2017) обеспечивает дополнительную функциональность, по сравнению с функцией  SYS(2007) - Значение Контрольной суммы.

SYS(2017, cExpression [, nSeed [, nFlags]])

Параметры

cExpression

Определяет список полей Записи (разделенных запятой), которые исключаются при вычислении контрольной суммы записи. Максимальная длина данной строки списка полей ограничена 256 -ю символами.

Если выражение cExpression - пусто, Visual FoxPro не исключает поля, кроме полей типа Memo и General .

nSeed

Определяет числовую величину = 0, которая используется для вычисления контрольной суммы, применяется для совместимости с младшими версиями VFP, указание значения = -1 эквивалентно внутреннему значению данного параметра = 0. При Вычислении контрольной суммы CRC32 система Visual FoxPro игнорирует данный параметр nSeed.

nFlags

Определяет дополнительный параметр вычисления CRC16 / CRC32

Версии Visual FoxPro < 8.0 используют механизм CRC16 = 16-битный алгоритм вычисления контрольной суммы для символьных данных. В настоящий момент Visual FoxPro обеспечивает вычисление КС как CRC32,  32-битный алгоритм. Устанавливая первый бит в данном параметре Вы можете управлять алгоритмом вычисления КС (контрольной суммы). 

В следующей таблице представлены возможные значения параметра nFlags.

Значение Биты Описание

1

001

Вычисление контрольной суммы по алгоритму CRC32.

2

010

Включить также поля типа Memo при вычислении КС.

Вы можете использовать второй бит данного параметра для указания того, что поля типа Memo включаются в список полей, по которым вычисляется КС, в общем случае система Visual FoxPro исключает поля типа Memo при вычислении CRC.

В следующей таблице представлены возможные значения параметра nFlags.

nFlags Описание

0

Вычисление КС по списку полей cExpression, используя CRC16 - алгоритм. (По-умолчанию)

1

Вычисление КС по списку полей cExpression, используя CRC32 - алгоритм.

2

Вычисление КС текущей записи сполями Memo , используя CRC16 - алгоритм.

3

Вычисление КС текущей записи сполями Memo , используя CRC32 - алгоритм.

Expand imageВозвращаемое значение

Символьное.  SYS(2017) возвращает значение контрольной суммы

Expand imageКомментарии

При вычислении Контрольной суммы записи поля типа Memo и General игнорируются, если параметр nFlags не равен 2 или 3.

Система Visual FoxPro для вычисления КС посылает комбинированную символьную строку в модуль вычисления CRC32 routine.

Система Visual FoxPro возвращает значение = "0", если нет открытой таблицы в текущей рабочей области, или указатель записи имеет недействительное значение (eof()=.T., bof()=.T.). 

При построении комбинированной строки система Visual FoxPro удаляет начальные и хвостовые пробелы в символьных полях, как это делается в функции ALLTRIM( ) .

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

Visual FoxPro вычисляет КС для всех полей текущей записи, кроме полей типа  Memo, General, и полей из списка cExpression. Для этого Вы можете использовать функцию FIELD( ). Если Вы используете установку команды SET FIELDS, то контрольная суммы вычисляется  для полей, указанных в данном списке SET FIELDS .

Поля таблицы могут быть временными (вычисляемыми) полями, которые задаются в рассматриваемой команде, которые отсутствуют в табличной структуре, например поле  LOCATION - является вычисляемым полем:

  CopyCode imageКопировать Код
Use Customer
SET FIELDS TO LOCATION = ALLTRIM(city) + ',' + state

Expand imageСм. также