Применение три́ггера (хранимой процедуры) в Clarion
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Применение три́ггера (хранимой процедуры) в Clarion
Привет всем!
Очень нуждаюсь в помощи участников форума знающих 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) пока практически не знаком, поэтому просьба не судите строго, и по возможности предложите более подробные варианты (исходники) для решения поставленной задачи.
Заранее всем спасибо!
С Уважением, Developer
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
Re: Применение три́ггера (хранимой процедуры) в Clarion
Развёрнутый ответ давать не буду, вкратце:
создать хранимку/триггер:илиПолучение значения из хп смотри в хелпе "Stored procedures". Как создать процедуру можно посмотреть например здесь
создать хранимку/триггер:
Код: Выделить всё
File{prop:sql}='код создания хп'
Код: Выделить всё
SEND(File, 'код создания хп')
С уважением, ДП
Re: Применение три́ггера (хранимой процедуры) в Clarion
Дед Пахом спасибо за столь оперативные ответы!
Приступил к изучению примеров...
Приступил к изучению примеров...
С Уважением, Developer
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
Re: Применение три́ггера (хранимой процедуры) в Clarion
Собственно, не могу не добавить к вышеизложенному: создавать хранимки/триггера из Clarion - не самая лучшая идея...
С уважением, ДП
Re: Применение три́ггера (хранимой процедуры) в Clarion
А каким образом лучше создавать три́ггера (хранимые процедуры) для программно создаваемой пустой базы SQL конечного пользователя?
Если есть возможность, прошу сообщить о недостатках (достоинствах) создания три́ггера (хранимой процедуры) из Clarion.
На данном этапе, для меня важно изучить технологию (язык SQL) создания и применения три́ггера (хранимой процедуры) созданных в базе данных SQL любыми способами во взаимодействии с приложением Clarion.
Если есть возможность, прошу сообщить о недостатках (достоинствах) создания три́ггера (хранимой процедуры) из Clarion.
На данном этапе, для меня важно изучить технологию (язык SQL) создания и применения три́ггера (хранимой процедуры) созданных в базе данных SQL любыми способами во взаимодействии с приложением Clarion.
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 1014
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Re: Применение три́ггера (хранимой процедуры) в Clarion
Дед Пахом писал(а):Собственно, не могу не добавить к вышеизложенному: создавать хранимки/триггера из Clarion - не самая лучшая идея...
- начать изучать, а не писать поэмы...Developer писал(а):А каким образом лучше создавать три́ггера (хранимые процедуры) для программно создаваемой пустой базы SQL конечного пользователя?
Если есть возможность, прошу сообщить о недостатках (достоинствах) создания три́ггера (хранимой процедуры) из Clarion.
На данном этапе, для меня важно изучить технологию (язык SQL) создания и применения три́ггера (хранимой процедуры) созданных в базе данных SQL любыми способами во взаимодействии с приложением Clarion.
Без обид
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Re: Применение три́ггера (хранимой процедуры) в Clarion
И я согласен с предыдущими ораторами, что SQL базу сначала надо создать на сервере его средствами (в т.ч. хранимки, триггеры), а потом структуру импортировать в словарь и работать с созданной базой. Ведь прелесть хранимок и триггеров в том, что нет траффика от клиента к серваку. Посылаешь из клариона маленький запрос с вызовом хранимки, а сервер выполняет 10000 строк кода и выдаёт одну цифру, класс!!!
We are hard at work… for you.
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Применение три́ггера (хранимой процедуры) в Clarion
Добрый день!
Не только трафик и время сокращает, но и еще позволяет часть программного кода хранить в "открытом" виде.
При изменении которого не требуется перекомпиляция программы.
Но, есть и некоторое разумное зерно в этом вопросе.
Как пример:
Если я хочу написать собственное управление базой с ,например, ограниченными возможностями.
Да и еще , чтобы конкретый пользователь-программист мог только работать с хранимыми запросами, особо не вдаваясь в SQL
А по этому поводу:
Алексей
Не только трафик и время сокращает, но и еще позволяет часть программного кода хранить в "открытом" виде.
При изменении которого не требуется перекомпиляция программы.
Но, есть и некоторое разумное зерно в этом вопросе.
Как пример:
Если я хочу написать собственное управление базой с ,например, ограниченными возможностями.
Да и еще , чтобы конкретый пользователь-программист мог только работать с хранимыми запросами, особо не вдаваясь в SQL
А по этому поводу:
на вкус и цвет,... Мне привычней сначала создать словарь, а при выполнении программы- таблицы сами создадутся в SQL...что SQL базу сначала надо создать на сервере его средствами (в т.ч. хранимки, триггеры), а потом структуру импортировать в словарь и работать с созданной базой
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Re: Применение три́ггера (хранимой процедуры) в Clarion
Ну а как сами? Подсовываешь скрипты создания? Или оставляешь всё на усмотрения Клариона?Алексей- Софт-Центр писал(а):а при выполнении программы- таблицы сами создадутся в SQL...
We are hard at work… for you.
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Применение три́ггера (хранимой процедуры) в Clarion
добрый день!
Базу и пользователей создаю средствами баз (sql, mysql,...)
При описании таблиц (файлов) в словаре использую флаг create
процедуры создаю или средствами баз ручками или скриптами.
поэтому при старте программы таблицы в базе создаются "сами"
Алексей
Базу и пользователей создаю средствами баз (sql, mysql,...)
При описании таблиц (файлов) в словаре использую флаг create
процедуры создаю или средствами баз ручками или скриптами.
поэтому при старте программы таблицы в базе создаются "сами"
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Re: Применение три́ггера (хранимой процедуры) в Clarion
Понятно. А как с форейн ключами, триггерами? Кларион на автомате может форейн ключи создавать? Это принципиальный вопрос. Если нет, то получается, что SQL сервер используется банально как хранилище данных. А, чтобы его использовать полноценно, нужны все возможности SQL (хранимки, триггеры ...). Такая работа (как хранилище), может быть, достаточна для SQLite.
We are hard at work… for you.
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Применение три́ггера (хранимой процедуры) в Clarion
Добрый день!
естественно, что сюда входят и функции, и тригеры и прочие бантики...
Что касается внешних ключей (и прочих прелестей) - да, их приходится создавать ручками средствами баз.
Алексей
процедурки = "хронимки"процедуры создаю или средствами баз ручками или скриптами
естественно, что сюда входят и функции, и тригеры и прочие бантики...
Что касается внешних ключей (и прочих прелестей) - да, их приходится создавать ручками средствами баз.
Алексей
-
- ✯ Ветеран ✯
- Сообщения: 4994
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Re: Применение три́ггера (хранимой процедуры) в Clarion
Ну а в чём тогда смысл создания SQL таблиц Кларионом? Проще выгрузить структуру БД в скрипт. А потом на стороне клиента его запускать.
We are hard at work… for you.
Re: Применение три́ггера (хранимой процедуры) в Clarion
Алексей, присоединяюсь к Kreator'у, я тоже не понимаю, какой в этом сермяжный смысл?добрый день!
Базу и пользователей создаю средствами баз (sql, mysql,...)
При описании таблиц (файлов) в словаре использую флаг create
процедуры создаю или средствами баз ручками или скриптами.
поэтому при старте программы таблицы в базе создаются "сами"
IMHO Не лучше ли всё сделать одним скриптом и сразу (заодно и форейн кеи прописать, триггеры, и, возможно, calculated fields)?
Кстати, знает ли кто, как в Clarion 9.x при создании индекса для таблицы MS SQL указать, что поле должно быть в included fields? Боюсь, что никак.
А это очень важные штуки, если вы собираетесь писать по-настоящему клиент-серверное приложение и обрабатывать большие массивы данных.
Re: Применение три́ггера (хранимой процедуры) в Clarion
Полностью согласен с Shur:
А каким образом применить SQL скрипт, если нет системного администратора баз данных SQL у конечного пользователя, нет инструментария для интерактивного выполнения SQL скрипта, конечный пользователь не компетентен и не желает делать лишних движений.
Мои вопросы в основном связаны с заменой файлов TPS на SQL базу Sybase Anywhere без полной поставки и установки всего пакета Sybase Anywhere и средств администрирования баз данных.
Как вариант, поставлять конечному пользователю пустую базу данных с готовой структурой (пользователи, триггеры, хранимые процедуры, форейн ключи и т.д.), однако база данных SQL Sybase Anywhere конкретного персонального пользователя должна быть зашифрована на этапе создания автоматически сгенерированным паролем с определённым алгоритмом шифрования, и этот пароль на базу SQL Sybase Anywhere в целях безопасности программисту не должен быть известен.
Есть ли возможность программно (RunTime) из приложения Clarion сменить параметры существующей пустой готовой базы данных SQL Sybase Anywhere (пароль (ключ) шифрования, алгоритм шифрования, пользователи, пароль DBA (администратора базы)) поставляемой вместе с приложением Clarion для решения вопросов связанных с конфиденциальностью и защитой информации данной базы данных.
Прошу участников форума, имеющих опыт работы в Clarion с Sybsae SQL Anywhere в качестве хорошей альтернативы по замене файлов Clarion TPS высказать свои мнения и предоставить конкретные решения по данному вопросу.
Однако, все предложения использования внешнего SQL скрипта хорошо применимы при наличии системного администратора баз данных SQL у конечного пользователя.Алексей, присоединяюсь к Kreator'у, я тоже не понимаю, какой в этом сермяжный смысл?
IMHO Не лучше ли всё сделать одним скриптом и сразу (заодно и форейн кеи прописать, триггеры, и, возможно, calculated fields)?
А каким образом применить SQL скрипт, если нет системного администратора баз данных SQL у конечного пользователя, нет инструментария для интерактивного выполнения SQL скрипта, конечный пользователь не компетентен и не желает делать лишних движений.
Мои вопросы в основном связаны с заменой файлов TPS на SQL базу Sybase Anywhere без полной поставки и установки всего пакета Sybase Anywhere и средств администрирования баз данных.
Как вариант, поставлять конечному пользователю пустую базу данных с готовой структурой (пользователи, триггеры, хранимые процедуры, форейн ключи и т.д.), однако база данных SQL Sybase Anywhere конкретного персонального пользователя должна быть зашифрована на этапе создания автоматически сгенерированным паролем с определённым алгоритмом шифрования, и этот пароль на базу SQL Sybase Anywhere в целях безопасности программисту не должен быть известен.
Есть ли возможность программно (RunTime) из приложения Clarion сменить параметры существующей пустой готовой базы данных SQL Sybase Anywhere (пароль (ключ) шифрования, алгоритм шифрования, пользователи, пароль DBA (администратора базы)) поставляемой вместе с приложением Clarion для решения вопросов связанных с конфиденциальностью и защитой информации данной базы данных.
Прошу участников форума, имеющих опыт работы в Clarion с Sybsae SQL Anywhere в качестве хорошей альтернативы по замене файлов Clarion TPS высказать свои мнения и предоставить конкретные решения по данному вопросу.
С Уважением, Developer