к оглавлению   к 4GL - визуальному программированию

Доступ к данным

Мастеры и средства конструирования позволяют легко обращаться к данным из программ на Visual J++. Добавив на свою форму соответствующие WFC-элементы, Вы быстро настроите их, чтобы они считывали и отображали данные так, как Вам надо. Кроме того, можно просто запустить Data Form Wizard, и он автоматически сгенерирует форму, связанную с данными.

Visual J+ + предоставляет элементы управления, которые обращаются к данным через ADO (ActiveX Data Objects) — модель доступа к данным, используемую в WFC-приложениях. К основным ADO-объектам относятся Connection, Command и Recordset, позволяющие подключаться к базе данных и извлекать из нее наборы записей. В ADO предусмотрен также компонент DataSource, объединяющий функциональность объектов Connection, Command и Recordset.

Примечание На панели Toolbox в Forms Designer доступен лишь элемент управления DataSource — объектами Connection, Command и Recordset можно пользоваться только в самом коде. О программировании с применением ADO-объектов см. раздел «ADO Tutorial (VJ++)» в электронной документации Visual Studio (в части, относящейся к Microsoft ActiveX Data Objects).

ADO поддерживает простое связывание с данными через компонент DataBinder, который связывает поле, указанное с помощью Recordset или DataSource, со свойством WFC-элемента. Кроме того, в Visual J+ + имеются элементы управления, обеспечивающие комплексное связывание с данными, например DataGrid и DataNavigator, — они взаимодействуют с набором записей напрямую. Подробнее о связывании с данными см. главу 18 «Связывание с данными в WFC». Для организации доступа к данным Вы можете либо запустить Data Form Wizard, либо выполнить в Forms Designer следующие операции:

Подробнее об ADO см. раздел «Getting Started with ADO 2.0» в электронной документации Visual Studio (в части, относящейся к Microsoft ActiveX Data Objects). О предоставляемых Visual Studio средствах доступа к данным через СОМ см. раздел «Choosing the Right Data Access Technology» в электронной документации Visual Studio.

Работа с Data Form Wizard

Data Form Wizard позволяет автоматически генерировать форму, связанную с полями базы данных. Он извлекает данные через ADO и поддерживает базы данных Microsoft Access (MDB-файлы) по механизму ODBC.

Чтобы запустить Data Form Wizard:

  1. В окне Project Explorer щелкните правой кнопкой мыши нужный узел проекта или папок.
  2. Выберите из контекстного меню команду Add, а из подменю -команду Add Form.
  3. В диалоговом окне Add Item дважды щелкните значок Data Form Wizard.
  4. В поле Name введите имя формы.
  5. Щелкните кнопку Open.

Примечание Data Form Wizard запускается и в том случае, когда Вы создаете связанное с данными приложение, используя Application Wizard.

  1. На стадии Introduction Вы можете выбрать из раскрывающегося списка нужный Вам профиль. (Если требуемого профиля в списке нет, щелкните кнопку с многоточием, чтобы найти и открыть его.) Подробнее о профилях см. главу 5 «Знакомство с мастерами и средствами сборки».
  2. Щелкните кнопку Next, чтобы указать тип базы данных.

Стадия Database Type

На стадии Database Type работы мастера Data Form Wizard Вы задаете формат своей базы данных.

Чтобы задать формат базы данных:

  1. Для доступа к любому MDB-файлу Microsoft Access выберите Access, щелкните кнопку Next и укажите конкретный файл базы данных.
  2. Для доступа к базе данных через ODBC — например, к базе данных типа ISAM (dBase, FoxPro или Paradox) или удаленному источнику данных (SQL Server или Oracle) — выберите ODBC, щелкните кнопку Next и укажите информацию, необходимую для подключения к данным по механизму ODBC.

Примечание Хотя к базе данных Microsoft Access можно подключиться через драйвер Microsoft Access ODBC, выбор формата Access на стадии Database Type обеспечит большую эффективность.

Стадия Database

Если на стадии Database Type Вы выбрали формат Access, Data Form Wizard перейдет на стадию Database, что позволит задать конкретный MDB-файл.

Чтобы указать MDB-файл:

  1. В поле Database Name введите полное (вместе с путем) имя нужного MDB-файла или щелкните кнопку Browse и найдите его.
  2. Щелкните кнопку Next и сообщите мастеру параметры создаваемой формы.

Стадия Connect Information

Если на стадии Database Type Вы выбрали формат ODBC, Data Form Wizard перейдет на стадию Connection Information, что позволит указать информацию, необходимую для подключения к данным по механизму ODBC, в том числе имя источника данных (DSN), базу данных и драйвер.

В следующих процедурах описаны разные способы подключения к базе данных через ODBC.

Чтобы подключиться к базе данных, используя созданный Вами DSN:

  1. В списке DSN выберите имя источника данных ODBC. (Если Вам нужно создать такой источник, дважды щелкните значок ODBC в Windows Control Panel.)
  2. Если с этим источником данных сопоставлены идентификатор пользователя и пароль, введите соответствующую информацию в поля UID (идентификатор пользователя) и PWD (пароль).

Чтобы подключиться к базе данных, используя базовое DSN:

  1. В списке DSN выберите базовое имя источника данных, например FoxPro Files.
  2. В поле Database введите полное (вместе с путем) имя файла базы данных.

Чтобы подключиться к базе данных, используя определенный драйвер:

  1. В поле Database введите полное (вместе с путем) имя файла базы данных.
  2. В списке Driver выберите нужный драйвер, например Microsoft FoxPro Driver (*.dbf).

Чтобы подключиться к серверной базе данных:

  1. В поля UID и PWD введите соответственно идентификатор пользователя и пароль.
  2. В поле Database наберите имя файла базы данных.
  3. В списке Driver выберите нужный драйвер, например SQL Server или Oracle.
  4. В поле Server введите имя сервера.

Указав всю информацию, необходимую для подключения, щелкните кнопку Next и сообщите мастеру параметры создаваемой формы.

Стадия Form

На стадии Form мастер Data Form Wizard позволяет задать имя формы и определить ее разметку.

Чтобы указать параметры формы:

  1. В поле Form name введите или отредактируйте имя формы.
  2. В списке Form layout выберите один из следующих вариантов:
  3. В разделе Database Connection выберите один из переключателей:
  4. Щелкните кнопку Next и укажите источник записей для соответствующих элементов управления.

Стадия Record Source

На стадии Record Source Вы выбираете поля, связываемые с элементами управления на форме.

Примечание Если на стадии Form Вы выбрали разметку Master/ Detail Data Form Wizard предлагает стадии Master Record Source и Detail Record Source. В этом случае на стадии Master Record Source действуйте в соответствии со следующей процедурой, затем щглкните кнопку Next и повторите ту же процедуру на стадии Detail Record Source.

Чтобы задать связываемые поля:

  1. В списке Record source выберите таблицу с нужными Вам полями. (Определяя источник главных записей для формы с разметкой Master/Detail, выберите сначала таблицу, записи в которой однозначно идентифицируются общим полем. А в качестве источника зависимых записей укажите таблицу, связанную с главной.)
  2. В списке Available fields показываются имена полей в выбранной таблице. Эти поля будут связаны с Вашей формой в том порядке, в каком они перечислены в списке Selected fields. Для перемещения полей между этими списками используйте кнопки, описанные ниже.

Кнопка

Описание

>

Перемещает поле, выбранное в списке Available fields, в список Selected fields. Это поле будет связано с элементом управления на форме.

>>

Перемещает все поля из списка Available fields в список Selected fields. Они будут связаны с элементами управления на форме.

<

Перемещает поле, выбранное в списке Selected fields, в список Available fields. Это поле не будет связано с элементом управления на форме.

<<

Перемещает все поля из списка Selected fields в список Available fields. Никакие поля с элементами управления на форме не связываются.

 

Примечание Data Form Wizard не связывает поля с двоичными данными.

  1. Если Вы хотите изменить порядок связываемых полей, выделите в списке Selected fields нужный элемент и сместите его, щелкая кнопки со стрелками.
  2. Для соргировки данных, отображаемых на форме, выберите какое-нибудь поле в списке Column to sort by.
  3. Если Вы выбрали для формы разметку Single record или Grid (Datasheet), щелкните кнопку Next, чтобы добавить на форму дополнительные элементы управления.

    — или —

    Если Вы выбрали для формы разметку Master/Detail и закончили выбор источников главных и зависимых записей, щелкните кнопку Next, чтобы определить отношение «главная таблица — зависимая таблица».

Стадия Record Source Relation

Если на стадии Form Вы выбрали разметку Master/Detail, Data Form Wizard перейдет на стадию Record Source Relation, где Вы сможете определить отношение «один-ко-многим» между источниками главных и зависимых записей.

Чтобы определить отношение между главной и зависимой таблицей:

  1. В списке Master выберите реляционное поле. Оно должно однозначно идентифицировать каждую запись в главной таблице.
  2. В списке Detail выберите реляционное поле.
  3. Щелкните кнопку Next, чтобы добавить на форму дополнительные элементы управления.

Стадия Control Selection

Нa стадии Control Selection мастер Data Form Wizard позволяет выбрать дополнительные элементы управления, размещаемые на форме. Любой код, необходимый для этих элементов, генерируется автоматически.

Чтобы поместить на форму дополнительные элементы управления:

  1. В разделе Available controls выберите элементы управления, которые Вы хотите добавить на форму.

Элемент управления

Описание

Add button Позволяет добавлять новые записи в базу данных.
Delete button Позволяет удалять записи из базы данных.
Update button Позволяет обновить базу данных в соответствии с изменениями, произведенными на форме.
Refresh button Позволяет обновить форму в соответствии с последними изменениями в базе данных.
Close button Позволяет закрыть форму.
Data navigator Позволяет «пролистывать» записи.1, чтобы перейти на заключительную стадию.
  1. Щелкните кнопку Next

Стадия Summary

На стадии Summary Вы можете просмотреть сводку выбранных Вами параметров и сохранить их.

Чтобы просмотреть и сохранить выбранные параметры:

  1. Для сохранения параметров в существующем профиле выберите его в раскрывающемся списке, а для сохранения параметров в новом профиле щелкните кнопку с многоточием и укажите имя файла. (Подробнее о профилях см. главу 5 «Знакомство с мастерами и средствами сборки».)
  2. Для просмотра параметров щелкните кнопку View Report. Если Вы хотите сохранить отчет, щелкните кнопку Save в диалоговом окне View Report.
  3. Щелкните кнопку Finish, чтобы включить форму в проект.

Data Form Wizard — средство, ускоряющее разработку формы с элементами управления, связанными с полями базы данных. Если Вы хотите самостоятельно создать такую форму, начните со вставки на нее элемента управления DataBinder или DataGrid.

Выборка набора записей

Для доступа к данным Visual J++ предоставляет в Forms Designer элемент управления DataSource, который позволяет подключаться к базе данных и извлекать наборы записей.

Примечание Для программной выборки набора записей можно также использовать объекты Connection, Command и Recordset. Но Forms Designer поддерживает только DataSource. О программировании с применением ADO-компонентов см. раздел «ADO Tutorial (VJ++)» в электронной документации Visual Studio (в части, относящейся к Microsoft ActiveX Data Objects).

Чтобы извлечь данные с помощью элемента управления DataSource:

  1. В окне Project Explorer дважды щелкните имя своей формы — она откроется в Forms Designer.
  2. На панели Toolbox активизируйте вкладку WFC Controls. Щелкните сначала элемент DataSource, затем — форму, чтобы добавить на нее этот элемент управления.

Примечание Поскольку элемент DataSource позволяет лишь считывать, но не отображать данные, он невидим в период выполнения Вашей программы.

  1. Для подключения к базе данных установите свойство connection-String элемента управления DataSource:
  2. Для доступа к источнику данных ODBC:

— или —

Для прямого доступа к MDB-файлу Microsoft Access без ODBC:

  1. Щелкните кнопку" ОК, чтобы установить связь с базой данных.
  2. Для создания запроса запишите в свойство commandText элемента управления DataSource необходимую Вам SQL-строку. Например, чтобы извлечь все записи из таблицы Products, введите Select * from Products.
  3. Если Вы хотите, чтобы набор записей можно было обновлять, установите свойство lockType как Optimistic.

Теперь, когда Вы считали набор записей, свяжите его с элементом управления DataBinder или DataGrid.

Связывание данных с элементом управления DataBinder

DataBinder связывает поле из набора записей со свойством другого элемента управления. В результате этому свойству автоматически присваивается значение поля из текущей записи. Следующая процедура показывает, как связать поле с текстовым свойством элемента управления Edit.

Чтобы связать элемент управления DataBinder с набором записей:

  1. Добавьте на форму элемент управления DataSource для выборки данных. О том, как это делается, см. предыдущий раздел.
  2. Вставьте на форму элементы управления Edit и DataBinder.

Примечание Как и DataSource, DataBinder в период выполнения не виден, поскольку он лишь связывает с данными другие элементы.

  1. Щелкните элемент DataBinder на форме и установите его свойство dataSource:

Чтобы определить связи, применяя страницу свойств:

  1. Щелкните элемент DataBinder на форме, а в окне Properties — кнопку Property Pages панели инструментов.
  2. В списке Data Field на странице свойств выберите имя нужного поля данных.
  3. В списке Control выберите имя элемента Edit.
  4. В списке Property выберите текстовое свойство (в данном случае — text).
  5. Щелкните кнопку Add — текстовое свойство связывается с полем данных.
  6. Если Вы хотите определить другие связи, повторите всю процедуру. Закончив, щелкните кнопку ОК.

Чтобы определить связи через редактор связей:

  1. Щелкните элемент DataBinder на форме, а в окне Properties — свойство bindings и кнопку с многоточием.
  2. Добавьте связь в редакторе связей, щелкнув кнопку Add. (Это нужно делать для каждой добавляемой связи.)
  3. Щелкните кнопку ОК.
  4. В окне Properties раскройте свойство bindings. Связи перечисляются по индексу — он определяет порядок, в котором были добавлены связи. (Индекс первой связи равен 0.)
  5. Теперь определите связь, раскрыв требуемый индекс.
  6. Щелкните fieldName и выберите в списке имя нужного поля данных.
  7. Щелкните target и выберите в списке имя элемента Edit.
  8. Щелкните propertyName и выберите в списке текстовое свойство (в данном случае — text).

Определив все связи, добавьте на форму элемент управления DataNavigator для перехода по записям. Кроме того, Вы можете указать формат для связей с числовыми данными, датами или Булевыми значениями.

Более подробную информацию об элементе управления DataBinder и примеры его программирования см. в разделе «Компонент DataBinder» главы 18 «Связывание с данными в WFC».

Связывание данных с элементом управления DataGrid

DataGrid связывается с полями из набора записей и отображает содержащиеся в них данные в виде таблицы. Он автоматически получает данные, как только Вы записываете в его свойство dataSource имя элемента управления DataSource.

Данные, отображаемые в DataGrid, всегда синхронизируются с данными в наборе записей (и наоборот). Свойства cursorType и lockType набора записей определяют, будут ли данные в этом наборе динамически отражать состояние базы данных и можно ли его модифицировать.

Чтобы связать элемент управления DataGrid с набором записей:

  1. Добавьте на форму элемент DataSource, который считывает данные. О том, как это делается, см. раздел «Выборка набора записей» ранее в этой главе.
  2. Добавьте на форму элемент DataGrid.
  3. Установите свойство dataSource элемента DataGrid:

О программном управлении элементом DataGrid см. Microsoft Visual J++ 6.0 WFC Library Reference, Part 1 («DataGrid Control» в пакете com.ms.wfc.data.ui).

Обращение к свойствам колонки

Устанавливая свойства элемента DataGrid в окне Properties, Вы настраиваете его внешний вид и функциональность. Свой набор свойств есть и у каждой колонки сетки; Вы обращаетесь к нему через свойства самой сетки.

Чтобы получить доступ к свойствам колонки:

  1. В окне Properties раскройте свойство columns элемента DataGrid. Колонки перечисляются по индексу в сетке — он определяет порядок, в котором показываются колонки. (Индекс первой колонки равен 0.)
  2. Теперь, чтобы увидеть свойства колонки, раскройте нужный индекс. По умолчанию DataGrid содержит столько колонок, сколько полей в соответствующем наборе записей, причем в том же порядке. Но при желании можно добавить, удалить или переупорядочить колонки, а также задать определенный формат для колонок с датами и числовыми или Булевыми значениями.

Добавление, удаление и переупорядочение колонок

С этой целью в DataGrid предусмотрен редактор колонок. Чтобы добавить, удалить и переупорядочить колонки в сетке:

  1. Откройте редактор колонок, щелкнув сначала свойство columns элемента DataGrid в окне Properties, а затем кнопку с многоточием.
  2. Для добавления колонки щелкните кнопку Add.

Примечание Только что добавленная колонка ни с,чем не связана. Поэтому укажите в ее свойстве boundFieldName имя поля из набора записей. (О том, как получить доступ к свойствам колонки, см. предыдущий раздел.)

  1. Для удаления колонки щелкните кнопку Remove.

Примечание Если Вы хотите лишь временно скрыть, а не окончательно удалить колонку из сетки, установите ее свойство visible как false.

  1. Для переупорядочения колонок выберите колонку, которую Вы хотите переместить, и щелкайте кнопки Up или Down.
  2. Закончив все операции, щелкните кнопку ОК.

Форматирование данных

Связывая данные с DataBinder или DataGrid, Вы можете задать определенный формат отображения дат, а также числовых и Булевых значений. У каждой связи, поддерживаемой DataBinder, и у каждой колонки в DataGrid имеется свойство dataFormat, которое и позволяет определить формат.

Чтобы получить доступ к свойству dataFormat:

  1. Если Вы используете DataBinder, раскройте его свойство bindings в окне Properties.

    — или —

    Если Вы используете DataGrid, раскройте его свойство columns в окне Properties.

  2. Связи или колонки перечисляются по индексу — его значение определяет их порядок в элементе управления, к которому они относятся. (Индекс первой связи или колонки равен 0.)
  3. Раскройте индекс нужной связи или колонки и щелкните свойство dataFormat.

Чтобы отформатировать числовые значения:

  1. Установите свойство dataFormat как NumberDataFormat.
  2. Раскройте свойство dataFormat и задайте для свойства format строку, определяющую числовой формат. Информацию на эту тему см. в Microsoft Visual J+ + 6.0 WFC Library Reference, Part 1 («NumberDataFormat.setFormat» в пакете com.ms.wfc.data.ui).

Чтобы отформатировать значения дат (или времени):

  1. Установите свойство dataFormat как DateDataFormat.
  2. Раскройте свойство dataFormat, щелкните свойство format и выберите из списка одно из следующих значений.

Формат

Описание

Long

Даты форматируются в соответствии с параметрами Long Date в диалоговом окне Regional Settings Properties, открываемом из Windows Control Panel. (Длинный формат даты изначально предлагается в виде, например, Monday, March 9, 1998.)

Short

Формат по умолчанию. Даты форматируются в соответствии с параметрами Short Date в диалоговом окне Regional Settings Properties,

открываемом из Windows Control Panel. (Краткий формат даты изначально предлагается в виде, например, 3/9/98.)

Time

Время форматируется в соответствии с параметрами Long Time в диалоговом окне Regional Settings Properties, открываемом из Windows Control Panel. (Длинный формат времени изначально предлагается в виде, например, 2:45:05 P.M.)

Custom

Даты или время отображаются в нестандартном формате. Присвойте строку, определяющую этот формат, свойству customFormat. Информацию на эту тему см. в Microsoft Visual J+ + 6.0 WFC Library Reference, Part 1 («DateDataFormat.setCustomFormat» в пакете com.ms.wfc.data.ui).

Примечание Значение свойства customFormat используется, только когда свойство format установлено как Custom. Иначе значение свойства customFormat просто игнорируется.

Чтобы отформатировать Булевы значения:

  1. Установите свойство dataFormat как Boolean Data Format.
  2. Раскройте свойство dataFormat и установите следующие свойства:

Переход по записям

Элемент управления DataNavigator позволяет осуществлять смену текущей записи в наборе записей. Используйте этот элемент совместно с другим элементом, связанным с данными, — например, DataBinder. Последний связывает поле из набора записей со свойством другого элемента управления. Это свойство получает данные из текущей записи, каковой по умолчанию является первая запись в наборе. Используя DataNavigator, связанный с тем же набором записей, можно перейти к другой записи.

Чтобы переходить по записям в наборе с помощью элемента управления DataNavigator:

  1. Добавьте на форму элемент DataSource, который считывает данные. О том, как это делается, см. раздел «Выборка набора записей» ранее в этой главе.
  2. Свяжите с DataBinder и Edit данные из набора записей, сопоставленного с DataSource. О том, как это делается, см. раздел «Связывание данных с элементом управления DataBinder» ранее в этой главе.
  3. Добавьте на форму элемент DataNavigator.
  4. Укажите в его свойстве dataSource имя элемента DataSource.
  5. Для «пролистывания» данных используйте кнопки элемента Data-Navigator.

Кнопка

Направление перехода

<<

<

>

>>

К первой записи

К предыдущей записи

К следующей записи

К последней записи

О программном управлении элементом DataNavigator см. Microsoft Visual j++ 6.0 WFС Library Reference, Part 1 («DataNavigator Control» в пакете com.ms.wfc.data.ui).

к оглавлению   к 4GL - визуальному программированию

Знаете ли Вы, как разрешается парадокс Ольберса?
(Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды.
Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution