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

Связывание с данными в WFC

Для получения доступа к данным из проекта Java обычно используются ADO-объекты (ActiveX Data Objects), которые определяют модель программирования данных для WFC-приложений. Основными ADO-объектами являются Connection, Command и Recordset. Объект Connection позволяет соединяться с базой данных, в результате чего можно запрашивать базу данных для получения набора записей. Объект Recordset представляет записи, возвращенные по запросу. Для задания запроса используют либо строку на языке SQL, либо объект Command.

Кроме того, ADO предоставляет компонент DataSource, в котором сочетаются функциональные возможности объектов Connection, Command и Recordset. Информацию о программировании при помощи объектов ADO см. в «ADO Tutorial (VJ + +)» в интерактивной документации к Microsoft ActiveX Data Objects. Классы ADO определены в пакетах com.ms.wfc.data и com.ms.wfc.data.ui.

Примечание Toolbox в Forms Designer предоставляет только элемент управления DataSource; объекты Connection, Command и Recordset используются только в коде.

После получения набора записей (через объект Recordset или компонент DataSource) его можно связать с WFC-компонентом. WFC поддерживает как простое (simple), так и сложное (complex) связывание данных, описанное в следующей таблице.

Тип связывания

Описание

Сложное Обозначает непосредственное взаимоотношение между набором записей и WFC-компонентом.

Простое

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

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

Дополнительную информацию об ADO см. в разделе «Getting Started with ADO 2.0» интерактивной документзации на Microsoft ActiveX Data Objects.

Простое связывание данных

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

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

Свойства с возможностями связывания

Простое связывание данных в WFC выполняется с помощью компонента DataBinder, который осуществляет и контролирует связывание поля со свойством. Компонент DataBinder связывает свойство, если оно доступно посредством методов, отвечающих следующей структуре:

public <PropertyType>

get<PropertyName>()

public void set<PropertyName>(<PropertyType>)

Обратите внимание, что если в Classlnfo этого компонента свойство помечено как BindableAttribute.YES, то оно значится в окне Properties и на странице проектирования (design page) компонента в DataBinder. (Свойство, которое не обозначено как связываемое (bindable), все же можно связывать программно или вручную, вводя его имя в окне Properties или на странице проектирования.)

Уведомления об изменениях атрибутов

Компонент, имеющий связанное свойство, может сгенерировать событие <propertyName>Changed с целью обозначить изменение значения свойства. Когда это событие происходит, компонент DataBinder помечает данную связку как подозрительную (dirty). Впоследствии, когда пользователь переходит к новой записи или когда программно вызывается метод DataBinder.commitChanges, компонент DataBinder определяет подозрительные связи и обновляет их в наборе записей.

Примечание Если Ваш компонент не предоставляет событие <рrоpertyName>Changed для свойства, связанного посредством компонента DataBinder, то связывание доступно только для чтения, а Ваш компонент будет заблокирован. Чтобы обойти это ограничение, Вы вправе самостоятельно программно управлять связыванием путем чтения-записи набора записей напрямую.

Компонент DataBinder

Компонент DataBinder определен в ADO для выполнения простого связывания данных. Этот компонент создает и контролирует связывание полей в наборе записей и связываемых свойств WFC-компонентов. Подробнее о возможности связывания свойства см. в разделе «Свойства с возможностями связывания».

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

Если компонент со связанным свойством поддерживает уведомление об изменениях этого свойства, то при изменении значения свойства компонент DataBinder помечает эту связь как подозрительную. Набор данных обновляется при переходе пользователя на новую запись или при программном вызове метода DataBinder.commitChanges. Подробности см. в предыдущем разделе «Уведомления об изменениях атрибутов».

Пример

В следующем примере показано, как программно выполнить простое связывание данных с помощью компонента DataBinder. Обратите внимание, что для управления связыванием компонент DataBinder использует массив объектов DataBinding.

import com.ms.wfc.data, *;

import com.ms.wfc.data.ui.*;

import com.ms.wfc.ui.*;

/* Используем компоненты Connection и Recordset

для соединения с .базой данных и получения набора записей. */

Connection с = new Connection();

с. setConnectionSt ring("dsn=myDSN; uid=myUID; pwd=myPWD");

c.open();

Recordset rs = new Recordset();

rs.setActiveConnection(c);

rs.setSource("select * from authors");

rs.open();

/* Создаем компонент DataBinder. Для связи этого

компонента с rs устанавливаем свойство dataSource. */

DataBinder db = new DataBinder();

db.setDataSou rce(rs);

/* Создаем компоненты, свойства которых подлежат связыванию. */

Edit edifl = new Edit();

Edit edit2 = new Edit();

/* Присваиваем свойству связывания компонента DataBinder

массив объектов DataBinding. Этот массив определяет

связывания свойства text каждого компонента Edit

с полями в наборе записей. */

db.setBindings(new DataBinding[] {

new DataBinding(edit1, "text", "firstName"), new DataBinding(edit2, "text", "lastName") } }; }

О свойстве dataSource компонента DataBinder см. в следующем разделе «Сложное связывание данных». Подробнее об использовании компонента DataBinder в Forms Designer см. в главе 4 «Доступ к данным».

Сложное связывание данных

Сложное связывание данных относится к компонентам, которые непосредственно взаимодействуют с набором записей. Компонент со сложным связыванием данных поддерживает свойства dataSource и data Member, описывающие набор записей, с которым он связывается. Обратите внимание, что свойства сложно связываемых компонентов допускают простое связывание посредством компонента DataBinder.

Свойства dataSource и dataMember

Свойство dataSource идентифицирует объект, который реализует интерфейс IDataSource. Объект предоставляет один или несколько наборов записей. Свойство dataMember задает имя набора записей, с которым происходит связывание компонента. Например:

/* Связывание компонента с набором записей "Products",

который предоставлен источником данных ds. */

dbComponent.setDataSource(ds);

dbComponent.setDataMember("Products");

Если свойство dataMember не установлено, выполняетея связывание с набором записей по умолчанию из источника данных. (Можно явно указать на набор записей по умолчанию, присвоив null свойству dataMember.)

/* Связываем компонент с набором записей по умолчанию

из источника данных ds. */ dbComponent.setDataSource(ds);

dbComponent.setDataMember(null); /*

Эта строка не обязательна. */

Заметьте, что компоненты Recordset и DataSource уже реализуют интерфейс IDataSource. Следовательно, можно присвоить один из этих компонентов напрямую свойству dataSource. В этом случае не нужно задавать свойство dataMember:

/* Присвоить свойству dataSource напрямую компонент rs типа Recordset

без установки свойства dataMember. */

dbComponent.setDataSou rce(rs);

Компоненты со сложным связыванием в Visual J++

Visual J++ поддерживает следующие компоненты со сложным связыванием с данными.

Компонент

Описание

DataBinder

 

 

DataGrid

DataNavigator

Связывает поле из набора записей со свойством WFC-компонента. (Хотя компонент DataBinder используется для простого связывания, сам по себе он предоставляет свойства dataSource и dataMember.)

Связывает несколько полей из набора записей и отображает данные в табличном формате.

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

Подробнее об использовании этих компонентов в Forms Designer см. в главе 4 «Доступ к данным».

 


к оглавлению   к 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