• • ScrolBars (Линейки прокрутки) — горизонтальная и вертикальная линейки прокрутки для отображения невидимых колонок и строк. ScrolBars = 0 — нет линеек прокрутки, 1 — горизонvbOFNPathMiistExist — возможность ввода только существующего пути и др
Например, следующий оператор определяет возможность ввода только имени существующего файла и существующего пути
чмя_станд _окна Flags = vbOFNFileMustExist Or \bOFNPathMustExist
Пример программы.
Приводится пример приложения, которое открывает существующую на компьютере базу данных, выдает список таблиц базы данных и выводит выбранную пользователем таблицу в сеточную форму Будет использоваться уже рассмотренная выше база данных B1BLIO MDB Используются элементы управления Data (имя — Datal), Gild (имя — Giidl, командная кнопка (имя — Commandl). комбинированный список (имя — Combol) и Common Dialog (имя — CommonDialog) Форма на этапе разработки имеет вид, показанный на рис 5 9
Рис 5 9
Алгоритм работы приложения следующий При щелчке мыши по командной кнопке “Подключить”, появляется стандартное диалоговое окно для выбора файла базы данных. После выбора файла базы данных программно формируется список таблиц выбранной базы данных, который выводится в комбинированное окно После выбора элемента списка (таблица базы данных) ч
нажатия клавиши “Ввод”, содержимое таблицы выводится на сетку Линейки прокрутки сетки позволяют просматривать все поля сетки
Текст программ'
Option Explicit
Const vbOFNPAlhMUSTEXIST - &H800&
Const vbOFNFILEMUSTEXIST &H1000&
Private Sub Commandl_Click() Combol.Clear
CommonDiaiog.DefaultExt - “MDB” CommonDialog . FileName - “” CommonDialog.Filter =
“Базы данных MS Access(*.MDB)I*.MDB” CommonDialoci. Flags vbOFNPATHMUSTEXIST CommonDiaiog.Action - 1
If CommonDiaiog.FileName “” Then Exit Sub OpenDataBase CommonDialog.FileName End Sub
Public Sub OpenDataBase(ByVal DataFile As String)
Dim I As Integer
Datal.Connect - “”
Datal. Dat-abaseName = DataFile
Datal.Refresh
For I = 1 To Datal.Database.TableDefs.Count - 1
Combol.Addltem Datal.Database.TableDefs(I).Name
Next
Combol.Text = “”
End Sub
Private Sub Combol Keypress(KeyAscii As Integer)
If KeyAscii = 13 Then FillGrid Combol.Text
End If End Sub
Private Sub FillGrid^ByVal TableName As String) Dim I As Integer, CellWidth As Integer Datal.RecordSource = TableName Gridl.Cols = Datal.Database(TableName).Fields.Count
Gridl.Row = 0 For I =, 0 To Datal.Database(TableName).Fields.Count-1 Gridl.Col = I Gridl.Text = Datal.Database(TableName).Fields(I).Name
Gridl.ColWidth(I) = TextWidth(Gridi.Text) + 100 Next
Datdl.Refresh
Datal.Recordset.MoveLast
Gridl.Rows = Datdl.Recordset.RecordCount + 1
Datal.Recordset.Move First
Gridl.Row ^ 0
Do While Not Datdl.Recordset.EOF
Gridl.Row = Gridl.Row +• 1 For I = 0 To Datal.Database(TableName).Fields.Count-1
Gridl.Col = I If IsNull(Datal.Recordset.Fields(I)-Value) Then
Gridl.Text = “” Else Gridl.Text - Datal.Recordset.Fields(I).Value
End If
CellWidth = TextWidth(Gridi.Text) + 100
If CellWidth > Gridi.ColWidth(I) Then
Gridi.ColWidth(I) = CellWidth
End If Next I
Datal.Recordset.MoveNext Loop End Sub
Процедура Commandl_Click обеспечивает очистку комбинированного списка и обращение к стандартному окну “Открыть файл” с заданным расширением (*.MDB) (рис. 5.10). После выбора файла происходит обращение к процедуре Open DataBase, в которую передается имя выбранного файла (CommonDialog.FileName).
Процедура OpenDataBase обеспечивает подключение к базе данных через элемент управления Data (по умолчанию оператором Datal.Connect = “” выбирается Формат MS Access, имя базы данных определяется передаваемым в процедуру значением Datal. DatabaseName = DataFile) и заполнение комбинированною списка именами таблиц (цикл). Из этого списка можно выбрать нужную таблицу (рис. 5.11).
Рис 5 10
После выбора таблицы, процедура обрабогки события Combo l_KeyPress вызывает процедуру FillGrid заполнения сетки, в которую передается имя выбранной таблицы Combol.Text.
В процедуре FillGrid инициализируется множество записей (оператор Datal.RecordSoui-ce = TableName) и определяется количество колонок таблицы (оператор Gridi.Cols = Datal.Database(TableName).Fields.Count), первая строка сетки (Gridl.Row = 0) заполняется названиями колонок выбранной таблицы (операторы
For I = 0 То Datal.Database(TableName).Fields.Coiint-l
Gridl.Col = 1
Gridl.Text = Data].Database^TableName).Fields(I).Name
Gridi.ColWidth(l) = TextWidth(Gridl.Text) + 100
Next I)
В этих операторах для задания ширины каждой колонки используется обращение к функции TextWidth, которая возвращает длину выводимого текста.
Количество записей и соответственно количество строк сетки определяется операторами
Datal. Refresh
Datal .Recordset.Move Last
Gridl.Rows = Datal. Recordset. RecordCount + 1 (первая строка заполнялась названиями полей).
Возврат на первую запись и к первой строке сетки производится операторами Datal. Recordset. MoveFirst и Gridl.Row = 0.
Рис 511
Цикл Do-Loop обеспечивает движение по записям (оператор Data I. Recordset. MoveNext) и выполняется пока функция EOF имеет значение False (т.е. до последней записи). На каждом шаге цикла производится переход к новой строке (Grid I. Row = Grid 1. Row + 1), для которой выполняется цикл (Gridl.Col = I) заполнения всех ее ячеек. Если поле таблицы базы данных не содержит значения (проверяется функцией IsNull(Datal. Recordset. Fields(I). Value)), то соответствующая ячейка сетки заполняется пустой строкой.
Последние операторы обеспечивают согласование ширины ячеек таблицы с максимальной возможной длиной поля записи (операторы
CellWidth = TextWidth(Gridl.Text) + 100 • If CellWidth > Gridl.ColWidth(I) Then
Gridl.ColWidth(I) = CellWidth).
Заполненная сетка показана на рисунке 5.12.
5.4. СОЗДАНИЕ БАЗ ДАННЫХ
Создание новой базы данных может быть выполнено программно или с помощью специальной встроенной подсистемы Data Manager, позволяющей в диалоговом режиме создавать и модифицировать базы данных механизма Jet. Подсистема Data Manager запускается из раскрывающегося меню Add-Ins Главного меню Visual Basic.
Рис 5 12
Рассмотрим использование подсистемы Data Manager на примере создания базы данных по товарам на складе и их поставщикам. Таблицы База данных включает две таблицы (таблица товаров на складе, таблица поставщиков).
Таблица товаров на складе
Номер товара | Номер поставщика | HilJBBUHe roB.tpJ | Стоимость, руб /hit | Количество наСКЛаДе |
1 | 2 | Магнитола | 150000 | 20 |
2 | 2 | Приемник | 200000 | 5 |
3 | 1 | Плеер | 350000 | 15 |
4 | 3 | Кофеварка | 175000 | 34 |
5 | 3 | Элсктрочаини к | 120000 | 57 |
6 | 1 | CD — Плеер | 750000 | 8 |
Таблица поставщиков
Номер постав-шика | Название фирмы | Город | Адрес | Телефон |
1 | ЗАО “Посредник” | Тверь | ул. Космонавтов 12 | 12345 |
2 | “Импульс” | Москва | Пр Мира, 5 | 2334455 |
3 | “Старт” | Серпухов | ул Зеленая 11 | 345678 |
Таблица товаров на складе связана с таблицей поставщиков через поле “Номер поставщика” (внешний ключ для таблицы товаров).
После щелчка мыши по пункту Data Managei раскрывающегося меню Add-Ins Главного меню появляется окно Data Manager, в меню “Файл” нужно выбрать пункт “New DataBase” (создание новой базы данных). Появляется окно для создания файла базы данных (рис. 5.13). По умолчанию задано расширение файла .mbd (файл базы данных Access).
Рис 5 13
После задания имени файла появляется окно проектирования для задания таблиц, полей таблиц, отношений и индексов (рис. 5.14).
Кнопка “New” используется для создания новой таблицы, “Open” — открытие существующей таблицы для ввода данных, “Delete” — удаление таблицы, “Design” — задание параметров полей таблицы, “Attach” — для подключения используемой СУБД (по умолчанию — СУБД Access). “Relations” — построение отношений между таблицами.
Щелчок мыши по кнопке “New” открывает окно проектирования таблицы для ввода имен полей и задания их свойств (рис. 5.15).
Рис 5 14
Рис 515
В поле Field Name вводятся имена полей таблицы и в раскрывающемся киже меню задается их тип (при задании типа полей “Номер товара” и “Номер поставщика” следует выбирать Long Integei, так как эти поля будут использоваться в качестве счетчика для первичного ключа). Стрелки “ > ” и “ < ” обеспечивают соответственно добавление введенных имен полей или их удаление. Кнопки “Up” и “Down” позволяют изменять последовательность полей таблицы. Аналогично может быть введена таблица поставщиков.
Когда таблицы созданы и выбрана одна из них, активизируются кнопки Design (проекгирование таблиц). Open (открытие таблиц для ввода или редактирования информации). Delete (удаление таблиц) и Relations (отношения между таблицами). Проектирование таблиц должно предшествовать заданию отношений между таблицами и вводу данных
При щелчке по кнопке Design открывается окно редактирования (рис 5 16), содержащее список параметров полей и командные кнопки