А. Шевелёв

DbfWebServer. Способ эффективной работы с таблицами DBFв среде Интернет


Скачать книгу

" – блок кода в виде строки;

      FieldGet (1) – операция для текущей записи;

      asEval (A:=aArray (10), " P1:=x»)

      где asEval – итератор массива.

      Движок блоков кода

      Сами по себе блоки кода – потрясающее достижение в программировании. Продолжение развития этой идеи, блоков кода (тримплетты) и виртуальной машины мы видим и в технологии Java. Блоки кода повсеместно используются в исходном тексте рассматриваемой программы. Это стало стилем программирования и элементом, позволяющим перенести часть исходного кода из компилируемой части программы в базу данных. Блоки кода позволяют строить очень изящные конструкции. Уменьшается объём исходного кода, повышается функциональность и выразительность программного кода.

      Блоки кода можно хранить в базе данных в виде строк. С другой стороны, блоки кода можно хранить в массиве в скомпилированном виде, готовом для немедленного использования. Эти и другие свойства блоков кода дают возможность построить очень простой и эффективный движок блоков кода системы IxBase.

      Напомним, что представляет собой блок кода. Блок кода – это безымянная функция. Синтаксис этой функции следующий:

      {| a1,a2 |.t.}

      Хотя функция эта безымянная, ссылку на неё можно присвоить переменной

      bC:= {| a1,a2 |.t.}

      и выполнить с помощью функции eval ()

      Eval (bC)

      В эту функцию можно передать параметры, функция с аргументами прмет следующий вид:

      Eval (bC, a1,a2)

      Список параметров безымянной функции при объявлении располагается между двумя вертикальными линиями:

      {|a1,a2|.t.}

      Движок блоков кода системы IxBase – это функция DbfRun (cName). В функцию передается имя блока кода, хранящегося в базе данных, который необходимо выполнить. Текст рабочей функции программы IxBase приведен ниже:

      *********************************************************

      FUNCTION dbfRun (iOrd)

      /********************************************************

      Синтаксис:

      DbfRun (iOrd) —> evalution

      Аргументы:

      iOrd – имя блока кода, который необходимо выполнить.

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

      после выполнения функция возвращает результат выполнения блока кода.

      Описание:

      Функция системная.

      На ее базе сформирован менеджер-интерпретатор блоков кода.

      Функция работает с таблицей DBFBLO00.dbf

      Если вызываемый вектор не существует в таблице блоков кода, то он будет создан.

      Выполнение блоков кода поддерживается стеком, размер которого определен массивом arrDbfRun [].

      Откомпилированный блок помещается в массив для повторного использования.

      Например:

      DBFRUN («ALLUSE00F2») – вызывается на выполнение блок кода с именем «ALLUSE00F2»

      Файл: ixBase.prg

      Автор: Анатолий Шевелев.

      Дата создания: 1993 год.

      Дата последнего изменения: 1995 год.

      *********************************************************

      LOCAL reT:=.t.

      LOCAL inT:=aScan (arrDbfRun, {|z| z [1] ==iOrd})

      LOCAL ixB

      IF inT=0

      aDel (arrDbfRun,1)

      IF (ixB:=DbfBlo00-> (NaiSpr (iOrd,1,3))) =»»

      ixAddVal (ixB, iOrd, SubStr (iOrd,9),ixB:=«*»)

      ixB:=» {||.t.}»

      ELSEIF ixB=«*»

      ixB:=» {||.t.}»

      ELSEIF ixB=» {|»

      ELSE

      ixB:=»