Упражнение 2.7: Полное заполнение набора данных
На этом занятии вы продолжите доработку кода, который был создан ранее на этом уроке для заполнения набора данных с помощью подключённых источников данных. Вы измените код заполнения набора для некоторых данных таблицы PurchaseOrder. А в завершении с помощью FILL-WHERE-STRING для источника данных временной таблицы ttpoline измените условие извлечения данных из таблицы POLine.
Занятие состоит из трёх заданий, на выполнение которых отводится примерно 30 минут.
Перед тем как приступить:
- убедитесь, что вы завершили все предыдущие упражнения;
- убедитесь, что сервер базы данных Sports2010 стартован.
В этом задании вы добавите код в процедуру access_dsPO.p для заполнения набора данных всеми записями из таблиц базы данных. После заполнения набора и подтверждения, что он содержит все необходимые записи, добавите код для отключения источника данных от него.
Шаг |
Действие |
1 | Напомним, источник данных для таблицы PurchaseOrder основан на запросе qPurchaseOrder, который описан во встраиваемом файле PO_DataSources.i. Добавьте в конец процедуры access-dsPO.p код для подготовки запроса, который будет извлекать все данные из таблицы PurchaseOrder.
Подсказка: вызовите метод QUERY-PREPARE для объекта запроса qPurchaseOrder, указав в качестве строки запроса «FOR EACH PurchaseOrder». Следующий код должен быть добавлен после операторов подключения источников данных: QUERY qPurchaseOrder:QUERY-PREPARE("FOR EACH PurchaseOrder"). |
2 | Добавьте следующий код в конец этой процедуры для заполнения набора данных из подключённых источников данных:
DATASET dsPO:FILL(). |
3 | Следующий оператор откроет файл журнала access_dsPO.log для выгрузки данных. Добавьте его в конец файла:
OUTPUT TO "C:\OpenEdge\WRK\ProDataSets\log\access_dsPO.log". |
4 | Добавьте вложенные блоки FOR EACH для перебора всех записей ttPurchaseOrder и связанных с ними записей ttPOLine с выводом на экран – эти данные будут записаны в файл журнала.
FOR EACH ttPurchaseOrder: DISPLAY ttPurchaseOrder.PONum ttPurchaseOrder.DateEntered ttPurchaseOrder.SupplierIDNum ttPurchaseOrder.ReceiveDate ttPurchaseOrder.POTotal /*поле есть только в базе Sports2010*/ WITH 1 COLUMN STREAM-IO. FOR EACH ttPOLine OF ttPurchaseOrder: DISPLAY ttPOLine.PONum ttPOLine.LineNum ttPOLine.ItemNum ttPOLine.Price ttPOLine.Qty ttPOLine.Discount ttPOLine.ExtendedPrice WITH WIDTH 150 STREAM-IO. END. END. |
5 | Добавьте оператор закрытия файла журнала.
OUTPUT CLOSE. |
6 | Отключите источники данных от временных таблиц в наборе данных.
BUFFER ttPurchaseOrder:DETACH-DATA-SOURCE(). BUFFER ttPOLine:DETACH-DATA-SOURCE(). |
7 | Добавьте оператор возврата из процедуры.
RETURN. |
8 | Сохраните файл и убедитесь в отсутствии ошибок компиляции. |
9 | Выполните процедуру:
а. Проверьте, что программа access_dsPO.p выбрана в OpenEdge Editor. б. Для открытия списка вариантов выполнения программы щёлкните по иконке: в. Выберите Run As -> Progress OpenEdge Application. |
10 | Проверьте содержимое файл журнала access_dsPO.log. Он должен содержать все записи PurchaseOrder и связанные с ними записи POLine, которые были добавлены в набор данных. |