скачать рефераты

МЕНЮ


Програмирование на Visual Basic

Private Sub Command2_Ciick() If Not Datal.Recordset.BOF Then Pri - True

Command2.Enabled = True Datal.Recordset.Move Previous

If Not Pr2 Then Pr2 True: Commandl.Enabled = True Else Pri - False

Datal.Recordset.MoveNext Command2.Enabled = False End If End Sub

Private Sub Command3 Click(\

Datal.Recordset.Move First

Pr2 = True

Command2.Enabled False

Commandl.Enabled - True

Pri - False End Sub

Private Sub Command4 Click(

Datal.Recordset.MoveLast

Pri = True

Commandl.Enabled = False

Command2.Enabled = True

Pr2 - False End Sub

Private Sub Command5_ClickI

Datal.Recordset.Delete

Datal.Recordset.MoveNext End Sub Private Sub Command6_Click()

Datal.Recordset.Update End Sub

Private Sub Command7_CiicK ( i

Text4.SetFocus End Sub

Private Sub Form_Load()

Pri = True

Pr2 = True End Sub

Private Sub Text4_KeyPress(KeyAscil As Integer)

Dim FindCriteriy, Poisk As Variant

If KeyAscil = 13 Then

Poisk = Text4.Text

FindCriteriy = “Name =” & “’” & Poisk & “’”

Datal.Recordset.FindFirst FindCriteriy

If Datal.Recordset.NoMatch Then Text4.Text = “Такой записи нет”

End If

End If End Sub

Примеры работы с формой показаны на рис. 5.5 — 5.7. Обратите внимание, что

элемент Data на форме не виден. При попытке удаления записи с

использованием Delete срабатывает защита целостности базы данных (выдается

окно предупреждения на рис. 5.7). База данных включает три связанные

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

другой таблице, приводит к разрушению информации.

В рассмотренных выше примерах база данных, необходимые таблицы и поля

записей определялись на этапе разработки приложения. Однако Visual Basic

позволяет открывать при работе некоторого приложения любую существующую на

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

для анализа всю таблицу или информацию из нее по запросу (такой способ

подключения к базе данных на этапе выполнения приложения называется

динамическим доступом).

[pic]

[pic]

[pic]

Для дальнейшего изложения рассмотрим еще одно понятие—наборы (collections)

Набор — это несколько связанных объектов, для которых определены общие

свойства. Общим для всех наборов является свойство Count, определяющее

число объектов в наборе (аналогично индексации элементов массива индексы

объектов в наборе имеют значения от о до Count — 1). Обращаться к элементам

набора можно или с использованием индекса или по именам.

Например,

Datal.Recordset.Fields(“Name”)

Data 1.Recordset.Fields(0)

В первом случае используется имя “Name” для обращения к нужному объекту

набора Fields. Во втором случае используется индекс для обращения к первому

элементу этого набора.

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

свойств одного объекта через свойства другого (объект /.свойствоА.свойствоБ

— определяет свойствоБ некоторого объекта, адресуемое через свойствоА

объекта!).

Рассмотрим некоторые наборы, объекты набора и их свойства, которые

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

элементом управления Data, и выбора из нее информации.

Свойство Database возвращает ссылку на базу данных, определенную элементом

управления Data. Синтаксис:

Объект. Database.

Свойство Name возвращает имя объекта. Синтаксис:

Объект.^ате. Например, для используемого выше элемента управления Data с

именем Datal выражение Datal. Database. Name определит файл базы данных

C:\VB4\BIBLIO.MBD.

Свойство RecordCount возвращает число записей объекта RecordSet или

TableDef.

TableDefs определяет набор таблиц базы данных (объект TableDef является

одной присоединенной таблицей набора). Например, выражение

Datal.Database.TableDefs.Count определит число таблиц в базе данных.

Выражение Datal. Database.Table Defs(O). Name определит имя первой таблицы

в базе данных.

Fields определяет набор полей присоединенной таблицы базы данных (объект

Field является одним элементом (полем присоединенной таблицы) из набора

полей).

Выражение Datal.Database.TableDefs(0).Fields.Count определит число полей в

первой таблице базы данных.

Выражение Datal. Database. Table Defs(l).Fields(0). Name определит имя

первого поля второй таблицы присоединенной базы данных.

Выражение Datal. Recordset. RecordCount определит число записеи в текущем

множестве записей, к которому получен доступ.

Выражение Datal. Recordset. Fields.Count определит число полей множества

данных (текущее множество записей, к которому получен доступ).

Выражение Datal. Recordset. Fields(2). Name определит имя третьего поля на

множестве данных.

Выражение Datal. Recordset. Fields(2). Value определит значение третьего

поля на множестве данных.

Для отображения информации из присоединяемой на этапе выполнения базы

данных удобно использовать элемент управления Grid (Сетка). Сетка является

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

баз данных. Рассмотрим свойства сетки, необходимые для отображения таблиц

базы данных:

. Cols (Колонки) — число колонок в сетке.

. Rows (Строки) — число строк в сетке.

. GridLines — изображение линий сетки (True — линии сетки изображаются.

False — нет).

. GridLinesWidth — ширина сетки таблицы.

. Col, Row пределяет или устанавливает активную ячейку (номера колонки и

строки). Синтаксис: имя_сетки.Со\ [= номер], 11мя_сетки.Ро^/ [=

номер}. Доступны только на этапе выполнения.

. HighLight определяет подсветку выделенной ячейки сетки (True —

подсветка есть. False — нет).

. FixedCols (Фиксированные колонки) — количество фиксированных колонок

(отсчет от левого края) для отображения заголовков таблицы. Эти

колонки нельзя прокручивать и они выделяются серым фоном.

. FixedRows (Фиксированные строки) — количество фиксированных строк

(отсчет сверху вниз) для отображения заголовков. Эти строки нельзя

прокручивать и они выделяются серым фоном.

• • ScrolBars (Линейки прокрутки) — горизонтальная и вертикальная линейки

прокрутки для отображения невидимых колонок и строк. ScrolBars = 0 — нет

линеек прокрутки, 1 — горизонvbOFNPathMiistExist — возможность ввода только

существующего пути и др

Например, следующий оператор определяет возможность ввода только имени

существующего файла и существующего пути

чмя_станд _окна Flags = vbOFNFileMustExist Or \bOFNPathMustExist

Пример программы.

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

базу данных, выдает список таблиц базы данных и выводит выбранную

пользователем таблицу в сеточную форму Будет использоваться уже

рассмотренная выше база данных B1BLIO MDB Используются элементы управления

Data (имя — Datal), Gild (имя — Giidl, командная кнопка (имя — Commandl).

комбинированный список (имя — Combol) и Common Dialog (имя — CommonDialog)

Форма на этапе разработки имеет вид, показанный на рис 5 9

[pic]

Рис 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).

[pic]

Рис 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. [pic]

Рис 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.

[pic]

Рис 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 |ЗАО |Тверь |ул. |12345 |

| |“Посредник| |Космонавт| |

| |” | |ов 12 | |

|2 |“Импульс” |Москва |Пр Мира, |2334455|

| | | |5 | |

|3 |“Старт” |Серпухов|ул |345678 |

| | | |Зеленая | |

| | | |11 | |

Таблица товаров на складе связана с таблицей поставщиков через поле “Номер

поставщика” (внешний ключ для таблицы товаров).

После щелчка мыши по пункту Data Managei раскрывающегося меню Add-Ins

Главного меню появляется окно Data Manager, в меню “Файл” нужно выбрать

пункт “New DataBase” (создание новой базы данных). Появляется окно для

создания файла базы данных (рис. 5.13). По умолчанию задано расширение

файла .mbd (файл базы данных Access).

[pic]

Рис 5 13

После задания имени файла появляется окно проектирования для задания

таблиц, полей таблиц, отношений и индексов (рис. 5.14).

Кнопка “New” используется для создания новой таблицы, “Open” — открытие

существующей таблицы для ввода данных, “Delete” — удаление таблицы,

“Design” — задание параметров полей таблицы, “Attach” — для подключения

используемой СУБД (по умолчанию — СУБД Access). “Relations” — построение

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

[pic]

Щелчок мыши по кнопке “New” открывает окно проектирования таблицы для ввода

имен полей и задания их свойств (рис. 5.15).

Рис 5 14

[pic]

Рис 515

В поле Field Name вводятся имена полей таблицы и в раскрывающемся киже меню

задается их тип (при задании типа полей “Номер товара” и “Номер поставщика”

следует выбирать Long Integei, так как эти поля будут использоваться в

качестве счетчика для первичного ключа). Стрелки “ > ” и “ < ” обеспечивают

соответственно добавление введенных имен полей или их удаление. Кнопки “Up”

и “Down” позволяют изменять последовательность полей таблицы. Аналогично

может быть введена таблица поставщиков.

Когда таблицы созданы и выбрана одна из них, активизируются кнопки Design

(проекгирование таблиц). Open (открытие таблиц для ввода или редактирования

информации). Delete (удаление таблиц) и Relations (отношения между

таблицами). Проектирование таблиц должно предшествовать заданию отношений

между таблицами и вводу данных

При щелчке по кнопке Design открывается окно редактирования (рис 5 16),

содержащее список параметров полей и командные кнопки

[pic]

Рис 5 16

Для выбранного поля таблицы (на рисунке выбрано поле “номер поставщика”)

при щелчке по кнопке “Edit” открывается окно редактирования параметров (рис

5 17). На рисунке для поля таблицы “Номер поставщика” задан параметр

“Counter” (Счетчик) Это поле является ключевым и должно иметь уникальные

значения При задании параметра “Counter”, СУБД автоматически поддерживает

уникальность этого поля, увеличивая значение счетчика при вводе новой

записи Другие параметры имеют следующий смысл DefaultValue — значение по

умолчанию, DataUpdatable — возможность изменения. Required — обязательность

ввода, AllowZeioLenght — возможность задания строки нулевой длины,

ValidationText и ValidationRule — правила корректности, Fixed или Variable

Length — фиксированной или переменной длины.

[pic]

Рис 5 17

[pic]

Кнопка “Indexes..” позволяет перейти к созданию и редактированию индексов

таблицы (рис 5 18) Для создания или

добавления нового индекса нужно щелкнуть по кнопке “Add ” открывается окно

для создания индекса (рис. 5.19).

Рис 5 18

В окне нужно задать имя индекса. Затем выбрать поля таблицы (“Fields in

tdble”), которые включаются в индекс. Выбранные поля кнопками Add(ASC) или

Add(DEC) (в зависимости от того, упорядочиваются записи по возрастанию или

убыванию) Добавляются в индексный список (“Fields in index”). Кнопка Remove

позволяет удалить поле индекса Индикаторы в окне позволяют также определить

индекс как первичный (Plimary Index) [pic]

или внешний (Foieign Index), уникальный (Unique) или кластерный

(Clustered). Соответствующий требованиям индекс сохраняется кнопкой ОК и

отображается в окне Indexes (рис. 5.18) Для удаления индекса используется

кнопка Remove

Кнопка “Keys. .” окна Table Editor позволяет перейти к созданию ключей

таблицы (рис. 5 20). В раскрывающемся списке полей таблицы выбирается поле

“Номер поставщика”, которое будет использоваться в качестве первичного

ключа. Для таблицы “Товары” первичным ключом определим поле “Номер товара”.

[pic]

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.