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

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

Условия достоверности, хранимые процедуры, триггеры, представления данных

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

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

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

Условия достоверности позволяют контролировать ввод данных среде там и сервера на уровне записей и полей таблицы. В первом случае условие опрг деляется в окне ввода свойств таблицы, а во втором — в окне свойств и<> ш таблицы. Проверка на уровне записи обычно используется, если необходима проверка при добавлении или удалении записи, а также, если условие про верки изменения записи требует анализа более одного поля.

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

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

gl14-1.jpg

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

Для определения достоверности ввода данных могут использоваться триггеры добавления и изменения и поля ввода Rule (Условие) и Message (Сообщение) области Record validation (Проверка правильности ввода записей). В поле Rule (Условие) вводится логическое выражение, которое может содержать вызов хранимой процедуры. Если значение этого выражения равно True (Истина), то считается, что введены допустимые данные и разрешается переход на другую запись или закрытие таблицы. В противном случае выводится сообщение об ошибке, которое было задано в поле Message (Сообщение).

  Триггеры

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

Таблица 14.1. Триггеры

Триггер Описание
Insert (Вставить) Определяет действия, которые будут выполняться после добавления новой записи в таблицу
Update (Обновить) Определяет действия, которые будут выполняться после изменения записи таблицы
Delete (Удалить) Определяет действия, которые будут выполняться после удаления записи из таблицы

Для определения триггеров введите в поля ввода Insert trigger (Вставить триггер), Update trigger (Обновить триггер) или Delete trigger (Удалить триггер) вкладки Table (Таблица) окна конструктора выбранной таблицы операторы сравнения, вызов хранимой процедуры или любое логическое выражение. Если результат вычисления выражения равен True (Истина), то считается, что введены допустимые значения. В противном случае сохранения введенных данных не происходит и формируется сообщение об ошибке. При использовании хранимых процедур вы сможете не только проверить условие достоверности ввода данных, но и задать действия, выполняемые при добавлении, удалении и изменении данных.

Вызов триггера Delete (Удалить) осуществляется:

Вызов триггера insert (Вставить) осуществляется в следующих случаях:

Триггер update (Обновить) вызывается, когда:

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

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

  Хранимые процедуры

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

  1. В окне проекта выберите базу данных.
  2. Перейдите в группу Stored Procedures (Хранимые процедуры).
  3. Нажмите кнопку New (Новый) (рис. 14.2).
gl14-2.jpg

Рис. 14.2. Для создания хранимой процедуры предназначена группа Stored Procedures окна проекта

  1. Открывается окно редактирования хранимых процедур (рис. 14.3), которое содержит все ранее созданные хранимые процедуры, включая процедуры, создаваемые автоматически при определении условий целостности базы данных.
gl14-3.jpg

Рис. 14.3. Окно редактирования хранимых процедур

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

Редактирование или удаление хранимых процедур, которые Visual FoxPro создал автоматически при определении условия целостности данных, могут привести к непредсказуемым последствиям.

Для редактирования хранимых процедур в Visual FoxPro вы можете использовать команду MODIFY PROCEDURE, которая открывает окно редактирования хранимых процедур текущей базы данных.

Для удаления хранимой процедуры необходимо в окне редактирования выделить текст удаляемой процедуры и нажать клавишу <Delete> или в окне конструктора проекта установить курсор на ее наименование и выполнить команду Remove (Удалить) окна проекта.

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

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

Определение значения поля при добавлении новой записи

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

  1. Откройте окно проекта sales.
  2. Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.
  3. Выберите в окне проекта таблицу customer и нажмите кнопку Modify (Модифицировать).
  4. Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).
  5. В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum о , введя Getautonewnum("'Customer ") (рис. 14.4).
  6. Нажмите кнопку ОК для закрытия конструктора таблицы.
  7. Теперь необходимо определить функцию GetAutoNewNum. Откройте окно редактирования хранимой процедуры и введите следующие команды:

FUNCTION GetAutoNewNum

LPARAMETERS cNameAliasGANN

LOCAL nDefaultValueGANN

IF TYPE("cNameAliasGANN")="L"

= GetMessage ("Нужно ввести имя таблицы для определения начального

значения в таблице"+ALIAS()+"!",48,"Функция GetAutoNewNum")

RETURN 1

ENDIF

cNameAliasGANN=ALLTRIM (UPPER (cNameAliasGANN) )

DO OpenTable WITH "SALES!RECORDS", 1

IF !SEEK{cNameAliasGANN)

APPEND BLANK

REPLACE NameOfTable WITH cNameAliasGANN

REPLACE ColRecordsInTable WITH 1

ELSE

REPLACE ColRecordsInTable WITH ColRecordsInTable+1

ENDIF

nDefaultValueGANN=ColRecords!nTable

SELECT (cNameAliasGANN)

RETURN nDefaultValueGANN

gl14-4.jpg

Рис. 14.4. Задание вызова хранимой процедуры

Проверка удовлетворения введенных значений заданному условию

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

  1. Откройте окно проекта sales.
  2. Выберите в окне проекта таблицу ordsaied и нажмите кнопку Modify (Модифицировать).
  3. Для определения свойств таблицы перейдите на вкладку Table (Таблица).
  4. В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit о, которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента.
  5. В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 14.5) "Вы превысили допустимую сумму кредита клиента".
gl14-5.jpg

Рис. 14.5. Определение условия достоверности данных

  1. Определим функцию CheckMaxCredit как свойство базы данных, поэтому создадим ее в виде хранимой процедуры.

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

procedure CheckMaxCredit

nCdOrder=Ordsaled.icdOrder && номер текущего заказа

* вычисляем сумму всех введенных позиций заказа

SELECT SUM(Ordsaied.nQuant*Ordsaled.nUnitPrice);

FROM Ordsalem, Ordsaied;

WHERE Ordsalem.icdOrder = Ordsaied.icdOrder;

AND Ordsaied.icdOrder=nCdOrder;

INTO ARRAY nSum

* определяем максимальный кредит клиента из таблицы Customer

SELECT Customer

SEEK Ordsalem.icdCustomer

* если запись о данном покупателе в таблице Customer есть, возвращаем

* результат сравнения суммы заказа с максимальным кредитом

IF FOUND( )

RETURN nSum(l) < CUSTOMER.yCreditLimit

ELSE

RETURN .F.

ENDIF

RETURN

Действия, выполняемые при добавлении новых записей

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

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

В данном примере определим триггер insert для таблицы customer:

  1. Откройте окно проекта sales.
  2. Выберите таблицу customer, содержащую список товаров, и нажмите кнопку Modify (Модифицировать).
  3. Для определения свойств таблицы перейдите на вкладку Table (Таблица) конструктора таблиц.
  4. В поле ввода Insert trigger (Триггер добавления) задайте вызов функции AddNewCustomer о, которая добавляет новую запись в таблицу Newcustomer.
  5. Для добавления новой хранимой процедуры AddNewCustomer откройте окно редактирования хранимых процедур и добавьте в него следующий текст:

procedure AddNewCustomer

nCurCdCustomer= icdCustomer

SELECT NewCustomer

APPEND BLANK

REPLACE icdCustomer WITH nCurCdCustomer

SELECT NewCustomer

RETURN .T.

  Условия достоверности ввода данных на уровне поля таблицы

Для определения условия достоверности ввода данных на уровне поля таблицы используется область Field validation (Проверка правильности ввода) вкладки Fields (Поля) окна конструктора таблиц. В поле Rule (Условие) задается логическое выражение, а в поле Message (Сообщение) — сообщение, отображаемое на экране, если логическое выражение возвращает значение False (Ложь).

Определим условие достоверности данных для поля nquant, содержащего количество купленного товара, таблицы ordsaied. При вводе количества товара необходимо автоматически проверять его фактическое количество на складе.

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

  1. Откройте проект sales.
  2. Перейдите на вкладку Data (Данные).
  3. В разделе Tables (Таблицы) выберите таблицу ordsaied и нажмите кнопку Modify (Модифицировать).
  4. В окне конструктора таблицы выберите поле nquant.
  5. В поле ввода Rule (Условие) области Field validation (Проверка правильности ввода) введите вызов функции checkQuant ().
  6. В поле ввода Message (Сообщение) введите текст сообщения: "Заказанное количество товара превышает его фактическое количество"Чрис. 14.6).
  7. Откройте окно редактирования хранимых процедур и добавьте в него новую процедуру CheckQuant:

    procedure CheckQuant nCdGoods = Ordsaied.iCdGoods

* определяем фактическое количество товара SELECT nFactQuant;

FROM Goods;

WHERE iCdGoods = nCdGoods;

INTO ARRAY nQuant

* сравниваем заказанное количество с имеющимся на складе

RETURN Ordsaied.nQuant(1) <= nQuant(1)

gl14-6.jpg

Рис. 14.6. Определение условия достоверности для поля nquant

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

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

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

Замечание

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

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

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

Замечание

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

При вызове конструктора представлений открывается диалоговое окно Add Table and View (Добавить таблицу или представление данных), позволяющее разместить в конструкторе таблицы и созданные ранее представления данных. Для отображения представлений в этом диалоговом окне необходимо в области Select (Выбор) установить опцию Views (Представления данных). Выбрав необходимую таблицу или представление данных, перенесите их в конструктор, нажав кнопку Add (Добавить). Сформировав список таблиц, нажмите кнопку Close (Закрыть) для закрытия диалогового окна Add Table and View (Добавить таблицу или представление). Выбранные таблицы размещаются в открывшемся на экране окне конструктора представлений данных (рис. 14.7).

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

Для формирования представления данных вы можете использовать команды меню Query (Запрос) и кнопки на панели инструментов View Designer (Конструктор представления данных). Функции кнопок панели инструментов View Designer описаны в табл. 14.2.

gl14-7.jpg

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

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

Кнопка Название Назначение
Add Table (Добавить таблицу) Добавляет в представление новую таблицу или представление данных
Remove Table (Удалить таблицу) Удаляет выбранную таблицу из запроса
Add Join (Добавить объединение) Открывает диалоговое окно Join Condition

(Условие объединения) для задания условия объединения таблиц

Show the SQL windows

(Показать SQL-оператор)

Открывает диалоговое окно, в котором отображается SQL-оператор, соответствующий созданному представлению данных
Maximize the table view (Раскрыть панель представления таблиц) Раскрывает на весь экран панель отображения используемых в представлении таблиц. Повторное нажатие на эту кнопку возвращает панели первоначальный размер

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

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

  1. В меню File (Файл) выберите команду Save As (Сохранить как).
  2. В поле View Name (Имя представления) открывшегося диалогового окна Save (Сохранить) (рис. 14.8) укажите имя созданного представления данных.
  3. Нажмите кнопку ОК.

Замечание

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

gl14-8.jpg

Рис. 14.8. Задание имени представления данных

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

  Просмотр представления данных

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

Для этого выполните одно из следующих действий.

На экране появится сформированное представление данных.

Для просмотра созданного представления данных вы можете также использовать окно проекта или окно Data Session (Окно данных). Чтобы просмотреть представления данных в окне проекта, достаточно установить на него курсор и нажать кнопку Browse (Обзор). Если вы просматриваете представление в окне Data Session (Окно данных), откройте его как обычную таблицу и нажмите кнопку Browse (Обзор).

  Просмотр объема продаж товаров клиентам

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

  1. Откройте окно конструктора представлений и добавьте в него таблицы Customer, Ordsalem, Ordsaled И Goods, используемые для создания нового представления.
  2. Установите связи между размещенными в окне конструктора таблицами. При создании связей между таблицами необходимо учитывать, что связь между ними осуществляется по следующим полям:

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

  1. В список Selected fields (Выбранные поля) перенесите название фирмы, имя клиента и наименование товара.
  2. Добавьте в список Selected fields (Выбранные поля) вычисляемое поле, содержащее сумму продаж:

    SUM(Ordsaled.nQuant * Ordsaled.nUnitPrice)

     

  3. Задайте группировку данных по названию предприятия и наименованию товара.
  4. Для сохранения представления данных в меню File (Файл) выберите команду Save As (Сохранить как). В поле View Name (Имя представления) открывшегося диалогового окна Save (Сохранить) укажите имя создаваемого представления данных Sumcust и нажмите кнопку ОК.
  5. Просмотрите созданное представление данных, нажав кнопку Run (Выполнить) на стандартной панели инструментов.
  6. Закройте окно конструктора представлений.

Вы можете просмотреть созданное представление данных в окне Data Session (Окно данных). Для этого выполните следующие действия:

  1. В меню Windows (Окна) выберите команду Data Session (Окно данных).
  2. Нажмите кнопку Browse (Обзор).
  3. В открывшемся диалоговом окне Open (Открыть) в области Select (Выбор) установите опцию Views (Представления данных).
  4. Выберите из списка Views in database (Представления данных в базе данных) (рис. 14.9) требуемое представление данных и нажмите кнопку ОК.
gl14-10.jpg

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

Замечание

При открытии представления данных в окне Data Session (Окно данных) показывается не только выбранное представление, но и все таблицы, используемые при его создании (рис, 14.10).

gl14-11.jpg

Рис. 14.10. Окно Data Session после открытия представления данных Sumcust

Совет

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

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

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

При открытии представления, для которого заданы параметры, запрашиваются значения заданных параметров, и выборка данных осуществляется с учетом введенных значений. Для определения параметров используется команда View Parameters (Параметры представления данных) из меню Query (Запрос).

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

  1. Выберите в окне проекта представление данных sumCust и нажмите кнопку Modify (Модифицировать).
  2. В окне конструктора представления данных в меню Query (Запрос) выберите команду View Parameters (Параметры представления данных). На экране открывается соответствующее диалоговое окно. Это диалоговое окно содержит список всех параметров представления, для каждого из которых заданы имя параметра и его тип.
  3. Введите параметр Date_View и определите для него тип данных Date.
  1. Определите условие выборки данных для заданной даты. Для этого перейдите на вкладку Filter (Фильтр) и добавьте условие для поля ordsaiem.dDoc. Для выбора значения за конкретную дату используйте оператор ==, а в поле ввода Example (Образец) введите ?Date_View.

Замечание

Вопросительный знак перед именем параметра является признаком использования параметра.

  1. Сохраните представление данных.
  2. Для просмотра итоговых продаж товаров за конкретный день откройте представление данных SumCust. Поскольку для представления определен параметр, на экране появляется диалоговое окно View Parameter (Параметр представления данных), предлагающее ввести значение параметра.

Замечание

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

  1. Введите значение параметра и нажмите кнопку ОК. На экране появится выборка записей, соответствующих дате, введенной в окне View Parameter (Параметр представления данных).

Замечание

Диалоговое окно View Parameter (Параметры представления данных) для ввода значения параметра рекомендуется использовать только при отладке представления. Вы можете определить переменные, наименования которых совпадают с именем параметра, и присвоить им требуемые значения в программе или в форме. В этом случае при открытии представления параметры запрашиваться не будут.

  Редактирование данных

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

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

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

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

Кнопка Update All (Обновить все) устанавливает флажки в столбце разрешения модификации для всех полей, кроме ключевых.

Замечание

Все выбранные на вкладке Update Criteria (Критерий обновления) параметры действительны только в том случае, если установлен флажок Send SQL updates (Отправить SQL-обновление).

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

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

  1. Откройте окно конструктора представлений и добавьте в него таблицу customer.
  2. В список Selected fields (Выбранные поля) перенесите наименование фирмы ccompany, а также clastname, cf irstname и csecondname.
  3. Для определения редактируемых полей перейдите на вкладку Update Criteria (Критерий обновления).
  4. Установите флажки разрешения редактирования для полей clastname, cfirstname и csecondname.
  5. Установите флажок Send SQL updates (Отправить SQL-обновление).
  1. Сохраните представление данных и откройте его для редактирования данных в режиме Browse (Обзор).
Visual FoxPro   Обзор графических пакетов 3GL   Компьютерная графика к экономической информатике   к 4GL - визуальному программированию

Знаете ли Вы, в чем фокус эксперимента Майкельсона?

Эксперимент А. Майкельсона, Майкельсона - Морли - действительно является цирковым фокусом, загипнотизировавшим физиков на 120 лет.

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

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

Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в 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