ActiveX

DataRepeater – особенности создания приложений.

В стандартной поставке VB 6.0 есть один интересный ActiveX Control – DataRepeater. Он предназначен для отображения содержимого баз данных. А интересный он тем, что для работы ему нужен … другой ActiveX Control.

Чтобы разобраться, как он работает, давайте создадим приложение с его использованием. За основу возьмем один из файлов Архива конференций на сайте vbrussian.com (статья писалась специально для этого сайта). Итак:

Шаг 1. Создайте новый проект Standard EXE.

Name=BaseView

Изменим некоторые параметры формы:

Name=frmMain
Caption=" Конференция RU.Visual.Basic"
Height=6465
StartUpPosition=2 (CenterScreen)
Width=9000

Откроем диалоговое окно существующих контролов через меню Project/Components… и выберем Microsoft ADO Data Control и Microsoft DataRepeater Control. Нажмем кнопку Закрыть.

Расположим на форме контрол ADO:

Name=Adodc1
Align=2 (vbAlignBottom)

Подключим наш файл базы данных к этому контролу:

В окне свойств ADO выберите свойство ConnectionString и дважды щелкните на нем мышкой. В окне подключения выберите опцию Use Connection String и нажмите кнопку Build (построить). Под ярлыком "Поставщик услуг" выберите Microsoft Jet 3.51 OLE DB Provider. Перещелкнитесь на ярлык "Подключение" и под пунктом 1. Выберите или введите имя базы данных, укажите путь к нашей базе. В данном примере мы поместим базу данных в той же директории, что и программа (хотя это не обязательно). Обязательно нажмите кнопку внизу "Проверить подключение". В случае ошибок будет выдана соответствующая информация. Нажмите кнопку ОК. Теперь в поле Use Connection String у Вас должна быть запись наподобие следующей: Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\BaseView\VbRU_5_00.mdb (путь к базе данных, естественно, у Вас будет другой). Нажмите кнопку ОК, и данная запись появится в окне свойств.

Перейдем к свойству RecordSource. Зная структуру нашей базы данных (а кто не знает – может посмотреть через Access или VisData), составим SQL-запрос. В нашем случае он выглядит так: SELECT * FROM MsgHeader, MsgBody WHERE MsgHeader.MSGID=MsgBody.MsgID

NB! Мы "жестко" привязали базу данных к конкретному пути. Позже мы исправим это.

Теперь расположим на форме DataRepeater:

Name=DataRepeater1
Caption=" Информация"
CaptionStyle=3 (drpCentered)
DataSource=Adodc1
Height=5655
Left=60
Top=60
Width=8715

На этом построение интерфейса нашего приложения и подключение его к базе данных закончено.

Шаг 2. Займемся "начинкой" для DataRepeater'а. Создайте новый проект ActiveX Control.

Проект: Name=BaseViewControl

UserControl:

Name=BWCtrl
Height=2640
Width=8115

Расположим ряд лейблов на нашем контроле (имена и позиции их даны в следующей таблице):

Name

Caption

Left

Top

Height

Width

Label1(0) От кого 0 0 195 870
Label1(1) Кому 4020 0 195 510
Label1(2) Название 0 180 195 870
Label1(3) Дата 0 360 195 870
lblFrom From 900 0 195 3135
lblTo To 4560 0 195 3435
lblSubject Subject 900 180 195 7095
lblTime Time 900 360 195 7095

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

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

Name=txtMsg
BackColor=&H8000000F&
Font.Name=Courier New 'чисто из эстетических соображений + он компактнее
Font.Size=8
Height=2055
Left=0
Locked=True
MultiLine=True
ScrollBars=2(vertical)
Top=560
Width=7995

NB! В данном случае мы умышленно установили свойство Locked в True, предполагая, что данная база будет использоваться ТОЛЬКО ДЛЯ ЧТЕНИЯ. На будущее, если Вы захотите иметь возможность проводить изменения – просто не устанавливайте этого свойства. Ниже будет показана обработка свойств, как на чтение, так и на запись.

Шаг 3. Займемся кодом для нашего контрола. Нам необходимо написать 5 свойств (по количеству выводимых на экран полей из базы данных).

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

Public Property Get pFrom() As String
    pFrom = lblFrom.Caption
End Property

Public Property Let pFrom(ByVal vNewValue As String)
    lblFrom.Caption = vNewValue
End Property

Откройте контрол и выберите меню Tools/Procedure Attributes… Нажмите кнопку Advanced>>. Затем, выбирая в поле Name имя каждого свойства, пометьте CheckBox'ы с именами Property is data bound и Show in DataBindings collection at design time. Тем самым мы позволим во время разработки подсоединить к данным свойствам поля базы данных. Нажимаем ОК. Теперь можно компилировать наш ActiveX Control.

Шаг 4. Закрываем этот проект и возвращаемся к исходному (т.е. BaseView). Щелкните мышью на контроле DataRepeater1, а затем в окне свойств выберите свойство RepeatedControlName. В выпадающем списке вы увидите перечень всех ActiveX Control'ов на вашем компьютере. Выберите тот, который мы только что создали BaseViewControl.BWCtrl, и он сразу же отобразится  на форме. Теперь перейдем к свойству (Custom). Выберите ярлык RepeaterBindings. В списке Property Name определяем свойство pFrom, в списке DataField – находим ему соответствие – From. После чего нажимаем кнопку Add и наши, связанные между собой свойство контрола и поле в базе данных, появляются в таблице RepeaterBindings. Проделайте те же манипуляции с другими свойствами и нажмите кнопку ОК.

NB! В списке DataField Вы увидите еще два поля: MsgBody.MsgID и MsgHeader.MsgID. Данные два поля служат для связывания таблиц, выводу на экран не подлежат, поэтому просто оставьте их в покое :)

Шаг 5 (последний). Делаем заключительные косметические штрихи.

Переключитесь на Adodc1. Скопируйте значение свойства ConnectionString и внесите его в код (Form_Load). Удалите "жесткую" привязку к файлу. В результате Вы должны получить строку примерно следущего содержания:

Adodc1.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Persist Security Info=False;Data Source=" & _
App.Path & "\VbRU_5_00.mdb;"

Ниже запишите свойство RecordSource:

Adodc1.RecordSource = _
"Select * from MsgHeader, MsgBody WHERE MsgHeader.MSGID=MsgBody.MsgID"

И, наконец, присвоение свойства DataSource у DataRepeater1 к Adodc1

Set DataRepeater1.DataSource = Adodc1

Теперь в окне свойств значения свойств ConnectionString и RecordSource у Adodc1, а так же  DataSource у DataRepeater1 – можно очистить, мы их отслеживаем программным путем.

В событии Adodc1_MoveComplete проследите отслеживание изменения Надписи на Adodc1.

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

NB! При компиляции проекта нашего ActiveX Control'а (BaseViewControl) - происходит его автоматическая регистрация, поэтому при переносе конечного проекта на другой компьютер не забудьте зарегистрировать наш OCX через regsvr32.exe.

Полный листинг

2000 г.

Назад

Hosted by uCoz