Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Программирование в VisualFoxPro 7.0

Удаленные представления данных

Информация, используемая в разрабатываемом приложении, может находиться не только в таблицах Visual FoxPro, но и в электронных таблицах Microsoft Excel, в текстовом виде, в файлах базы данных Paradox или же на сервере базы данных типа SQL Server. Все такие данные называются удаленными данными, несмотря на то, что они могут находиться даже на одном компьютере с Visual FoxPro.

Для доступа к удаленным данным используется стандартный протокол доступа к базам данных (ODBC). Все базы данных, а также электронные таблицы имеют драйверы ODBC, с помощью которых вы можете соединяться с ними и получать доступ к их содержимому.

  Определение источника данных ODBC

После установки драйверов ODBC вы можете определить для него один или несколько источников данных ODBC.

Для добавления источника данных ODBC выполните следующие действия:

  1. Выберите на Панели управления Windows пиктограмму Источники данных (ODBC).
  2. Далее в диалоговом окне ODBC Data Source Administrator (Администрирование источника данных ODBC) (рис. 22.1) нажмите кнопку Add (Добавить).
  3. На экране появится диалоговое окно Create New Data Source (Создать новый источник данных) (рис. 22.2). Выберите нужный драйвер из представленного в диалоговом окне списка и нажмите кнопку Готово.
  4. В следующем диалоговом окне ODBC Setup (Установка ODBC) (рис. 22.3) установите необходимые значения параметров соединения и нажмите кнопку ОК.

Замечание

Вид диалогового окна настройки параметров соединения зависит от типа источника данных. Тем не менее, для всех источников данных необходимо в поле ввода Name (Имя) указать имя источника данных, которое в дальнейшем используется для ссылки на источник данных. Поле ввода Description (Описание) содержит краткое описание источника данных. Если при определении значений остальных полей возникнут проблемы, обратитесь к администратору базы данных, к которой вы собираетесь определить доступ.

gl22-1.jpg

Рис. 22.1. Диалоговое окно ODBC Data Source Administrator

gl22-2.jpg

Рис. 22.2. Диалоговое окно Create New Data Source

gl22-3.jpg

Рис. 22.3. Диалоговое окно определения параметров соединения

  Именованное соединение

Удобным средством для работы с удаленными данными является именованное соединение, которое хранится в базе данных и на которое можно ссылаться по имени при создании удаленного представления.

gl22-4.jpg

Рис. 22.4. Раздел Connections списка Database

Вы также можете устанавливать свойства именованного соединения для оптимизации связи между Visual FoxPro и удаленным источником данных. При активизации удаленного представления его соединение становится каналом, ведущим к удаленному источнику данных.

Для создания именованного соединения выполните любое из следующих действий:

  Конструктор соединений

Окно конструктора соединений (рис. 22.5) позволяет вам задать параметры именованного соединения в интерактивном режиме.

gl22-5.jpg

Рис. 22.5. Окно конструктора соединений

Область Specify data source (Определить источник данных) содержит переключатели Data source, userid, password (Источник данных, идентификатор пользователя, пароль) и Connection string (Строка соединения), определяющие способ соединения с источником данных. При выборе первой опции в области отображаются поля ввода (табл. 22.1).

Таблица 22.1. Назначение полей ввода области Specify data source

Поле Назначение
Data source

(Источник данных)

Имя источника данных из списка установленных источников данных ODBC
Userid

(Идентификатор пользователя)

Идентификатор пользователя для выбранного источника данных
Password (Пароль) Пароль пользователя
Database

(База данных)

Имя базы данных

При выборе переключателя Connection string (Строка соединения) вместо приведенных выше полей ввода отображается только одно поле ввода Connect string (Строка соединения), в котором можно ввести строку соединения с источником данных.

Кнопка Verify Connection (Проверить соединение) предназначена для проверки соединения с указанным источником данных. Кнопка New Data Source (Новый источник данных) позволяет определить новый источник данных непосредственно из конструктора соединений.

Область Display ODBC login prompts (Отображение окна доступа к ODBC источнику) содержит переключатели, определяющие, когда будет открываться диалоговое окно Data Source Login (Доступ к источнику данных) (табл. 22.2).

Таблица 22.2. Переключатели области Display ODBC login prompts

Наименование Назначение
When login info is not specified (Когда параметры доступа не определены) Диалоговое окно Data Source Login (Доступ к источнику данных) открывается только в том случае, если заданный идентификатор пользователя и пароль не найдены в определении именованного соединения
Always (Всегда) Указывает, что Visual FoxPro всегда открывает для пользователя диалоговое окно Data Source Login (Доступ к источнику данных), в котором можно выбрать другой регистрационный идентификатор и другой пароль из числа хранящихся в именованном соединении
Never (Никогда) Указывает, что Visual FoxPro никогда не открывает диалоговое окно входа в базу данных

В области Data processing (Обработка данных) определяются свойства, связанные с обработкой данных соединения (табл. 22.3).

Таблица 22.3. Опции области Data processing

Наименование Назначение
Asynchronous execution

(Асинхронное выполнение)

Задает признак асинхронного соединения
Display warnings (Показывать предупреждения) Задает признак отображения неперехватываемых предупреждений
Batch processing (Пакетная обработка данных) Задает пакетный режим обработки данных
Automatic transactions

(Автоматические транзакции)

Задает автоматическую обработку транзакций
Packet size (Размер пакета данных) Задает размер пакета данных, передаваемого от сервера базы данных

Замечание

Для определения значений параметров области Data processing (Обработка данных) вы можете использовать функцию  DBSETPROP ().

Область Timeout intervals (Интервалы времени) содержит опции, устанавливающие временные параметры обработки данных (табл. 22.4).

Таблица 22.4. Опции области Timeout intervals

Наименование Назначение
Connection (sec)

(Соединение)

Задает интервал тайм-аута соединения в секундах
Query (sec) (Запрос) Задает интервал тайм-аута запроса в секундах
Idle (min) (Холостой режим) Задает интервал тайм-аута холостого режима в минутах. Активные соединения по истечении этого интервала времени деактивизируются
Wait time (ms) (Время ожидания) Задает промежуток времени в миллисекундах, по истечении которого Visual FoxPro может определить, завершено ли выполнение оператора SQL

Замечание

Для определения значений параметров области Data processing (Обработка данных) вы можете использовать функцию DBSETPROP ().

По умолчанию для именованного соединения задается имя Connect 1. При закрытии окна конструктора соединений открывается диалоговое окно Save (Сохранить) (рис. 22.6), предлагающее ввести подходящее имя соединения.

gl22-6.jpg

Рис. 22.6. Ввод имени соединения

Все созданные вами именованные соединения отображаются в разделе Connections (Соединения) списка Database (База данных). Например, на рис. 22.7 приведены именованные соединения с источниками данных Access, Microsoft SQL Server и Microsoft Excel.

gl22-7.jpg

Рис. 22.7. Именованные соединения

Для изменения параметров именованного соединения выберите требуемое соединение и нажмите кнопку Modify (Модифицировать). Откроется окно конструктора соединений, в котором вы можете изменить любые параметры соединения.

  Настройка параметров удаленных представлений и соединений в диалоговом окне Options

Прежде чем запускать мастера удаленных представлений, вы можете установить опции для принимаемых по умолчанию параметров удаленных представлений и соединений, используя вкладку Remote Data (Удаленные данные) диалогового окна Options (Параметры) (рис. 22.8).

gl22-8.jpg

Рис. 22.8. Настройка параметров удаленных представлений и соединений

Область Remote view defaults (Удаленное представление по умолчанию) содержит параметры (табл. 22.5), используемые по умолчанию при создании удаленных представлений.

Таблица 22.5. Параметры удаленного представления

Параметр Описание
Share connection (Совместное подключение) Указывает, что в новых представлениях будет использоваться текущее совместно используемое соединение
Fetch memo (Выборка Memo-поля) Указывает, что Memo-поле не будет выбираться из источника данных до тех пор, пока оно не будет активизировано в представлении данных
SQL updates: Criteria (Критерии SQL-обновления) Задает критерий обновления данных
SQL updates: Method (Методы SQL-обновления) Задает метод обновления данных
Records to fetch at a time (Выборка записей за промежуток времени) Задает количество записей, возвращаемых за один раз из удаленного источника данных
Maximum records to fetch (Максимальная выборка записей за промежуток времени) Ограничивает общее число записей, возвращаемых в представлении
Use memo for fields >= (Использовать перевод символьных данных в Мемо-поля) Задает условие преобразования длинных символьных полей в Memo-поля в выводе представления
Records to batch update (Количество обновляемых одновременно записей) Задает число записей, подлежащих обновлению в одной команде

Область Connection defaults содержит параметры, используемые при создании именованных соединений (табл. 22.6).

Таблица 22.6. Параметры именованного соединения

Параметр Описание
Asynchronous execution (Асинхронное выполнение) Задает признак асинхронной обработки
Display warnings (Показывать предупреждения) Задает режим выдачи предупреждающих сообщений
Batch processing (Пакетная обработка) Обеспечивает пакетную обработку. Если установить этот переключатель, Visual FoxPro не будет возвращать результаты вызова SQLEXEC ( ) до тех пор, пока не поступят все отдельные результирующие наборы
Automatic transactions (Автоматические транзакции)

Show login (Показывать окно приглашения)

Определяет, каким образом соединение управляет ходом транзакций в удаленной таблице отображает диалоговое окно ввода регистрационного приглашения только в том случае, если в определении соединения или представления не задана информация регистрации
Connection timeout (sec) (Ожидание соединения) Задает интервал времени (в секундах), в течение которого допускается ожидание установки соединения с удаленным сервером. Если в течение этого времени соединение не устанавливается, Visual FoxPro генерирует ошибку
Idle timeout (min) (Холостой режим) Задает интервал времени (в минутах), в течение которого допускается простаивание, прежде чем соединение будет прекращено. Если в течение этого времени не был сделан запрос к серверу, Visual FoxPro разрывает соединение. Однако, если сделать запрос к серверу по истечении интервала тайм-аута для соединения, Visual FoxPro автоматически попытается его восстановить
Query timeout (sec) (Ожидание запроса) Задает интервал времени (в секундах), в течение которого допускается ожидание от сервера ответа на запрос. Если сервер тратит на обра. ботку больше заданного числа секунд, Visual FoxPro генерирует ошибку
Wait time (ms) (Время ожидания завершения запроса) Задает интервал времени (в миллисекундах) между проверками на завершение запроса

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

После того как был определен источник данных или именованное соединение, можно создать удаленное представление. Для этого выполните одно из следующих действий:

Рассмотрим каждый из этих вариантов создания удаленного представления данных на примерах использования электронной таблицы Microsoft Excel и базы данных Microsoft SQL Server.

  Использование мастера удаленных представлений

Мастер удаленных представлений создает представления с использованием удаленных данных (ODBC). Предлагая ответить на ряд простых вопросов, мастер помогает вам выполнить процедуру в несколько этапов; при этом вы должны задать базы данных, таблицы и поля, которые хотите использовать в своем представлении. Перед этим вы должны создать базу данных, в которой будет сохранено представление, а также определить источник данных или соединение.

Для запуска мастера удаленных представлений в меню Tools (Сервис) выберите команду Wizards (Мастера), а затем опцию Query (Запрос), потом в открывшемся диалоговом окне Wizard Selection (Выбор мастера) выберите значение Remote View Wizard (Мастер удаленного представления) (рис. 22.9).

gl22-9.jpg

Рис. 22.9. Выбор мастера удаленных представлений

На первом шаге вы выбираете источник данных из списка имеющихся источников данных или созданных вами именованных соединений (рис. 22.10).

Если удаленный источник данных требует идентификации пользователя, то на экране открывается диалоговое окно ввода имени пользователя и пароля (рис. 22.11).

Введите имя пользователя и пароль входа в базу данных. После этого откроется диалоговое окно выбора полей (рис. 22.12), помещаемых в создаваемое представление. Вы можете выбирать поля из нескольких таблиц или представлений базы данных, с которой вы соединились. Вначале выберите одну таблицу и перенесите поля выбранной таблицы в список Selected Fields (Выбранные поля), а затем выберите поля из другой таблицы или другого представления.

gl22-10.jpg

Рис. 22.10. Выбор источника данных

gl22-11.jpg

Рис. 22.11. Ввод имени пользователя и пароля

gl22-12.jpg

Рис. 22.12. Выбор полей удаленного представления

Если вы выберете более одной таблицы, вам необходимо определить отношения между таблицами (рис. 22.13). Для этого выберите нужные поля из приведенных списков и нажмите кнопку Add (Добавить).

gl22-13.jpg

Рис. 22.13. Определение отношения между таблицами

gl22-14.jpg

Рис. 22.14. Отображение списка удаленных представлений

На следующих двух шагах создания удаленного представления укажите порядок сортировки информации и фильтр для ограничения выбираемых данных. На последнем шаге укажите режим завершения процесса создания и введите имя создаваемого удаленного представления. Вы можете просто сохранить его, открыть для просмотра или открыть в конструкторе представлений. После создания удаленного представления его имя появится в разделе Remote Views (Удаленные представления) (рис. 22.14). После того как удаленное представление сохранено, его можно открыть и модифицировать в конструкторе представлений, как любое другое представление.

Для просмотра данных созданного удаленного представления выберите его из раздела Remote Views (Удаленные представления) и нажмите кнопку Browse (Обзор). На рис. 22.15 вы видите данные из созданного удаленного представления.

gl22-15.jpg

Рис. 22.15. Просмотр данных удаленного представления

Замечание

Если удаленный источник данных требует идентификации пользователя, то при открытии удаленного представления данных на экране открывается диалоговое окно ввода имени пользователя и пароля.

  Использование конструктора представлений

Для создания удаленного представления с помощью конструктора представлений в диспетчере проектов из списка Databases (Базы данных) выберите раздел Remote Views (Удаленные представления), а затем нажмите кнопку New (Новый). На экране появится диалоговое окно выбора источника данных Select Connection or Data Source (Выбрать соединение или источник данных) (рис. 22.16).

gl22-16.jpg

Рис. 22.16. Диалоговое окно Select Connection or Data Source

Выберите источник данных или соединение, введите идентификатор и пароль доступа к базе данных. Далее, как и при создании локального представления данных, выберите используемые в представлении данных таблицы и поля выбранных таблиц (рис. 22.17).

При создании удаленных представлений данных необходимо обратить внимание на вкладку Update Criteria (Критерии обновления), в которой задаются условия обновления представлений.

На этой вкладке из списка Table (Таблица) выбирается таблица, для которой определяются установки вкладки Update Criteria (Критерии обновления). Флажок Send SQL updates (Отправить SQL-обновление) указывает, должны ли данные в действительности обновляться на диске.

Область SQL WHERE clause includes (Включение в запрос операторов предложения WHERE) содержит опции, позволяющие задать способ формирования предложения WHERE (табл. 22.7).

gl22-17.jpg

Рис. 22.17. Выбор полей представления данных

Таблица 22.7. Опции области SQL WHERE clause includes

Опция Назначение
Key fields only (Только ключевые поля) Указывает, что предложение WHERE, используемое для обновления удаленных таблиц, включает только поля, входящие в список Field name (Имя поля)
Key and updateable fields (Ключевые и доступные для изменения поля) Указывает, что предложение WHERE, используемое для обновления удаленных таблиц, включает поля, входящие в список Field name (Имя поля), а также все обновляемые поля
Key and modified fields (Ключевые и модифицированные поля) Указывает, что предложение WHERE, используемое для обновления удаленных таблиц, включает поля, входящие в список Field name (Имя поля), и все остальные изменившиеся поля
Key and timestamp (Ключевые поля и отметки времени) Указывает, что предложение WHERE, используемое для обновления удаленных таблиц, включает первичные поля, входящие в список Field name (Имя поля), а также сравнение по отметкам времени

В области Update using (Строка обновления) задается способ обновления полей на сервере базы данных (табл. 22.8).

Таблица 22.8. Опции области Update using

Опция Назначение
SQL DELETE then INSERT Указывает, что сначала исходная запись таблицы базы данных будет удалена, а затем будет добавлена новая запись
SQL UPDATE Указывает, что запись таблицы базы данных будет модифицироваться

  Использование команды CREATE SQL VIEW

Для создания удаленных представлений данных вы можете использовать команду CREATE SQL VIEW, синтаксис которой приведен ниже:

CREATE SQL VIEW [имяПредставления] [REMOTE]

[CONNECTION имяСоединения

|CONNECTION имяИсточникаДанных]

Для создания удаленного представления данных необходимо указать признак удаленного представления с помощью ключевого слова REMOTE. Имя удаленного соединения или источника данных задается с помощью параметра CONNECTION.

Вы также можете задать определение представления с помощью SQL выражения, которым может быть любой допустимый оператор SQL SELECT, который не следует заключать в кавычки.

Например, чтобы создать удаленное представление данных для таблицы Goods, расположенной в базе данных Microsoft SQL Server и для которой определено соединение SQLServer, вы можете использовать следующие команды:

OPEN DATABASE SALES

CREATE SQL VIEW SQLServerGoods

CONNECTION SQLServer

AS SELECT * FROM GOODS

  Особенности использования удаленных представлений данных для электронных таблиц Microsoft Excel

При использовании ODBC-драйвера Microsoft Excel для создания удаленного представления данных создается таблица Visual FoxPro или курсор. Эта таблица содержит выбранные данные из электронной таблицы Microsoft Excel. Однако, если ячейка таблицы содержит текст, в таблице Visual FoxPro он отображается в виде Memo-поля.

Это связано с тем, что ODBC-драйвер передает текстовые данные в виде строки длиной 255 символов. Так как Visual FoxPro не может отображать в текстовом поле более 254 символов, любые текстовые данные помещаются в Memo-поле. Приемлемым решением этой проблемы является создание новых текстовых полей и копирование в них информации из Memo-полей командой, аналогичной следующей:

REPLACE ALL sqlchar WITH TRIM(sqlntemo)

Замечание

При обновлении данных в многоуровневом представлении изменения отражаются в том представлении, на котором основано представление верхнего уровня. Если нужно обновить базовые таблицы многоуровневого представления, то необходимо применить команду TABLEUPDATE для каждого представления многоуровневой структуры.

Замечание

Visual FoxPro автоматически выполняет команду TABLEUPDATE при закрытии представления. При этом представления верхнего уровня закрываются первыми, поэтому вам придется обновлять представления с каждого верхнего уровня на каждый последующий нижний уровень. После закрытия последнего (самого нижнего уровня) представления базовые таблицы для данных представлений будут содержать полный список всех выполненных обновлений.

  Совместно используемые соединения

При создании удаленных представлений вы можете воспользоваться совместно используемыми соединениями. В этом случае одно активное соединение используется как информационный канал для нескольких удаленных представлений.

При совместном использовании активного соединения:

Для определения разделяемого соединения воспользуйтесь любым из следующих способов:

  Комбинирование в представлении локальных и удаленных данных

Актуальной задачей при разработке приложений, использующих удаленные данные, является комбинирование в представлении локальных и удаленных данных. В Visual FoxPro данная задача решается достаточно просто. Прежде всего, вы должны создать удаленные представления для данных, которые будут использоваться совместно с локальными.

Затем в диспетчере проектов выберите раздел Local Views (Локальные представления) и нажмите кнопку New (Новый), чтобы открыть конструктор представлений. Добавьте в новое представление любую комбинацию таблиц, локальных и удаленных представлений. Например, вы можете объединить в одном представлении данные из локальной таблицы Ordsaied и удаленного представления данных Microsoft SQL, содержащего список товаров.

Для создания комбинированного представления вы можете использовать также команду CREATE SQL VIEW, Например, чтобы создать локальное представление, комбинирующее информацию из локальной таблицы ordsaiem и удаленной таблицы customer (расположенной на сервере базы данных SQL Server), используйте следующий код:

OPEN DATABASE SALES

CREATE SQL VIEW localORDSALEM_remoteCUSTOMER;

AS SELECT * FROM SQLSERVERCUSTOMER, ORDSALEM

WHERE SQLSERVERCUSTOMER.iCdCustcmer =

ORDSALEM. iCdCustomer

  Настройка представления с помощью словаря базы данных

Так как сведения о представлении хранятся в словаре базы данных, вы можете определить для него следующие свойства:

Для определения свойств полей представления данных в окне конструктора представления перейдите на вкладку Fields (Поля) и нажмите кнопку Properties (Свойства). Откроется диалоговое окно View Field Properties (Показать свойства поля).

Раскрывающийся список Field (Поле) в этом диалоговом окне содержит перечень всех полей представления. Для определения свойств поля необходимо сначала выбрать его из этого списка.

В области Field validation (Проверка достоверности данных поля) вы можете задать условия проверки достоверности данных на уровне поля при вводе данных (табл. 22.9).

Таблица 22.9. Поля области Field validation

Поле Назначение
Rule (Правило) Задает правило проверки достоверности данных на уровне поля
Message

(Сообщение)

Задает сообщение об ошибке, которое будет выдаваться, если введенные данные не согласуются с правилом уровня поля
Default value

(Значение по умолчанию)

Задает для поля значение по умолчанию

Для удаленных данных правило проверки достоверности данных на уровне поля задается средствами сервера базы данных. Вы можете задать локальное правило для:

Visual FoxPro не сравнивает локальное и удаленное правило проверки достоверности данных.

В области Display (Отобразить) вы можете задать условия проверки достоверности данных на уровне поля при отображении и вводе данных (табл. 22.10).

Таблица 22.10. Поля области Display

Поле Назначение
Format (Формат) Задает формат отображения данных. Этот формат используется в окне Browse, отчетах и формах
Input mask (Маска ввода) Задает маску ввода данных
Caption (Описание) Задает описательное имя поля. Название отображается в качестве заголовка столбца при просмотре таблицы. Оно может включать до 128 символов

Если вы планируете использовать представление данных в формах, то можете использовать опции области Map field type to classes (Установить соответствие между типами полей и классами) для задания типа объекта управления, создаваемого в форме при размещении данного поля.

Для удаленных представлений данных вы можете определить тип и размер поля представления данных. Используйте для этого опции области Data mapping (Соответствие типов данных).

Поле редактирования Comment (Комментарий) содержит описательный комментарий о данном поле. Все, что вы здесь введете, при выборе поля будет отображено в качестве описания в нижней части диспетчера проектов.

Замечание

Для определения свойств полей представления данных вы можете использовать функцию DBSETPROP () .

Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Знаете ли Вы, что только в 1990-х доплеровские измерения радиотелескопами показали скорость Маринова для CMB (космического микроволнового излучения), которую он открыл в 1974. Естественно, о Маринове никто не хотел вспоминать. Подробнее читайте в 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