Применение три́ггера (хранимой процедуры) в Clarion
Добавлено: 29 Ноябрь 2014, 21:21
Привет всем!
Очень нуждаюсь в помощи участников форума знающих Clarion применительно к серверу SQL.
К примеру, на сервере SQL есть три таблицы:
!Таблица операций
DataTableOperation FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(OPR),BINDABLE,CREATE,THREAD
KeyRecordID KEY(OPR:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG !
DateOperation DATE !Дата операции
Arrival DECIMAL(7,2) !Приход
!Таблица условий расчёта
DataTableConditions FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(CON),BINDABLE,CREATE,THREAD !
KeyRecordID KEY(CON:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG
PeriodName STRING(30) !
PeriodDateStartedOperation DATE !Дата начала периода операции
PeriodExpiryDateOperation DATE !Дата окончания периода операции
!Таблица итогов
DataTableTotals FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(TOT),BINDABLE,CREATE,THREAD !
KeyRecordID KEY(TOT:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG !
PeriodDateStartedOperation DATE !Дата начала периода операции
PeriodExpiryDateOperation DATE !Дата окончания периода операции
Totals DECIMAL(7,2) !Сумма прихода Arrival таблицы DataTableOperation за период между значениями PeriodDateStartedOperation и PeriodExpiryDateOperation из таблицы условий DataTableConditions
Локальная переменная в окне Browse
LOC:SummArrivalByDateInterval
Необходимо используя триггер (хранимую процедуру) автоматически отображать (обновлять) значение расчёта в локальной переменной LOC:SummArrivalByDateInterval в окне Browse, а также добавлять (обновлять) значение Totals в таблице DataTableTotals сумм итогов в случае добавления, удаления или изменения в заданной таблице операций DataTableOperation, если эти изменения были инициированы как данным приложением, так и другими приложениями находящимися на компьютерах в локальной сети.
В связи с этим вопросы:
1)Как программно из приложения Clarion создать хранимую процедуру (функцию) на SQL сервере?
2)Как программно из приложения Clarion создать триггер на SQL сервере?
3)Как правильно вызвать хранимую процедуру (функцию) SQL в коде Clarion и передать результат переменной Clarion?
4)Как правильно назначить условие выполнения и передать результат работы триггера SQL переменной Clarion или полям таблицы?
5)Как правильно отлавливать событие работы триггера SQL?
6)Каким образом автоматически отображать (обновлять) в окне Browse возвращаемое значение результата работы триггера (хранимой процедуры) в локальную переменную LOC:SummArrivalByDateInterval по условию из таблицы условий DataTableConditions по интервалу указанному в полях PeriodDateStartedOperation и PeriodExpiryDateOperation для расчёта суммы итога по дате операции поля DateOperation для поля Arrival таблицы DataTableValue.
7) Каким образом автоматически добавлять (обновлять) значение суммы итога в таблице DataTableTotals значение результата работы триггера (хранимой процедуры) по условию из таблицы условий DataTableConditions по интервалу указанному в полях PeriodDateStartedOperation и PeriodExpiryDateOperation для расчёта суммы итога по дате операции поля DateOperation для поля Arrival таблицы DataTableValue.
Нужен простой подробный пример текста кода Clarion и SQL.
P. S. С применением Clarion для SQL и самим SQL сервером (языком SQL) пока практически не знаком, поэтому просьба не судите строго, и по возможности предложите более подробные варианты (исходники) для решения поставленной задачи.
Заранее всем спасибо!
Очень нуждаюсь в помощи участников форума знающих Clarion применительно к серверу SQL.
К примеру, на сервере SQL есть три таблицы:
!Таблица операций
DataTableOperation FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(OPR),BINDABLE,CREATE,THREAD
KeyRecordID KEY(OPR:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG !
DateOperation DATE !Дата операции
Arrival DECIMAL(7,2) !Приход
!Таблица условий расчёта
DataTableConditions FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(CON),BINDABLE,CREATE,THREAD !
KeyRecordID KEY(CON:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG
PeriodName STRING(30) !
PeriodDateStartedOperation DATE !Дата начала периода операции
PeriodExpiryDateOperation DATE !Дата окончания периода операции
!Таблица итогов
DataTableTotals FILE,DRIVER('SQLAnywhere'),OWNER('Database,DBA,sql'),PRE(TOT),BINDABLE,CREATE,THREAD !
KeyRecordID KEY(TOT:RecordID),NOCASE,PRIMARY !
Record RECORD,PRE()
RecordID ULONG !
PeriodDateStartedOperation DATE !Дата начала периода операции
PeriodExpiryDateOperation DATE !Дата окончания периода операции
Totals DECIMAL(7,2) !Сумма прихода Arrival таблицы DataTableOperation за период между значениями PeriodDateStartedOperation и PeriodExpiryDateOperation из таблицы условий DataTableConditions
Локальная переменная в окне Browse
LOC:SummArrivalByDateInterval
Необходимо используя триггер (хранимую процедуру) автоматически отображать (обновлять) значение расчёта в локальной переменной LOC:SummArrivalByDateInterval в окне Browse, а также добавлять (обновлять) значение Totals в таблице DataTableTotals сумм итогов в случае добавления, удаления или изменения в заданной таблице операций DataTableOperation, если эти изменения были инициированы как данным приложением, так и другими приложениями находящимися на компьютерах в локальной сети.
В связи с этим вопросы:
1)Как программно из приложения Clarion создать хранимую процедуру (функцию) на SQL сервере?
2)Как программно из приложения Clarion создать триггер на SQL сервере?
3)Как правильно вызвать хранимую процедуру (функцию) SQL в коде Clarion и передать результат переменной Clarion?
4)Как правильно назначить условие выполнения и передать результат работы триггера SQL переменной Clarion или полям таблицы?
5)Как правильно отлавливать событие работы триггера SQL?
6)Каким образом автоматически отображать (обновлять) в окне Browse возвращаемое значение результата работы триггера (хранимой процедуры) в локальную переменную LOC:SummArrivalByDateInterval по условию из таблицы условий DataTableConditions по интервалу указанному в полях PeriodDateStartedOperation и PeriodExpiryDateOperation для расчёта суммы итога по дате операции поля DateOperation для поля Arrival таблицы DataTableValue.
7) Каким образом автоматически добавлять (обновлять) значение суммы итога в таблице DataTableTotals значение результата работы триггера (хранимой процедуры) по условию из таблицы условий DataTableConditions по интервалу указанному в полях PeriodDateStartedOperation и PeriodExpiryDateOperation для расчёта суммы итога по дате операции поля DateOperation для поля Arrival таблицы DataTableValue.
Нужен простой подробный пример текста кода Clarion и SQL.
P. S. С применением Clarion для SQL и самим SQL сервером (языком SQL) пока практически не знаком, поэтому просьба не судите строго, и по возможности предложите более подробные варианты (исходники) для решения поставленной задачи.
Заранее всем спасибо!