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

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

Создание базы данных проекта

База данных в Visual FoxPro — это совокупность таблиц, отношений между таблицами, индексов, триггеров и хранимых процедур.

Создание базы данных в Visual FoxPro осуществляется в интерактивном ре-. жиме с помощью конструктора базы данных, который позволяет:

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

  Создание базы данных в окне проекта

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

  1. Откройте созданный проект.
  2. Выберите в верхней части окна конструктора проектов вкладку Data(Данные). Курсор по умолчанию устанавливается в начале вкладки назначении Databases (Базы данных).
  3. Нажмите кнопку New (Новый) в окне проекта.
  4. В открывшемся диалоговом окне New Database (Новая база данных) нажмите кнопку New Database (Новая база данных).
  5. В поле ввода Enter database (Введите имя базы данных) появившегося на экране диалогового окна Create (Создать) задайте имя создаваемой базы данных, убедившись, что в поле Тип файла установлен тип сохраняемого файла Database (База данных), а в раскрывающемся списке Папка правильно указана папка, в которой вы хотите расположить создаваемую базу данных.
  6. Для сохранения созданной базы данных нажмите кнопку Сохранить. После этого откроется пустое окно базы данных Database Designer(Конструктор базы данных) (рис. 4.1). Используя панель  инструментов Designer (Конструктор базы данных), команды меню Database(База данных) и контекстное меню, в окне конструктора базы данных вы можете создавать новые таблицы, модифицировать существующие, создавать для них индексы, устанавливать отношения между таблицами.

Замечание

Если панель инструментов Database Designer (Конструктор базы данных) невидна на экране, в меню View (Вид) выберите команду Toolbars (Панели инструментов). Открывается диалоговое окно Toolbars (Панель инструментов), в котором установите флажок Database Designer (Конструктор базы данных).

gl4-1.jpg

Рис. 4.1. Пустое окно конструктора базы данных

В начале создания базы данных окно конструктора базы данных пусто. На рис. 4.2 показано, как выглядит это окно с размещенными в нем таблицами.

gl4-2.jpg

Рис. 4.2. Окно конструктора базы данных Sales с размещенными в нем таблицами

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

Таблица 4.1. Назначение команд меню Database

Команда Назначение
New Table (Новая таблица) Создает новую таблицу
Add Table (Добавить таблицу) Добавляет созданную таблицу в базу данных
New Remote View (Новое удаленное представление) Создает удаленное представление данных
New Local View (Новое локальное представление) Создает локальное представление данных
Modify (Модифицировать) Открывает таблицу в конструкторе таблицы
Browse (Обзор таблицы) Показывает содержимое таблицы в режиме Browse
Remove (Удалить) Удаляет таблицу из базы данных
Find Object (Найти объект) Находит указанный вами объект в окне конструктора базы данных
Rebuild Table Indexes (Перестроить индексы) Перестраивает индексы
Remove Deleted Records (Удалить помеченные записи) Физически удаляет из таблицы помеченные для удаления записи
Edit Relationship (Редактирование отношения) Редактирует отношения между таблицами
Edit Referential Integrity (Редактирование условия целостности) Определяет условия целостности данных
Edit Stored Procedures (Редактирование хранимых процедур) Открывает окно редактирования хранимой процедуры
Connections (Соединения) Выводит на экран диалоговое окно Connections(Соединения), в котором вы можете создавать или модифицировать соединения с удаленными данными
Arrange (Упорядочить) Упорядочивает объекты по имени или типу и выравнивает их по горизонтали или вертикали
Refresh (Обновить) Обновляет информацию в окне конструктора базы данных
Properties (Свойства) Выводит на экран диалоговое окно Database Properties (Свойства базы данных)
Clean Up Database (Очистка базы данных) Очищает базу данных от помеченных на удаление объектов

Для работы в окне конструктора базы данных можно использовать контекстное меню, содержащее наиболее часто используемые команды из меню Database  (База данных), команду вызова справочной системы, а также команды Expand All (Развернуть все) и Collapse All (Свернуть все), предназначенные, соответственно, для раскрытия и свертывания уровней вложенности объектов в окне конструктора базы данных.

Панель инструментов Database Designer (Конструктор базы данных) содержит кнопки для выполнения наиболее часто используемых операций над базой данных. Вид панели инструментов приведен на рис. 4.3, а описание кнопок панели инструментов — в табл. 4.2.

gl4-3.jpg

Рис. 4.3. Панель инструментов Database Designer

Таблица 4.2. Назначение кнопок панели инструментов Database Designer

Кнопка Название Назначение
New Table (Новая таблица) Создает новую таблицу
Add Table (Добавить таблицу) Добавляет ранее созданную таблицу в базу данных
Remove Table (Удалить таблицу) Удаляет таблицу из базы данных
New Remote View (Новое удаленное представление) Создает удаленное представление данных
New Local View (Новое локальное представление) Создает локальное представление данных
Modify Table (Модифицировать таблицу) Открывает таблицу в конструкторе таблицы
Browse Table (Обзор таблицы) Показывает содержимое таблицы в режиме Browse
Edit Stored Procedures (Редактирование хранимых процедур) Открывает окно для редактирования хранимых процедур
Connections (Соединения) Создает связь с удаленными данными

  Создание базы данных вне проекта

Visual FoxPro позволяет создавать базу данных вне проекта. Для этого воспользуйтесь одним из предложенных ниже способов.

CREATE DATABASE [имяБазыДанных | ?]

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

Замечание

Базу данных, созданную вне проекта, можно использовать в разных проектах.

  Таблицы — основа базы данных

Таблицы составляют основу вашей базы данных. В них будет храниться вся необходимая информация. В дальнейшем данные в таблице будут дополняться новыми данными, редактироваться или исключаться из таблицы. Вы сможете просматривать данные таблиц с помощью форм или упорядочивать их по заданному критерию. Информация, содержащаяся в таблицах, может быть использована для составления отчетов. Кроме того, используя диаграммы, вы можете графически представить информацию, содержащуюся в базе данных.

Таблица состоит из строк и столбцов и имеет уникальное имя в базе данных. В каждой из таблиц содержится информация о каких-либо объектах одного типа.

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

  Имена таблиц

Таблицы, как и любые другие объекты в Visual FoxPro, имеют имена. Как было сказано выше, таблицы бывают свободные и входящие в базу данных. Для таблиц, входящих в базу данных, вы можете задать два имени. Одно вводится в диалоговом окне Create (Создать), а второе — на вкладке Table(Таблица) окна конструктора таблицы. Имя, вводимое в диалоговом окне Create (Создать) при создании таблицы, является именем файла, в котором таблица сохраняется на диске. При задании этого имени необходимо придерживаться ограничений, накладываемых операционной системой на количество символов в имени файла. Второе имя таблицы является внутренним и хранится в базе данных. Внутреннее имя таблицы может содержать до 128 символов. Оно вводится в поле Name (Имя) вкладки Table (Таблица) окна конструктора таблицы.

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

Замечание

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

Предупреждение

В наименовании таблицы недопустимо использование пробелов и специальных символов.

  Создание таблицы с помощью мастера

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

  1. Откройте диалоговое окно New Table (Новая таблица) (рис. 4.4), выполнив любое из следующих действий:
gl4-4.jpg

Рис. 4.4. Диалоговое окно New Table

  1. В диалоговом окне New Table (Новая таблица) нажмите кнопку Table Wizard (Мастер таблицы). На экране появляется первое диалоговое окно мастера.
  2. Visual FoxPro предлагает целый ряд таблиц, которые вы можете использовать в качестве прототипов, что позволит сэкономить время и обеспечить стандартные имена и типы данных для полей создаваемой таблицы.

На первом шаге вам необходимо, используя предлагаемые Visual FoxPro прототипы таблиц и их поля, сформировать список полей создаваемой таблицы (рис. 4.5). Для этого из списка Sample Tables (Примеры таблиц)выберите таблицу, которую хотите взять за основу при создании своей таблицы. При этом в списке Available Fields (Имеющиеся поля) отобразятся поля выбранной таблицы.

gl4-5.jpg

Рис. 4.5. Формирование списка полей

Замечание

Содержимое списка Sample Tables (Примеры таблиц) можно изменять, используя расположенные под ним опции. Для создания таблиц делового содержания установите опцию Business (Деловые). В списке будут отображаться таблицы Accounts, Customers и т. д. При создании таблиц, содержащих данные личного характера, установите опцию Personal (Личные).

  1. Перенесите из списка Available Fields (Имеющиеся поля) в список Selected Fields (Выбранные поля) поля, которые вы хотите разместить в создаваемой таблице. Для переноса полей используйте кнопки, описанные в табл. 4.3.

Таблица 4.3. Назначение кнопок диалогового окна Table Wizard-Step 1

Кнопка Назначение
Переносит текущее поле из списка Available Fields (Имеющиеся поля)в список Selected Fields (Выбранные поля)
Переносит все поля из списка Available Fields (Имеющиеся поля) в список Selected Fields (Выбранные поля)
Возвращает текущее поле из списка Selected Fields (Выбранные поля)в список Available Fields (Имеющиеся поля)
Переносит все поля из списка Selected Fields (Выбранные поля) в список Available Fields (Имеющиеся поля)

Замечание

Если в качестве прототипа при создании таблицы вы хотите использовать одну из созданных вами ранее таблиц, нажмите кнопку Add (Добавить), расположенную в левом нижнем углу, и в открывшемся диалоговом окне Open(Открыть) выберите требуемую таблицу. Наименование этой таблицы будет размещено в списке Sample Tables (Примеры таблиц) окна мастера.

Закончив формирование списка полей, нажмите кнопку Next (Далее).

  1. На следующем шаге работы мастера (рис. 4.6) вам необходимо указать, создаете вы свободную таблицу или данная таблица будет добавлена в базу данных. Для этого воспользуйтесь опциями, назначение которых описано в табл. 4.4.

Таблица 4.4. Назначение опций диалогового окна Table Wizard Step 1

Опция Назначение
Create my table as a stand-alone freetable (Создать свободную таблицу) При выборе этой опции создается свободная таблица
Add my table to the following database (Добавить таблицу в базу данных) При выборе опции создаваемая таблица будет добавлена в базу данных

По умолчанию установлена опция Create my table as a stand-alone free table (Создать свободную таблицу). Для размещения создаваемой таблицы в базе данных установите опцию Add my table to the following database

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

Если вы хотите задать внутреннее имя таблицы, отображаемое внутри базы данных, воспользуйтесь полем Table Name (Имя таблицы). Завершив установки параметров в текущем окне мастера, нажмите кнопку Next(Далее) для перехода к следующему шагу.

gl4-6.jpg

Рис. 4.6. Указание типа создаваемой таблицы

  1. В следующем диалоговом окне мастера (рис. 4.7) можно изменить наименования выбранных полей, их тип и размеры, используя для этого поля Field Name (Имя поля), Туре (Тип), Width (Ширина) и Decimals(Десятичные). Можно также, используя поле ввода Caption (Надпись),задать для каждого поля заголовок, который будет использоваться при просмотре таблицы и в качестве надписи к полю таблицы при создании форм с помощью мастера.

Флажок Allow null values (Разрешать нулевые значения) позволяет указать, может ли поле быть пустым, т. е. не содержать значений.

Чтобы определить для поля ввода маску, в соответствии с которой в него будут вводиться данные, используйте переключатель Input Mask (Маска ввода), содержащий следующие опции:

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

В том случае, если ни одно из значений списка вам не подходит, установите опцию Custom mask (Пользовательская маска) и введите в расположенное справа поле выражение для маски. Для указания формата поля можно использовать значения раскрывающегося списка Format (Формат).Установите в диалоговом окне все необходимые значения поочередно для всех полей таблицы и нажмите кнопку Next (Далее) для перехода к следующему шагу.

gl4-7.jpg

Рис. 4.7. Модификация полей

  1. На третьем шаге в работе мастера (рис. 4.8) с помощью раскрывающегося списка Primary Key (Первичный ключ), содержащего список всех полей таблицы, задайте первичный ключ таблицы. При этом вы должны помнить, что поле может использоваться для задания первичного ключа таблицы только в том случае, если оно содержит неповторяющиеся значения. Например, для таблицы customer, содержащей список клиентов, в качестве первичного ключа можно использовать поле customerio с кодами клиентов.

Используя список Field Name (Имя поля), укажите дополнительные индексы для таблицы, установив соответствующие флажки слева от наименования полей. Затем нажмите кнопку Next (Далее).

gl4-8.jpg

Рис. 4.8..Окно мастера для определения первичного ключа и индексов таблицы

  1. Если вы создаете не свободную таблицу, а таблицу, входящую в базу данных, то на следующем шаге мастера определяются связи между новой таблицей и таблицами базы данных (рис. 4.9).
gl4-9.jpg

Рис. 4.9. Задание связей между создаваемой таблицей и таблицами базы данных

В списке My new <имя_таблицы> table (Моя новая таблица) диалогового окна содержится перечень всех существующих и возможных связей для новой таблицы. Используя данный список и диалоговое окно Relationships(Отношения), открываемое при нажатии кнопки Relationships (Отношения), задайте тип связи между создаваемой таблицей и остальными таблицами базы данных.

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

Таблица 4.5. Назначение опций диалогового окна Table Wizard Step 4

Опция Назначение
Save table for later use {Сохранить таблицу) Сохраняет созданную таблицу
Save table and browse it (Сохранить таблицу и открыть для просмотра) Сохраняет созданную таблицу и открывает ее в режиме Browse для просмотра содержимого
Save table and modify in the Table Designer (Сохранить таблицу и открыть в окне конструктора для модификации) Сохраняет созданную таблицу и открывает ее в конструкторе таблицы для модификации

Выбрав одну из трех опций, нажмите кнопку Finish (Готово). На экране открывается диалоговое окно Save as (Сохранить как) для задания имени таблицы. Введите в поле Enter Table (Введите имя таблицы) имя таблицы, укажите папку, в которой ее сохраняете, и нажмите кнопку Сохранить.

gl4-10.jpg

Рис. 4.10. Задание режима дальнейшей работы с таблицей

Таблица создана и, в зависимости от установленной опции, откроется в режиме Browse (Обзор) или в конструкторе таблицы для дальнейшей модификации.

  Окно конструктора таблицы

Конструктор таблицы предоставляет разработчику более широкие возможности при создании таблицы, чем мастер.

В конструктор таблицы вы можете перейти из мастера по созданию таблицы или непосредственно из диалогового окна New Table (Новая таблица) (см. рис. 4.4), нажав кнопку New Table (Новая таблица) и введя в диалоговом окне Create (Создать) имя создаваемой таблицы. В результате выполнения этих действий откроется окно конструктора таблицы Table Designer(Конструктор таблицы).

Окно конструктора таблицы Table Designer (Конструктор таблицы)(рис. 4.11) содержит три вкладки, предназначенные для определения следующих параметров:

gl4-11.jpg

Рис. 4.11. Окно конструктора таблицы Table Designer

  Определение полей таблицы

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

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

Ввод наименований полей

Наименования полей таблицы вводятся на вкладке Fields (Поля) в строке ввода столбца Name (Имя). При задании наименований полей вы можете использовать буквы, цифры и знак подчеркивания. Ваши попытки ввести специальные символы Visual FoxPro проигнорирует.

Длина наименования поля ограничивается 128-ю символами. Вряд ли вы воспользуетесь возможностью задавать такие длинные имена. Обычно для имен полей используют краткие названия, которые более наглядны и легко читаемы.

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

Типы полей

Поля таблицы предназначены для хранения в них данных. Это могут быть числа, текстовая информация, даты, графические файлы и т. д. Для определения типа данных, размещаемых в поле, используются тип поля, его ширина и количество знаков после запятой. Для их ввода предназначены столбцы Туре (Тип), Width (Ширина) и Decimal (Десятичные) вкладки Fields(Поля) конструктора таблицы.

В Visual FoxPro допустимыми являются типы полей, перечисленные в табл. 4.6.

Таблица 4.6, Типы полей Visual FoxPro

Тип Наименование Отображаемые данные
Текстовый Character, Character(binary) Текстовые поля могут содержать буквы, цифры и специальные символы. Максимальная ширина поля составляет 254 символа. тип Character (binary) используется в том случае, если не требуется учитывать кодовую страницу отображаемых данных
Числовой Integer, Numeric, Float, Double Integer отображает целые числа от-2 147 483 647 до +2 147 483 646. Числовые поля типа Numeric и Float отображают данные с фиксированной точкой в диапазоне от-0.9999999999x1 (Г19 до +0.9999999999х10+2°. Тип данных Double используется для хранения данных с высокой точностью в диапазоне от±4.9406564854 1247x1 (Г324 до±1 .797693 13486232x1 (Г308
Денежный Currency В поле денежного типа могут содержаться числа от -922 337 203 685 477.5807 до922 337 203 685 477.5807
Дата Date В поле типа Date может содержаться любая дата от 01. 01. 0001 до 31. 12.9999
Дата и время DateTime В поле типа DateTime может содержаться любая дата от 01.01.0001 до 31.12.9999 и время от 00:00:00 а.m.. до 11 :59:59 р.m.
Логический Logical Содержит логическое значение True (Т.)(Истина) или False (.F.) (Ложь)
Текстовое поле произвольной длины Memo, Memo(binary) Memo-поле содержит символьные данные большого объема
Двоичное поле произвольной длины General Поле данного типа предназначено для хранения в таблицах изображений и других двоичных данных

Задание свойств полей

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

Область Display (Отображение) содержит поля, позволяющие задать форматы ввода и отображения данных (табл. 4.7).

Таблица 4.7. Назначение полей области Display вкладки Fields

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

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

Таблица 4.8. Назначение полей области Map field type to classes вкладки Fields

Поле Назначение
Display library (Показывать библиотеку) Задает местоположение и имя файла библиотеки классов
Display class (Показывать класс) Задает имя класса из выбранной библиотеки

Область Field validation (Проверка правильности ввода) позволяет задать параметры, описанные в табл. 4.9.

Таблица 4.9. Назначение полей области Field validation вкладки Fields

Поле Назначение
Rule (Условие) Условие правильности ввода данных
Message (Сообщение) Сообщение, выводимое при неправильном вводе данных в поле
Default Value (Значение по умолчанию) Значение, вводимое в поле по умолчанию

В текстовом поле Field comment (Комментарий) можно ввести краткое описание поля, которое может потребоваться при последующих модификациях структуры таблицы и сопровождении проекта.

Свойство NULL

Для каждого поля вы можете определить признак, разрешающий при вводе данных оставлять это поле пустым. Для этого используется свойство NULL в описании поля таблицы. 'Более подробно определение свойств полей будет рассмотрено в главе 14.

Назначение кнопок окна конструктора таблицы

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

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

Для добавления в таблицу нового поля установите курсор на поле, выше которого вы предполагаете разместить новое, и нажмите кнопку Insert(Вставить). Будет добавлена пустая строка, в которую вы можете ввести информацию о новом поле.

Для удаления поля таблицы перейдите на строку с описанием данного поля и нажмите кнопку Delete (Удалить).

Кнопки Insert (Вставить) и Delete (Удалить) на вкладке Indexes (Индексы)позволяют добавлять в таблицу новые индексы и удалять существующие.

  Определение свойств таблицы

Для определения свойств самой таблицы предназначена вкладка Table(Таблица) конструктора (рис. 4.12).

В ее верхней части расположено поле Name (Имя), в котором вы можете задать длинное имя таблицы. Это имя будет отображаться в окне проекта, а также использоваться при создании форм, запросов и отчетов. При создании несвободной таблицы в строке Database (База данных) указывается имя базы данных, в которую будет входить создаваемая таблица. Это поле доступно только для чтения.

Используя поле Table Comment (Описание таблицы) вкладки Table(Таблица), вы можете ввести текстовое описание таблицы. Для определения условия проверки правильности ввода информации на уровне записей, гарантирующих достоверность вводимых в таблицу данных, и создания триггеров для добавления, изменения и удаления записей таблицы, предназначены поля областей Record validation (Достоверность записей) и Triggers(Триггеры).

Определение свойств таблицы будет рассмотрено в главе 14.

gl4-12.jpg

Рис. 4.12. Вкладка Table конструктора таблицы

  Создание таблицы в конструкторе таблицы

Мы рассмотрели назначение основных параметров окна конструктора таблицы. Теперь можно приступать к созданию таблицы.

Рассмотрим последовательность действий при создании таблицы customer(рис. 4.13), содержащей сведения о клиентах, из конструктора базы данных sales, предназначенной для учета заказов клиентов.

  1. Откройте проект sales.
  2. В иерархической структуре конструктора проекта установите курсор на базу данных sales и нажмите кнопку Modify (Модифицировать). На экране откроется окно конструктора базы данных.
  3. Находясь в конструкторе базы данных, нажмите кнопку New Table(Новая таблица) на панели инструментов Database Designer (Конструктор базы данных).
  4. В поле Enter table (Введите имя таблицы) диалогового окна Create(Создать) задайте имя таблицы customer и нажмите кнопку Сохранить. На экране появится окно конструктора таблицы Table Designer (Конструктор таблицы). Курсор находится в строке ввода столбца Name (Имя). Вы можете вводить имя, тип и ширину полей создаваемой таблицы.
gl4-13.jpg

Рис. 4.13. Структура таблицы Customer

  1. В строке ввода столбца Name (Имя) введите наименование поля, содержащего код клиента icdcustomer. Для перехода в следующий столбец воспользуйтесь мышью или нажмите клавишу <Tab>. Нажмите кнопку раскрытия списка Туре (Тип) и выберите значение Integer (Целое число).Кроме того, вы можете изменить тип поля с помощью клавиш. Ширина поля типа Integer равна 4. Данное значение устанавливается автоматически, и вы не можете его изменить.
  2. Перейдите в поле Caption (Надпись), расположенное в области Display(Отображение), и укажите заголовок поля Код клиента. В поле Fieldcomment (Комментарий) введите краткое описание поля.
  3. Аналогичным образом определите остальные поля. Для перехода с одного поля на другое используйте клавишу <Таb>, клавиши-стрелки или мышь. Для изменения ширины поля используйте кнопки изменения ширины поля, расположенные в правой части поля, а также клавиши.

Замечание

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

  1. При описании поля ccountry, указывающего страну, определите значение, вводимое в поле по умолчанию при добавлении новой записи. Для этого перейдите в поле Default value (Значение по умолчанию) и введите Россия.
  2. После завершения определения структуры таблицы нажмите кнопку ОК.

Замечание

В окне конструктора вы можете отказаться от создания новой таблицы или введенных в ее структуру изменений. Для этого нажмите кнопку Cancel(Отмена). На экране появится запрос системы об отмене или принятии изменений (рис. 4.14). Выберите значение Yes (Да).

gl4-14.jpg

Рис. 4.14. Запрос системы об отмене изменений структуры таблицы

  1. На экране появляется запрос, будете ли вы сейчас вводить данные в созданную таблицу. Если вы готовы приступить к вводу данных, нажмите кнопку Yes (Да). Созданная таблица откроется в режиме Edit (Ввод),позволяя вводить данные. При нажатии кнопки No (Нет) окно конструктора таблицы закрывается.

  Режимы просмотра таблицы

В Visual FoxPro существует два режима просмотра таблицы: Edit (Ввод)(рис. 4.15) и Browse (Обзор).

В режиме Edit (Ввод) (рис. 4.15) поля таблицы располагаются в столбец друг под другом. Записи таблицы отделяются горизонтальными линиями.

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

В режиме Browse (Обзор) (рис. 4.16) таблица более наглядна. Поля расположены в один ряд. Одна строка соответствует одной записи таблицы, а записи размещены одна под другой.

gl4-15.jpg

Рис. 4.15. Просмотр таблицы в режиме Edit

gl4-16.jpg

Рис. 4.16. Просмотр таблицы в режиме Browse

При вводе данных в таблицу, представленную в режиме Browse (Обзор), после ввода одной записи пользователю необходимо самому добавлять новую пустую запись, используя для этого команду Append New Record (Добавить новую запись) из меню Table (Таблица) или комбинацию клавиш <Ctrl>+<Y>.

Замечание

Для перехода в режимы просмотра таблицы Edit (Ввод) и Browse (Обзор) можно использовать одноименные команды из меню View (Вид).

  Модификация таблицы

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

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

В результате на экране открывается диалоговое окно Table Designer (Конструктор таблицы), содержащее структуру модифицируемой таблицы.

Изменение наименований полей и их типов

Ошибки, допущенные при задании имени поля или его типа, легко устраняются. Установите курсор на имя поля, которое хотите изменить, и, используя клавишу <Backspace> или <Del>, удалите ошибочные символы. После этого введите правильное имя поля.

Для изменения типа поля установите курсор в столбец Туре (Тип) и выберите из списка требуемое значение.

Предупреждение

Изменение типов полей таблицы, содержащей данные, может привести к потере информации.

Добавление и удаление полей

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

  1. С помощью клавиш-стрелок или мыши установите курсор на строку, перед которой вы хотите вставить пропущенное поле. При этом курсор может находиться в любом столбце Name (Имя), Туре (Тип) или Width(Размер).
  2. Нажмите кнопку Insert (Вставить).
  3. Visual FoxPro вставляет пустую строку с именем NewFld. Введите требуемое имя поля.
  4. Используя значения списка Туре (Тип), задайте тип поля.
  5. В столбце Width (Размер) введите размер нового поля.

Для удаления поля из структуры таблицы установите курсор на поле, которое требуется удалить, и нажмите кнопку Delete (Удалить) окна конструктора.

Изменение порядка расположения полей

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

  1. Установите курсор на поле, расположение которого хотите изменить. На кнопке появляется значок перемещения поля в виде двунаправленной стрелки.
  2. Установите курсор на значок перемещения.
  3. Нажмите кнопку мыши и, удерживая ее нажатой, переместите значок вверх или вниз на требуемое место в структуре.
  4. Отпустите кнопку мыши. Поле изменило свое местоположение.

  Индексы

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

Замечание

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

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

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

Для создания индекса таблицы используется вкладка Indexes (Индексы)(рис. 4.17) окна конструктора таблицы Table Designer (Конструктор таблицы).

gl4-17.jpg

Рис. 4.17. Вкладка Indexes конструктора таблицы, предназначенная для создания индексов

Все индексы в Visual FoxPro имеют имена, задаваемые в поле Name (Имя).Слева от имени индекса в столбце Order (Упорядочение) располагается переключатель, определяющий порядок, в котором будут выстраиваться значения индексного выражения. По умолчанию при создании индекса в данном поле появляется стрелка, направленная вверх. Это означает, что значения индексного выражения упорядочены по возрастанию. Если стрелка направлена вниз, это говорит о том, что значения упорядочены по убыванию. Для изменения способа упорядочения можно нажать клавишу <Пробел>или щелкнуть кнопкой мыши.

Список Туре (Тип) используется для задания типа создаваемого индекса и содержит значения, описанные в табл. 4.10.

Таблица 4.10. Описание типов индекса

Тип индекса Описание
Regular(Обычный) Создается индекс, в котором для каждой записи таблицы хранится значение индексного выражения. Если несколько записей имеют одинаковое значение индексного выражения, то каждое значение хранится отдельно и содержит ссылку на связанную с ней запись
Unique(Уникальный) Создается индекс, в котором хранятся только неповторяющиеся значения индексного выражения. Если две или более записей содержат одинаковое значение индексного выражения, то будет храниться только одно значение и ссылка на первую из записей с одинаковым значением индексного выражения. Таблица может иметь несколько уникальных индексов
Candidate(Кандидат) Создается уникальный индекс, который не содержит полей с пустыми значениями. Этот индекс обладает всеми качествами первичного ключа и не является им только по той причине, что таблица не может содержать более одного первичного ключа
Primary(Первичный) Создается уникальный индекс, который используется для связывания таблиц и определения условий целостности данных. Поля, входящие в первичный ключ, не должны допускать ввода пустых значений. В отличие от уникального индекса, таблица может иметь только один первичный ключ

Значение индекса или индексного выражения вводится в поле Expression(Выражение). Вы можете ввести индексное выражение непосредственно в поле ввода или для формирования выражения использовать диалоговое окно конструктора выражений Expression Builder (Построитель выражения), представленное на рис. 4.18. Для открытия данного окна нажмите кнопку, расположенную справа от поля Expression (Выражение).

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

cCountry + STR(icdCustomer)

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

gl4-18.jpg

Рис. 4.18. Диалоговое окно Expression Builder

Замечание

Без индексов в Visual FoxPro не обойтись. Однако при их создании вы должны помнить, что если вы используете индекс, в состав которого входят поля большой ширины, индексный файл может оказаться очень больших размеров. Visual FoxPro не разрешает при создании индексов использовать Memo-поля и поля, содержащие графические изображения.

  Создание первичного ключа для таблицы

Рассмотрим последовательность ваших действий при создании первичного ключа для таблицы customer. Так как первичный ключ таблицы должен быть уникальным, для его создания можно использовать поле icdcustomer таблицы, содержащее коды клиентов. Это поле было добавлено в таблицу специально, т. к. значения остальных полей не являются уникальными.

  1. Откройте окно конструктора таблицы для таблицы Customer. Для этого в окне проекта установите курсор на модифицируемую таблицу и нажмите кнопку Modify (Модифицировать) конструктора проекта.
  2. В окне Table Designer (Конструктор таблицы) перейдите на вкладку Indexes (Индексы).
  3. В поле Name (Имя) введите имя индекса icdcustomer.
  4. Из списка возможных типов индекса в поле Туре (Тип) выберите значение Primary (Первичный).
  5. Перейдите в поле Expression (Выражение) и введите выражение для индекса icdCustomer.
  6. Установите переключатель столбца Order (Упорядочение) в значение По возрастанию. Результат создания первичного ключа представлен на рис. 4.19.
  7. Для завершения создания индекса нажмите кнопку ОК.
gl4-19.jpg

Рис. 4.19. Первичный ключ таблицы Customer

  Создание составного индекса

Рассмотрим создание индекса для таблицы customer, который будет упорядочивать данные в таблице по фамилии, имени и отчеству. Для создания такого индекса воспользуемся индексным выражением.

  1. Откройте окно Table Designer (Конструктор таблицы) для таблицы customer и перейдите на вкладку Indexes (Индексы).
  2. В поле Name (Имя) введите имя индекса custName.
  3. Из списка возможных типов индекса в поле Туре (Тип) выберите значение Regular (Обычный).
  4. Для задания индекса нажмите кнопку открытия построителя выражений для поля Expression (Выражение). В окне построителя сформируйте следующее выражение:

cLastName + cFirstName + cSecondName

  1. Проверьте синтаксис выражения, воспользовавшись кнопкой Verify(Проверить), и закройте окно построителя выражений.
  2. Для завершения создания индекса нажмите кнопку ОК.

  Отношения между таблицами

Между таблицами существует четыре типа отношений. Это "один-к-одному", "один-ко-многим", "много-к-одному", "много-ко-многим". Все эти типы отношений поддерживаются в Visual FoxPro.

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

Наиболее часто встречающимся является тип отношения "один-ко-многим". В качестве примеров могут быть рассмотрены отношения между покупателем и купленными им товарами, между предприятием и работающими на нем сотрудниками.

Отношение "много-к-одному" можно сравнить с отношением "один-ко-многим", рассматриваемое с другой точки зрения. Например, между клиентами и сделанными им заказами существует отношение "один-ко-многим". С другой стороны, если в качестве исходной точки рассматривать заказы, то между сделанными заказами и клиентами получается отношение "много-к-одному".

В качестве примера отношения "много-ко-многим" можно привести пример магазина оптовой торговли. Данный тип отношений существует между списком товаров, производимых предприятиями-поставщиками, и списком товаров, заказанных потребителями.

  Создание отношений между таблицами

Как правило, в Visual FoxPro при создании форм, отчетов и запросов используется несколько таблиц, между которыми установлены постоянные отношения. Такие таблицы называются связанными. Из двух связанных таблиц одна является главной, а другая — подчиненной. Главную таблицу называют родительской, а подчиненную — дочерней. При создании индексов для родительской таблицы должен быть определен ключ типа Primary

(Первичный) или типа Candidate (Кандидат), а для дочерней таблицы — индекс для связи с родительской таблицей типа Regular (Обычный).

Рассмотрим, например, отношения между таблицей Customer, содержащей список клиентов, и таблицей Phoncust, в которой размещены данные о телефонах, по которым можно связываться с клиентами. Таблица customer является родительской по отношению к таблице PhonCust. В свою очередь, таблица PhonCust является дочерней по отношению к таблице Customer. При создании отношений между этими таблицами для customer должен быть определен первичный ключ, а для таблицы PhonCust — создан индекс по полю, содержащему код клиента, по которому осуществляется связь между таблицами.

Для создания отношений между таблицами customer и PhonCust выполните следующие действия:

  1. Откройте окно конструктора базы данных, в которой эти таблицы размещены.
  2. Откройте таблицу customer в конструкторе таблицы. Для этого щелкните на ней правой кнопкой мыши и в контекстном меню выберите команду Modify (Модифицировать).
  3. На вкладке Indexes (Индексы) создайте первичный ключ для поля icdCustomer. Для этого в поле столбца Name (Имя) введите наименование индекса icdCustomer. Для простого индекса в качестве его имени удобно использовать наименование поля, по которому индекс создается.
  4. В столбце Туре (Тип) выберите из списка значение Primary (Первичный).
  5. В столбце Expression (Выражение) нажмите кнопку построителя. В открывшемся диалоговом окне Expression Builder (Построитель выражения) в списке Fields (Поля) дважды щелкните мышью на поле icdCustomer. Оно будет перенесено в поле Expression (Выражение). Нажмите кнопку ОК для закрытия диалогового окна.
  6. Индекс для таблицы customer создан. Нажмите кнопку ОК для закрытия окна конструктора таблицы.
  7. Откройте в конструкторе таблицу PhonCust.
  8. Перейдите на вкладку Indexes (Индексы) и создайте ключ типа Regular

(Обычный) для поля icdCustomer.

  1. Нажмите кнопку ОК для закрытия окна конструктора таблицы.
  2. Выберите родительскую таблицу. В нашем примере это таблица Customer.
  3. Установите курсор мыши на первичный ключ таблицы icdCustomer.

Замечание

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

  1. Нажмите кнопку мыши и, не отпуская ее, переместите курсор мыши на индекс дочерней таблицы Phoncust, по которому устанавливается связь.
  2. Отпустите кнопку мыши.
  3. Открывается диалоговое окно Edit Relationship (Редактирование отношения) (рис. 4.20), в котором слева приведено наименование родительской таблицы и расположен раскрывающийся список индексов таблицы, а справа размещена аналогичная информация о дочерней таблице. Используя раскрывающиеся списки, можно изменять индексы, по которым связываются таблицы. В этом диалоговом окне указан также тип установленного отношения между таблицами. Для сохранения отношения нажмите кнопку ОК, а для отказа — кнопку Cancel (Отмена).
gl4-20.jpg

Рис. 4.20. Диалоговое окно Edit Relationship для установления отношений между таблицами

Диалоговое окно Edit Relationship (Редактирование отношения) закрывается, а в окне конструктора базы данных отображается в виде линии созданное отношение между таблицами (рис. 4.21).

Установите курсор на линию, соединяющую связываемые таблицы. Толщина линии увеличивается. При щелчке по ней правой кнопкой мыши появляется контекстное меню, содержащее четыре команды (рис. 4.22). команда Remove Relationship (Удалить отношение) удаляет установленное между таблицами отношение. При выборе команды Edit Relationship (Редактирование отношения) открывается диалоговое окно Edit Relationship (Редактирование отношения), позволяющее изменить установленное отношение. Команда Edit Referential Integrity (Редактирование целостности данных) открывает диалоговое окно Referential Integrity Builder (Построитель целостности данных). Об этом окне речь пойдет в следующем разделе.

gl4-21.jpg

Рис. 4.21. Отображение связи между таблицами

gl4-22.jpg

Рис. 4.22. Контекстное меню

  Целостность данных

Целостность данных является одним из самых важных требований, предъявляемых к базам данных. Рассмотрим такой пример. База данных sales оптового магазина содержит таблицу customer со списком клиентов и таблицу ordsalem, в которой размещены данные о клиентах и сделанных ими заказах. Если окажется, что в таблице ordsalem содержатся коды клиентов, которые отсутствуют в таблице Customer, то невозможно определить, кому был отпущен товар по этому заказу. Или еще такой пример. Вы удалили из таблицы клиентов, которые перестали пользоваться услугами вашего магазина, а потом обнаружили, что один из них не возвратил вам кредит. Но вся информация о нем в базе данных отсутствует.

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

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

Ordsalem нового заказа можно использовать программу, которая будет проверять, имеется ли информация об этом клиенте в таблице customer. В случае отсутствия клиента в таблицу Customer будет добавляться новая запись.

gl4-23.jpg

Рис. 4.23. Диалоговое окно Referential Integrity Builder для определения условия целостности данных

Для определения условия целостности данных используется окно построителя условий целостности данных Referential Integrity Builder (Построитель целостности данных) (рис. 4.23), которое содержит перечень всех установленных отношений между таблицами. Для его открытия выполните одно из следующих действий.

Замечание

Если база данных содержит помеченные на удаление объекты, при открытии окна построителя условий целостности данных Referential Integrity Builder(Построитель целостности данных) Visual FoxPro попросит очистить базу данных. В этом случае в меню Database (База данных) выберите команду CleanUp Database (Очистка базы данных), после чего повторно выполните команду, открывающую окно построителя условий целостности данных.

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

В центре диалогового окна находятся переключатели, предназначенные для указания типа выполняемого действия. В нижней части диалогового окна отображается краткая справка о возможном выборе действий. Кроме того, вы можете выбрать тип действия из раскрывающегося списка непосредственно в полях Update (Изменить), Delete (Удалить) и Insert (Вставить).

Рассмотрим возможные действия программы Visual FoxPro при изменении значения первичного ключа или ключа типа Candidate (Кандидат) в родительской таблице в зависимости от используемой опции (табл. 4.11.).

Таблица 4.11. Описание действий Visual FoxPro в зависимости от выбранной опции при изменении значения первичного ключа или ключа типа Candidate

Наименование опции Описание
Cascade (Каскадное изменение) При изменении значений полей первичного ключа или ключа-кандидата в родительской таблице, автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. Например, если это правило применить к отношению между таблицами Customer и Ordsalem, при изменении кода клиента в таблице Customer автоматически будут изменены коды и в Таблице Ordsalem
Restrict (Запрет изменения) Не позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. Данное правило также можно применить к отношению между таблицами Customer и Ordsalem, если в создаваемом приложении коды клиента определяются на этапе ввода нового клиента и в дальнейшем не редактируются
Ignore (Игнорировать) Позволяет изменять значения полей первичного ключа или ключа-кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается

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

Таблица 4.12. Описание действий Visual FoxPro, в зависимости от выбранной опции, при удалении записи из родительской таблицы

Наименование опции Описание
Cascade (Изменять каскадно) При удалении записи из родительской таблицы автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных с удаляемой записью
Restrict (Ограничивать) Не позволяет удалять записи в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на удаляемую запись. При попытке удаления записи возникает ошибка, которую вы можете обработать программно
Ignore (Игнорировать) Позволяет удалять записи в родительской таблице независимо от существования связанных записей в дочерней таблице. Очевидно, что целостность данных при этом не поддерживается

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

Таблица 4.13. Описание действий Visual FoxPro, в зависимости от выбранной опции, при добавлении новой записи в родительскую таблицу

Наименование опции Описание
Restrict (Ограничивать) Не позволяет вводить запись, если значение индексного выражения дочерней таблицы не соответствует одной из записей в родительской таблице
Ignore (Игнорировать) При вводе данных в дочернюю таблицу не анализируется значение индексного выражения. Целостность данных при этом не поддерживается

После завершения определения в диалоговом окне Referential IntegrityBuilder (Построитель целостности данных) условий целостности данных вся введенная информация сохраняется в базе данных. Определим условия целостности данных для таблиц Customer и Ordsalem.

  1. Откройте окно конструктора базы данных.
  2. Создайте отношение между родительской таблицей customer и дочерней таблицей Ordsalem.
  3. Выделите линию, соединяющую таблицы.
  4. Нажмите правую кнопку мыши и выберите команду контекстного меню Edit Referential Integrity (Редактировать целостность данных). На экране откроется диалоговое окно Referential Integrity Builder (Построитель целостности данных).
  5. Предположим, что в процессе эксплуатации нашего приложения коды клиента могут изменяться, поэтому в поле update (Изменить) установите тип действий cascade (Каскадное изменение).
  6. Для обеспечения целостности данных при удалении записей в таблице
  7. Customer в поле Delete (Удалить) установите тип действий Restrict (Запрет изменения).

На рис. 4.24 представлен результат описанных действий, которые необходимы для обеспечения целостности данных. Для сохранения выполненных действий нажмите кнопку ОК.

gl4-24.jpg

Рис. 4.24. Диалоговое окно Referential Integrity Builder

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

Знаете ли Вы, низкочастотные электромагнитные волны частотой менее 100 КГц коренным образом отличаются от более высоких частот падением скорости электромагнитных волн пропорционально корню квадратному их частоты от 300 тыс. км/с при 100 кГц до примерно 7 тыс км/с при 50 Гц.

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

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


Рыцари теории эфира
 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