Вопрос:
Как использовать элементы управления и функциональные блоки (далее – ФБ), позволяющие осуществлять просмотр и редактирование данных СУБД.
Ответ:
Рассмотрим на примере.
1. Настоящий пример разработан в целях демонстрации принципа использования следующих элементов:
- Функционального блока SqlRequestWithResult, служащего типом для экземпляра функционального блока способного выполнять запросы к СУБД и получать ответы.
- Функционального блок SqlRequest, служащего для выполнения запросов к СУБД.
- Таблицы данных – элемента, предназначенного для отображения массивов структур в табличном виде, когда каждый элемент массива структур представлен в виде строки. Количество строк соответствует количеству элементов в массиве.
Созданный проект демонстрирует работу MasterScada 4D в качестве приложения обработки данных: получения списка значений из таблиц базы данных и отображения полученных значений в визуальном элементе управления «Таблица данных», редактирования, добавления и удаления строк.
Обработка данных может осуществляться независимо, то есть в разных экземплярах приложения, разными пользователями.
Вывод строк в элемент управления «Таблица данных» осуществляется программой FBD (prSelectCommand), которая с использованием функционального блока SqlRequestWithResult, с определённой в проекте периодичностью, вызывает хранимую процедуру ([dbo].[SelectObjectsCommand]) на Microsoft SQL Server, возвращающую список строк.
В целях редактирования строк используется встроенная функциональная возможность элемента управления «Таблица данных», но результат редактирования будет доступен другим пользователям, использующим собственные экземпляры приложения, только после вызова программы ST (prUpdateCommand), запускаемую нажатием кнопки «Сохранить», в следующем цикле выполнения программы prSelectCommand. Программа prUpdateCommand проходит циклом записи, отображаемые в элементе управления «Таблицы данных», выполняя хранимую процедуру ([dbo].[UpdateObjectsCommand]) на Microsoft SQL Server.
За удаление записей отвечает программа ST (prDeleteCommand), запускаемая нажатием кнопки, которая вызывает хранимую процедуру ([dbo].[DeleteObjectsCommand]) на Microsoft SQL Server. Как и в случае с обновлением данных, результат удаления будет доступен другим пользователям, использующим собственные экземпляры приложения, только после очередного цикла выполнения программы prSelectCommand.
Для добавления данных, как и для других операций, создана отдельная программа (prInsertCommand), запускаемая нажатием кнопки, выполняющая хранимую процедуру ([dbo].[InsertObjectsCommand]). Ввод новых данных осуществляется во вспомогательном окне – окне детализации. Результат добавления будет доступен другим пользователям, использующим собственные экземпляры приложения, только после очередного цикла выполнения программы prSelectCommand.
2. Требования к системе для реализации примера в информационной системе
- Установленный экземпляр Microsoft SQL Server с разрешение выполнять сценарии SQL, создающих таблицы и хранимые процедуры
- Среда разработки MasterScada 4D
3. Формирование объектов в базе данных
3.1. Необходимо выполнить сценарий из файла (см. файл «MakeStoreProc.sql»). Данный сценарий создаст в базе данных следующие объекты:
- таблицу, содержащую некоторый набор данных, предназначенный для отображения в MasterScada 4D;
- набор процедур для вызова из программ MasterScada 4D, позволяющих осуществлять выборку, удаление, обновление и добавление данных в таблице.
Перед выполнением, в первой строке сценария SQL необходимо указать имя базы данных, где должны быть созданы объекты (см. рисунок)
В результате выполнения сценария будут созданы следующие объекты:
4.1. В среде разработки необходимо добавить АРМ в дерево Системы проекта.
4.2. На ветку АРМ «Протоколы» добавить протокол MSSQL
4.3. В свойствах протокола MSSQL задать параметры подключения к базе данных. В настоящем примере параметры подключения выглядят следующим образом:
сервер – имя экземпляра Microsoft SQL Server;
База – специально созданная для данного примера база данных mps_p1;
Порт – номер порта, по которому сервер будет отвечать на запросы, поступающие по сети (см. рисунок)
5.1. Выборку данных из таблицы в проекте будет осуществлять программа, типа MasterSCADA.Program.ProgramFBD с именем «prSelectCommand». Запрос данных будет осуществляться с помощью ФБ SqlRequestWithResult, который необходимо добавить в локальную библиотеку и соответствующим образом настроить.
5.1.1. Создаваемый нами, запрос будет возвращать набор данных, содержащий множество строк и определённое количество столбцов, определённого типа.
TYPE Структура_Объекты:
STRUCT
id_rec: UINT := 0;
ObjectName: STRING;
Descr: STRING;
END_STRUCT;
END_TYPE
В настоящем примере создана структура с именем «Структура_Объекты»
- Входной параметр «pCommand», типа STRING , которому присваивается значение в виде текста (T-SQL), содержащего вызов хранимой процедуры EXEC [dbo].[SelectObjectsCommand], передающий значение в параметр ФБ «Command»;
Примечание: в настоящем примере процедура выборки «SelectObjectsCommand» не имеет параметров, которые можно применить в качестве критериев отбора данных, так как фильтрация данных будет осуществляться в элементе управления «Таблица данных»
- Выходной параметр «Результат», типа одномерный массива структуры «Структуры_Объекты», принимающий значение из параметра ФБ «Result»;
- Выходной параметр «pError» , типа STRING , принимающий сообщения об ошибках из параметра ФБ «Error»;
6. Создание пользовательского интерфейса
6.1. В целях отображения данных создаётся пользовательский интерфейс.
6.1.1. В проект добавляется Окно с именем «ОкноСписок», назначаемое стартовым окном АРМ.
6.1.2. На окно добавляется элемент управления «Таблица данных», свойство «Источник данных» которого, связывается с параметром программы «prSelectCommand.Результат».
7.1. Обновление данных в таблице будет осуществлять программа, типа MasterSCADA.Program.ProgramST с именем «prUpdateCommand». Обновление данных будет осуществляться с помощью ФБ SqlRequest.
7.1.1. В локальную библиотеку помещается функциональный блок Библиотеки.Protocols.ФБ.SqlRequest, который затем модернизируется, добавлением параметров, соответствующих столбцам таблицы:
7.1.3. В программу добавляются параметры:
- «pCommand», типа STRING, начальное значение которого, содержит вызов хранимой процедуры с параметрами:
EXEC [dbo].[UpdateObjectCommand] @id_rec = {id_rec}, @ObjectName = {ObjectName}, @Descr = {Descr}
где: {id_rec}; {ObjectName}; {Descr} – именованные параметры ФБ.SqlRequest,
@id_rec; @ObjectName; @Descr – параметры хранимой процедуры, получающие значения из именованных параметров ФБ.SqlRequest.
7.1.5. В процессе выполнения программы осуществляется циклическое прохождение по элементам массива «Результат» и для каждого элемента вызывается ФБ. SqlRequest с заполнением параметров значениями элемента массива:
VAR
i: UINT := 0; //счётчик
L: UINT := 1; //количество записей в таблице данных
END_VAR
L:= UPPER_BOUND(ARR:=Результат , DIM:= 0);
FOR i :=0 TO L - 1 DO
i:= i +1;
SqlRequest_1(Command:= pCommand, Transaction:= pTransaction, id_rec:=Результат[i].id_rec , ObjectName:= Результат[i].ObjectName, Descr:= Результат[i].Descr, Error => pError);
END_FOR;
7.1.6. Вызов программы осуществляется кнопкой «Сохранить», для которой определено событие «Клик мыши» с вызовом программы
8.1. Для удаления определённой строки необходимо получить идентификатор удаляемой записи из колонки «Идентификатор» элемента управления «Таблица данных».
В целях получения идентификатора используется событие элемента управления «Таблица данных» - «Клик по ячейке», с помощью которого можно получить значение текущей строки, а затем значение ячейки строки, содержащей идентификатор, который передаётся программе, осуществляющей удаление записей.
Как использовать элементы управления и функциональные блоки (далее – ФБ), позволяющие осуществлять просмотр и редактирование данных СУБД.
Ответ:
Рассмотрим на примере.
1. Настоящий пример разработан в целях демонстрации принципа использования следующих элементов:
- Функционального блока SqlRequestWithResult, служащего типом для экземпляра функционального блока способного выполнять запросы к СУБД и получать ответы.
- Функционального блок SqlRequest, служащего для выполнения запросов к СУБД.
- Таблицы данных – элемента, предназначенного для отображения массивов структур в табличном виде, когда каждый элемент массива структур представлен в виде строки. Количество строк соответствует количеству элементов в массиве.
Созданный проект демонстрирует работу MasterScada 4D в качестве приложения обработки данных: получения списка значений из таблиц базы данных и отображения полученных значений в визуальном элементе управления «Таблица данных», редактирования, добавления и удаления строк.
Обработка данных может осуществляться независимо, то есть в разных экземплярах приложения, разными пользователями.
Рис. 1 Отображение данных в Microsoft Edge и редактирование записи в браузере Google Chrome
1.1. Принцип работы приложенияВывод строк в элемент управления «Таблица данных» осуществляется программой FBD (prSelectCommand), которая с использованием функционального блока SqlRequestWithResult, с определённой в проекте периодичностью, вызывает хранимую процедуру ([dbo].[SelectObjectsCommand]) на Microsoft SQL Server, возвращающую список строк.
В целях редактирования строк используется встроенная функциональная возможность элемента управления «Таблица данных», но результат редактирования будет доступен другим пользователям, использующим собственные экземпляры приложения, только после вызова программы ST (prUpdateCommand), запускаемую нажатием кнопки «Сохранить», в следующем цикле выполнения программы prSelectCommand. Программа prUpdateCommand проходит циклом записи, отображаемые в элементе управления «Таблицы данных», выполняя хранимую процедуру ([dbo].[UpdateObjectsCommand]) на Microsoft SQL Server.
За удаление записей отвечает программа ST (prDeleteCommand), запускаемая нажатием кнопки, которая вызывает хранимую процедуру ([dbo].[DeleteObjectsCommand]) на Microsoft SQL Server. Как и в случае с обновлением данных, результат удаления будет доступен другим пользователям, использующим собственные экземпляры приложения, только после очередного цикла выполнения программы prSelectCommand.
Для добавления данных, как и для других операций, создана отдельная программа (prInsertCommand), запускаемая нажатием кнопки, выполняющая хранимую процедуру ([dbo].[InsertObjectsCommand]). Ввод новых данных осуществляется во вспомогательном окне – окне детализации. Результат добавления будет доступен другим пользователям, использующим собственные экземпляры приложения, только после очередного цикла выполнения программы prSelectCommand.
2. Требования к системе для реализации примера в информационной системе
- Установленный экземпляр Microsoft SQL Server с разрешение выполнять сценарии SQL, создающих таблицы и хранимые процедуры
- Среда разработки MasterScada 4D
3. Формирование объектов в базе данных
3.1. Необходимо выполнить сценарий из файла (см. файл «MakeStoreProc.sql»). Данный сценарий создаст в базе данных следующие объекты:
- таблицу, содержащую некоторый набор данных, предназначенный для отображения в MasterScada 4D;
- набор процедур для вызова из программ MasterScada 4D, позволяющих осуществлять выборку, удаление, обновление и добавление данных в таблице.
Перед выполнением, в первой строке сценария SQL необходимо указать имя базы данных, где должны быть созданы объекты (см. рисунок)
В результате выполнения сценария будут созданы следующие объекты:
4.1. В среде разработки необходимо добавить АРМ в дерево Системы проекта.
4.2. На ветку АРМ «Протоколы» добавить протокол MSSQL
4.3. В свойствах протокола MSSQL задать параметры подключения к базе данных. В настоящем примере параметры подключения выглядят следующим образом:
сервер – имя экземпляра Microsoft SQL Server;
База – специально созданная для данного примера база данных mps_p1;
Порт – номер порта, по которому сервер будет отвечать на запросы, поступающие по сети (см. рисунок)
5.1. Выборку данных из таблицы в проекте будет осуществлять программа, типа MasterSCADA.Program.ProgramFBD с именем «prSelectCommand». Запрос данных будет осуществляться с помощью ФБ SqlRequestWithResult, который необходимо добавить в локальную библиотеку и соответствующим образом настроить.
5.1.1. Создаваемый нами, запрос будет возвращать набор данных, содержащий множество строк и определённое количество столбцов, определённого типа.
TYPE Структура_Объекты:
STRUCT
id_rec: UINT := 0;
ObjectName: STRING;
Descr: STRING;
END_STRUCT;
END_TYPE
В настоящем примере создана структура с именем «Структура_Объекты»
- Входной параметр «pCommand», типа STRING , которому присваивается значение в виде текста (T-SQL), содержащего вызов хранимой процедуры EXEC [dbo].[SelectObjectsCommand], передающий значение в параметр ФБ «Command»;
Примечание: в настоящем примере процедура выборки «SelectObjectsCommand» не имеет параметров, которые можно применить в качестве критериев отбора данных, так как фильтрация данных будет осуществляться в элементе управления «Таблица данных»
- Выходной параметр «Результат», типа одномерный массива структуры «Структуры_Объекты», принимающий значение из параметра ФБ «Result»;
- Выходной параметр «pError» , типа STRING , принимающий сообщения об ошибках из параметра ФБ «Error»;
6. Создание пользовательского интерфейса
6.1. В целях отображения данных создаётся пользовательский интерфейс.
6.1.1. В проект добавляется Окно с именем «ОкноСписок», назначаемое стартовым окном АРМ.
6.1.2. На окно добавляется элемент управления «Таблица данных», свойство «Источник данных» которого, связывается с параметром программы «prSelectCommand.Результат».
7.1. Обновление данных в таблице будет осуществлять программа, типа MasterSCADA.Program.ProgramST с именем «prUpdateCommand». Обновление данных будет осуществляться с помощью ФБ SqlRequest.
7.1.1. В локальную библиотеку помещается функциональный блок Библиотеки.Protocols.ФБ.SqlRequest, который затем модернизируется, добавлением параметров, соответствующих столбцам таблицы:
7.1.3. В программу добавляются параметры:
- «pCommand», типа STRING, начальное значение которого, содержит вызов хранимой процедуры с параметрами:
EXEC [dbo].[UpdateObjectCommand] @id_rec = {id_rec}, @ObjectName = {ObjectName}, @Descr = {Descr}
где: {id_rec}; {ObjectName}; {Descr} – именованные параметры ФБ.SqlRequest,
@id_rec; @ObjectName; @Descr – параметры хранимой процедуры, получающие значения из именованных параметров ФБ.SqlRequest.
7.1.5. В процессе выполнения программы осуществляется циклическое прохождение по элементам массива «Результат» и для каждого элемента вызывается ФБ. SqlRequest с заполнением параметров значениями элемента массива:
VAR
i: UINT := 0; //счётчик
L: UINT := 1; //количество записей в таблице данных
END_VAR
L:= UPPER_BOUND(ARR:=Результат , DIM:= 0);
FOR i :=0 TO L - 1 DO
i:= i +1;
SqlRequest_1(Command:= pCommand, Transaction:= pTransaction, id_rec:=Результат[i].id_rec , ObjectName:= Результат[i].ObjectName, Descr:= Результат[i].Descr, Error => pError);
END_FOR;
7.1.6. Вызов программы осуществляется кнопкой «Сохранить», для которой определено событие «Клик мыши» с вызовом программы
8.1. Для удаления определённой строки необходимо получить идентификатор удаляемой записи из колонки «Идентификатор» элемента управления «Таблица данных».
В целях получения идентификатора используется событие элемента управления «Таблица данных» - «Клик по ячейке», с помощью которого можно получить значение текущей строки, а затем значение ячейки строки, содержащей идентификатор, который передаётся программе, осуществляющей удаление записей.
Обсуждение
Войти или зарегистрироваться, чтобы принять участие в обсуждении