Упражнение 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, которые были добавлены в набор данных. |
