Книга: Обработка баз данных на Visual Basic®.NET
Бизнес-ситуация 10.1: подготовка XML-файлов для бизнес-партнеров
Разделы на этой странице:
- Листинг 10.8. Пример сохранения таблицы tblInventory в виде XML-файла
- Листинг 10.9. Код сохранения данных из таблиц tblEmployee и tblDepartment в XML-файле
- Листинг 10.10. XML-файл Employees. xml, полученный в результате сохранения данных из таблиц tblDepartment и tblEmployee
- Листинг 10.11. XML-файл Employees.xml с вложением дочерних элементов из таблицы...
Бизнес-ситуация 10.1: подготовка XML-файлов для бизнес-партнеров
Компания Jones Novelty обменивается информацией с помощью электронных средств передачи данных со многими своими поставщиками и партнерами. Развитие этой тенденции, вероятно, приведет к тому, что компании придется спустя какое-то время применить качественно новое решение, например систему Microsoft BizTalk Server. В настоящее время Брэд Джонс стремится удовлетворить текущие потребности и сохранить конкурентоспособность, применяя XML для передачи транзакций. Для этого будут использованы уже описанные возможности XML и ряд других, которые описываются далее. Следует отметить, что многие требования можно удовлетворить даже без использования "мощных и тяжеловесных" платформ, инструментов и технологий, например XSLT.
Сначала следует организовать отправку XML-файла с перечнем товаров на складах. Для этого должны быть посланы сведения из всех полей таблицы tblInventory, за исключением поля WholesalePrice. Хотя это можно организовать с помощью простого запроса, который включает все поля, кроме WholesalePrice, в данном примере используется способ на основе XML-свойств. Для создаваемого XML-файл существует еще одно требование: в него необходимо включить XSD-схему с описанием всех полей как элементов, за исключением поля ID, которое передается с помощью атрибута.
Для создания этого приложения выполните перечисленные ниже действия.
1. Запустите интегрированную среду разработки Visual Studio .NET и создайте новый проект Visual Basic Windows Application. Для этого в диалоговом окне New Project (Новый проект) выберите тип проекта Visual Basic Project в области Project Types (Типы проектов), а затем шаблон Windows Application (Приложение Windows) в области Templates (Шаблоны).
2. Назовите проект BusinessCaseIO.
3. Укажите путь к файлам проекта.
4. Увеличьте размер формы Form1.
5. В окне свойств Properties укажите значение frmPrepareXML для свойства (Name) и значение Prepare XML для свойства Text формы Form1.
6. В верхнем левом углу формы создайте кнопку, перетаскивая ее из панели элементов управления.
7. В окне свойств Properties укажите значение btnInventory для свойства (Name) и значение Create Inventory XML для свойства Text этой кнопки.
В верхней части файла введите следующий код:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Затем в определении класса формы frmPrepareXML введите приведенный ниже код.
Dim en As New SqlConnection _
("data source=localhost;initial catalog=Novelty;user>
Private Sub btnInventory_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnlnventory.Click
Dim dsInventory As New DataSet()
Dim daInventory As New SqlDataAdapter _
("select * from tblInventory ", en)
daInventory.Fill(dsInventory, "tblInventory")
' Сохранение поля ID как XML-атрибута, а не элемента
dsInventory.Tables("tblInventory").Columns("ID").ColumnMapping = _
MappingType.Attribute
' Сокрытие поля WholesalePrice в сохраненном XML-файле
dslnventory.Tables("tbllnventory").Columns _
("WholesalePrice").ColumnMapping = MappingType.Hidden
' Сохранение данных в XML-файле, включая встроенную схему.
dsInventory.WriteXml("..Inventory.xml", XmlWriteMode.WriteSchema)
End Sub
После вставки данных в объект DataSet для формирования XML-файла используются следующие два выражение. Первое выражение указывает на то, что поле ID следует сохранить как XML-атрибут:
dsInventory.Tables("tblInventory").Columns("ID").ColumnMapping = _
MappingType.Attribute
Второе выражение указывает на сокрытие поля WholesalePrice в сохраненном XML-файле:
dslnventory.Tables("tbllnventory").Columns _
("WholesalePrice").ColumnMapping = MappingType.Hidden
Наконец, во время сохранения данных используется второй параметр метода WriteXML, который указывает на необходимость включения XSD-схемы вместе с данными. Полученный в результате XML-файл показан в листинге 10.8.
Листинг 10.8. Пример сохранения таблицы tblInventory в виде XML-файла
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="tblInventory">
<xs:complexType>
<xs:sequence>
<xs:element name="ProductName" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
<xs:element name="RetailPrice" type="xs:decimal" minOccurs="0" msdata:Ordinal="3" />
<xs:element name="Description" type="xs:string" minOccurs="0" msdata:Ordinal="4" />
</xs:sequence>
<xs:attribute name="ID" type="xs:int" />
<xs:attribute name="WholesalePrice" type="xs:decimal" use="prohibited" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<tblInventory>
<ProductName>Rubber Chicken</ProductName>
<RetailPrice>2.99</RetailPrice>
<Description>The quintessential rubber chicken.</Description>
</tblInventory>
<tblInventory>
<ProductName>Joy Buzzer</ProductName>
<RetailPrice>9.99</RetailPrice>
<Description>They will get a real shock out of this.</Description>
</tblInventory>
<tblInventory>
<ProductName>Seltzer Bottle</ProductName>
<RetailPrice>15.24</RetailPrice>
<Description>Seltzer sold separately.</Description>
</tblInventory>
<tblInventory>
<ProductName>Ant Farm</ProductName>
<RetailPrice>14.99</RetailPrice>
<Description>Watch ants where they live and breed.</Description>
</tblInventory>
<tblInventory>
<ProductName>Wind-Up Robot</ProductName>
<RetailPrice>29.99</RetailPrice>
<Description>Giant robot: attack toybox!</Description>
</tblInventory>
<tblInventory>
<ProductName>Rubber Eyeballs</ProductName>
<RetailPrice>0.99</RetailPrice>
<Description>Peek-a-boo!</Description>
</tblInventory>
<tblInventory>
<ProductName>Doggy Mess</ProductName>
<RetailPrice>1.99</RetailPrice>
<Description>Yechhh!</Description>
</tblInventory>
<tblInventory>
<ProductName>Mini-Camera</ProductName>
<RetailPrice>9.99</RetailPrice>
<Description>For future spies!</Description>
</tblInventory>
<tblInventory>
<ProductName>Glow Worms</ProductName>
<RetailPrice>1.99</RetailPrice>
<Description>Makes them easy to find</Description>
</tblInventory>
<tblInventory>
<ProductName>Insect Pops</ProductName>
<RetailPrice>0.99</RetailPrice>
<Description>Special treats</Description>
</tblInventory>
<tblInventory>
<ProductName>Alien Alarm Clock</ProductName>
<RetailPrice>45.99</RetailPrice>
<Description>Do you know what time it is out there?</Description>
</tblInventory>
<tblInventory>
<ProductName>Cinnamon Toothpicks</ProductName>
<RetailPrice>1.99</RetailPrice>
<Description>Really wakes up your mouth</Description>
</tblInventory>
</NewDataSet>
Для составления ведомости на выдачу заработной платы сотрудникам компании нужно создать код сохранения информации о сотрудниках в формате XML для каждого отдела. Для этого разработчик базы данных должен включить в форму frmPrepareXML вторую кнопку btnEmployees и вставить в код класса формы frmPrepareXML код из листинга 10.9.
Листинг 10.9. Код сохранения данных из таблиц tblEmployee и tblDepartment в XML-файле
Private Sub btnEmployees_Click (ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnEmployees.Click
Dim dsEmployees As New DataSet()
Dim daEmployees As New SqlDataAdapter _
("select * from tblEmployee", en)
Dim daDepartments As New SqlDataAdapter _
("select * from tblDepartment", en)
daDepartments.Fill(dsEmployees,"tblDepartment")
daEmployees.Fill(dsEmployees, "tblEmployee")
' Определение отношения между таблицами.
dsEmployees.Relations.Add("DepartmentEmployees", _
dsEmployees.Tables("tblDepartment").Columns("ID"), _
dsEmployees.Tables("tblEmployee").Columns("DepartmentID"))
' Сохранение данных в XML-файле.
dsEmployees.WriteXml("..Employees.xml")
End Sub
В этом коде для сохранения данных из таблиц tblDepartment и tblEmployee в XML-файле используются предлагаемые по умолчанию параметры объекта DataSet. Полученный в результате XML-файл Employees.xml показан в листинге 10.10.
Листинг 10.10. XML-файл Employees. xml, полученный в результате сохранения данных из таблиц tblDepartment и tblEmployee
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<tblDepartment>
<ID>1</ID>
<DepartmentName>Administration</DepartmentName>
</tblDepartment>
<tblDepartment>
<ID>2</ID>
<DepartmentName>Engineering</DepartmentName>
</tblDepartment>
<tblDepartment>
<ID>3</ID>
<DepartmentName>Sales</DepartmentName>
</tblDepartment>
<tblDepartment>
<ID>4</ID>
<DepartmentName>Marketing</DepartmentName>
</tblDepartment>
<tblEmployee>
<ID>1</ID>
<FirstName>Carole</FirstName>
<LastName>Vermeren</LastName>
<DepartmentID>2</DepartmentID>
<Salary>222</Salary>
</tblEmployee>
<tblEmployee>
<ID>2</ID>
<FirstName>Cathy</FirstName>
<LastName>Johnson</LastName>
<DepartmentID>2</DepartmentID>
<Salary>13000</Salary>
</tblEmployee>
<tblEmployee>
<ID>3</ID>
<FirstName>Eric</FirstName>
<LastName>Haglund</LastName>
<DepartmentID>4</DepartmentID>
<Salary>12000</Salary>
</tblEmployee>
<tblEmployee>
<ID>4</ID>
<FirstName>Julie</FirstName>
<LastName>Ryan</LastName>
<DepartmentID>1</DepartmentID>
<Salary>4000</Salary>
</tblEmployee>
<tblEmployee>
<ID>5</ID>
<FirstName>Richard</FirstName>
<LastName>Halpin</LastName>
<DepartmentID>2</DepartmentID>
<Salary>10000</Salary>
</tblEmployee>
<tblEmployee>
<ID>6</ID>
<FirstName>Kathleen</FirstName>
<LastName>Johnson</LastName>
<DepartmentID>3</DepartmentID>
<Salary>18000</Salary>
</tblEmployee>
<tblEmployee>
<ID>7</ID>
<FirstName>Sorel</FirstName>
<LastName>Polito</LastName>
<DepartmentID>4</DepartmentID>
<Salary>28000</Salary>
</tblEmployee>
<tblEmployee>
<ID>8</ID>
<FirstName>Sorel</FirstName>
<LastName>Terman</LastName>
<DepartmentID>1</DepartmentID>
<Salary>8000</Salary>
</tblEmployee>
<tblEmployee>
<ID>9</ID>
<FirstName>Randy</FirstName>
<LastName>Hobaica</LastName>
<DepartmentID>2</DepartmentID>
<Salary>18000</Salary>
</tblEmployee>
<tblEmployee>
<ID>10</ID>
<FirstName>Matthew</FirstName>
<LastName>Haglund</LastName>
<DepartmentID>3</DepartmentID>
<Salary>30000</Salary>
</tblEmployee>
<tblEmployee>
<ID>11</ID>
<FirstName>Cathy</FirstName>
<LastName>Vermeren</LastName>
<DepartmentID>4</DepartmentID>
<Salary>0</Salary>
</tblEmployee>
<tblEmployee>
<ID>12</ID>
<FirstName>Brad</FirstName>
<LastName>Townsend</LastName>
<DepartmentID>2</DepartmentID>
<Salary>12000</Salary>
</tblEmployee>
<tblEmployee>
<ID>13</ID>
<FirstName>Jennifer</FirstName>
<LastName>Eves</LastName>
<DepartmentID>2</DepartmentID>
<Salary>26000</Salary>
</tblEmployee>
<tblEmployee>
<ID>14</ID>
<FirstName>Steve</FirstName>
<LastName>Marshall</LastName>
<DepartmentID>3</DepartmentID>
<Salary>42000</Salary>
</tblEmployee>
<tblEmployee>
<ID>15</ID>
<FirstName>Laura</FirstName>
<LastName>Davidson</LastName>
<DepartmentID>4</DepartmentID>
<Salary>60000</Salary>
</tblEmployee>
<tblEmployee>
<ID>16</ID>
<FirstName>Angela</FirstName>
<LastName>Stefanac</LastName>
<DepartmentID>2</DepartmentID>
<Salary>16000</Salary>
</tblEmployee>
<tblEmployee>
<ID>17</ID>
<FirstName>Marjorie</FirstName>
<LastName>Bassett</LastName>
<DepartmentID>2</DepartmentID>
<Salary>34000</Salary>
</tblEmployee>
<tblEmployee>
<ID>18</ID>
<FirstName>Joe</FirstName>
<LastName>Chideya</LastName>
<DepartmentID>3</DepartmentID>
<Salary>54000</Salary>
</tblEmployee>
<tblEmployee>
<ID>19</ID>
<FirstName>Katie</FirstName>
<LastName>Chideya</LastName>
<DepartmentID>4</DepartmentID>
<Salary>76000</Salary>
</tblEmployee>
<tblEmployee>
<ID>20</ID>
<FirstName>Terri</FirstName>
<LastName>Allen</LastName>
<DepartmentID>1</DepartmentID>
<Salary>20000</Salary>
</tblEmployee>
<tblEmployee>
<ID>21</ID>
<FirstName>Mike</FirstName>
<LastName>Doberstein</LastName>
<DepartmentID>2</DepartmentID>
<Salary>42000</Salary>
</tblEmployee>
<tblEmployee>
<ID>22</ID>
<FirstName>Terri</FirstName>
<LastName>Woodruff</LastName>
<DepartmentID>3</DepartmentID>
<Salary>66000</Salary>
</tblEmployee>
<tblEmployee>
<ID>23</ID>
<FirstName>Cathy</FirstName>
<LastName>Rosenthal</LastName>
<DepartmentID>4</DepartmentID>
<Salary>0</Salary>
</tblEmployee>
<tblEmployee>
<ID>24</ID>
<FirstName>Margaret</FirstName>
<LastName>Eves</LastName>
<DepartmentID>1</DepartmentID>
<Salary>24000</Salary>
</tblEmployee>
<tblEmployee>
<ID>25</ID>
<FirstName>Mikki</FirstName>
<LastName>Lemay</LastName>
<DepartmentID>2</DepartmentID>
<Salary>50000</Salary>
</tblEmployee>
<tblEmployee>
<ID>26</ID>
<FirstName>Randy</FirstName>
<LastName>Nelson</LastName>
<DepartmentID>3</DepartmentID>
<Salary>78000</Salary>
</tblEmployee>
<tblEmployee>
<ID>27</ID>
<FirstName>Kathleen</FirstName>
<LastName>Husbands</LastName>
<DepartmentID>4</DepartmentID>
<Salary>108000</Salary>
</tblEmployee>
<tblEmployee>
<ID>28</ID>
<FirstName>Kathleen</FirstName>
<LastName>Eberman</LastName>
<DepartmentID>1</DepartmentID>
<Salary>28000</Salary>
</tblEmployee>
<tblEmployee>
<ID>29</ID>
<FirstName>Richard</FirstName>
<LastName>Rosenthal</LastName>
<DepartmentID>2</DepartmentID>
<Salary>58000</Salary>
</tblEmployee>
<tblEmployee>
<ID>30</ID>
<FirstName>Mike</FirstName>
<LastName>Woodruff</LastName>
<DepartmentID>3</DepartmentID>
<Salary>90000</Salary>
</tblEmployee>
</NewDataSet>
К сожалению, данный XML-файл содержит список сотрудников, который не сгруппирован по отделам. Несмотря на созданное отношение между родительской таблицей tblDepartment и дочерней таблицей tblEmployee полученный XML-файл содержит данные отдельно для каждой таблицы. Для вложения дочерних элементов из таблицы tblEmployee в родительские элементы из таблицы tblDepartment нужно указать значение True для свойства Nested объекта-отношения Relation.
dsEmployees.Relations("DepartmentEmployees").Nested = True
После вставки этой строки кода перед строкой сохранения данных
dsInventory.WriteXml("..Inventory.xml", XmlWriteMode.WriteSchema)
будет получен XML-файл Employees.xml, показанный в листинге 10.11.
Листинг 10.11. XML-файл Employees.xml с вложением дочерних элементов из таблицы tblEmployee в родительские элементы из таблицы tblDepartment
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<tblDepartment>
<ID>1</ID>
<DepartmentName>Administration</DepartmentName>
<tblEmployee>
<ID>2035</ID>
<FirstName>Julie</FirstName>
<LastName>Ryan</LastName>
<DepartmentID>1</DepartmentID>
<Salary>4000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2039</ID>
<FirstName>Sorel</FirstName>
<LastName>Terman</LastName>
<DepartmentID>1</DepartmentID>
<Salary>8000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2051</ID>
<FirstName>Terri</FirstName>
<LastName>Allen</LastName>
<DepartmentID>1</DepartmentID>
<Salary>20000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2055</ID>
<FirstName>Margaret</FirstName>
<LastName>Eves</LastName>
<DepartmentID>1</DepartmentID>
<Salary>24000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2059</ID>
<FirstName>Kathleen</FirstName>
<LastName>Eberman</LastName>
<DepartmentID>1</DepartmentID>
<Salary>28000</Salary>
</tblEmployee>
</tblDepartment>
<tblDepartment>
<ID>2</ID>
<DepartmentName>Engineering</DepartmentName>
<tblEmployee>
<ID>2032</ID>
<FirstName>Carole</FirstName>
<LastName>Vermeren</LastName>
<DepartmentID>2</DepartmentID>
<Salary>222</Salary>
</tblEmployee>
<tblEmployee>
<ID>2033</ID>
<FirstName>Cathy</FirstName>
<LastName>Johnson</LastName>
<DepartmentID>2</DepartmentID>
<Salary>13000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2036</ID>
<FirstName>Richard</FirstName>
<LastName>Halpin</LastName>
<DepartmentID>2</DepartmentID>
<Salary>10000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2040</ID>
<FirstName>Randy</FirstName>
<LastName>Hobaica</LastName>
<DepartmentID>2</DepartmentID>
<Salary>18000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2043</ID>
<FirstName>Brad</FirstName>
<LastName>Townsend</LastName>
<DepartmentID>2</DepartmentID>
<Salary>12000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2044</ID>
<FirstName>Jennifer</FirstName>
<LastName>Eves</LastName>
<DepartmentID>2</DepartmentID>
<Salary>26000</Salary>
</tblEmployee>
<tblEmployee>
<ID>204V</ID>
<FirstName>Angela</FirstName>
<LastName>Stefanac</LastName>
<DepartmentID>2</DepartmentID>
<Salary>16000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2048</ID>
<FirstName>Marjorie</FirstName>
<LastName>Bassett</LastName>
<DepartmentID>2</DepartmentID>
<Salary>34000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2052</ID>
<FirstName>Mike</FirstName>
<LastName>Doberstein</LastName>
<DepartmentID>2</DepartmentID>
<Salary>42000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2056</ID>
<FirstName>Mikki</FirstName>
<LastName>Lemay</LastName>
<DepartmentID>2</DepartmentID>
<Salary>50000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2060</ID>
<FirstName>Richard</FirstName>
<LastName>Rosenthal</LastName>
<DepartmentID>2</DepartmentID>
<Salary>58000</Salary>
</tblEmployee>
</tblDepartment>
<tblDepartment>
<ID>3</ID>
<DepartmentName>Sales</DepartmentName>
<tblEmployee>
<ID>2037</ID>
<FirstName>Kathleen</FirstName>
<LastName>Johnson</LastName>
<DepartmentID>3</DepartmentID>
<Salary>18000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2041</ID>
<FirstName>Matthew</FirstName>
<LastName>Haglund</LastName>
<DepartmentID>3</DepartmentID>
<Salary>30000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2045</ID>
<FirstName>Steve</FirstName>
<LastName>Marshall</LastName>
<DepartmentID>3</DepartmentID>
<Salary>42000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2049</ID>
<FirstName>Joe</FirstName>
<LastName>Chideya</LastName>
<DepartmentID>3</DepartmentID>
<Salary>54000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2053</ID>
<FirstName>Terri</FirstName>
<LastName>Woodruff</LastName>
<DepartmentID>3</DepartmentID>
<Salary>66000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2057</ID>
<FirstName>Randy</FirstName>
<LastName>Nelson</LastName>
<DepartmentID>3</DepartmentID>
<Salary>78000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2061</ID>
<FirstName>Mike</FirstName>
<LastName>Woodruff</LastName>
<DepartmentID>3</DepartmentID>
<Salary>90000</Salary>
</tblEmployee>
</tblDepartment>
<tblDepartment>
<ID>4</ID>
<DepartmentName>Marketing</DepartmentName>
<tblEmployee>
<ID>2034</ID>
<FirstName>Eric</FirstName>
<LastName >Haglund</LastName>
<DepartmentID>4</DepartmentID>
<Salary>12000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2038</ID>
<FirstName>Sorel</FirstName>
<LastName>Polito</LastName>
<DepartmentID>4</DepartmentID>
<Salary>28000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2042</ID>
<FirstName>Cathy</FirstName>
<LastName>Vermeren</LastName>
<DepartmentID>4</DepartmentID>
<Salary>0</Salary>
</tblEmployee>
<tblEmployee>
<ID>2046</ID>
<FirstName>Laura</FirstName>
<LastName>Davidson</LastName>
<DepartmentID>4</DepartmentID>
<Salary>60000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2050</ID>
<FirstName>Katie</FirstName>
<LastName>Chideya</LastName>
<DepartmentID>4</DepartmentID>
<Salary>76000</Salary>
</tblEmployee>
<tblEmployee>
<ID>2054</ID>
<FirstName>Cathy</FirstName>
<LastName>Rosenthal</LastName>
<DepartmentID>4</DepartmentID>
<Salary>5555</Salary>
</tblEmployee>
<tblEmployee>
<ID>2058</ID>
<FirstName>Kathleen</FirstName>
<LastName>Husbands</LastName>
<DepartmentID>4</DepartmentID>
<Salary>108000</Salary>
</tblEmployee>
</tblDepartment>
</NewDataSet>
- Основные принципы чтения и записи XML-данных
- Когда нужен постскриптум в бизнес-тексте?
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Преобразование XML в реляционную базу данных
- Глава 4 Методы и техники бизнес-тренинга
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- Создание файлов с блокировкой
- 6.9. Подготовка данных для расчета прибыльности
- Рекомендуемое расширение для файлов баз данных - *.ib
- 6.3. Содержание оценки бизнес-тренинга