Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование элементов управления Data и gridСодержание книги
Поиск на нашем сайте
Элемент управления Data служит для установления связи между базой данных и другими элементами управления, используемыми.зля отображения данных из базы данных. Поддерживается связь с базами данных Access, FoxPro, dBase, Paradox (список поддерживаемых связей определяется версией Visual Basic). Один элемент управления Data всегда обеспечивает доступ только к одной записи в данный момент (такая запись называется текущей (current)), позволяя отображать содержимое текущей записи на форме. Кроме стандартных свойств, элемент управления Data обладает следующими специфическими свойствами: · BOFAction (Beginning Of File — начало файла), EOFAction (End Of File — конец файла) возвращает или устанавливает значение, указывающее действие при значении BOF или EOF, равном True. Свойство BOF равно True, если указатель текущей позиции в файле расположен до какой-либо записи (обычно возникает при удалении первой записи). Свойство EOF равно True, если указатель текущей позиции в файле расположен за существующими данными. Если любое из этих свойств равно True, то текущая запись имеет недопустимый номер. Если оба свойства равны True, то в файле не содержится данных. Синтаксис: объект. BOFAction [= значение} объект. EOFAction f= значение} BOFAction =1 — переход к первой записи, если BOF = True. EOFAction =1 — переход к последней записи, если EOF = True. · Connect (Подключение) определяет тип (формат данных) используемой базы данных (Access, FoxPro, dBase, Paradox и др.).
Элемент Data автоматически инициализируется при запуске приложения. Если свойства Connect, DatabaseName, Options, RecordSource, RecordSource, Exclusive, ReadOnly и RecordsetType установлены или, если они устанавливаются на этапе выполнения при использовании метода Refresh, механизм баз данных Jet пытается создавать новый объект Recordset, основанный на этих свойствах. Этот объект Recordset доступен через свойства элемента управление Data. Важно: ссылаться на свойства объекта Recordset, создаваемого элементом управления Data, можно только используя свойство Recordset самого элемента Data. Синтаксис такого определения свойства следующий: о^бетс/и/.свойствоА.свойствоБ определяет свойствоБ некоторого объекта, адресуемое через свойствоА объекта!. Объект Recordset представляет запись в основной таблице или запись, которая является результатом выполнения запроса. Когда используются объекты доступа к данным, то это происходит с использованием объектов Recordset. Таблица. Recordset есть представление основной таблицы. Dynaset-тип.Recordset — динамический набор записей. Кадр. Recordset — статическая копия множества записей (может содержать поля из одной или более таблиц в базе данных, но не может модифицироваться). · RecordsetType определяет тип набора записей, который можно использовать для доступа к данным. Существует три типа наборов записей: таблица. Dynaset (динамическое множество) или кадр (моментальный снимок). Соответственно свойство принимает значения 0, 1,2. При использовании Data для доступа к базе данных по умолчанию создается набор записей динамического типа, который является набором указателей на информацию. Динамический набор является очень гибким, но имеет ряд ограничений при использовании (в частности не поддерживает созданные индексы, что не позволяет динамически изменять порядок представления записей в наборе). При задании типа набора “Таблица” возможен доступ только к одной полной таблице с использованием индекса для упорядочения, но обновление данных отображается медленно. При задании типа набора “Кадр” работа выполняется с копией данных. Достоинством является быстрота, но требует ресурсов памяти и невозможно обновление данных. · RecordSource (источник данных) определяет, откуда извлечь данные. Это может быть имя таблицы либо конкретное логическое представление данных (запрос). Для объекта Data при работе с базами данных существует понятие базовых элементов управления — непосредственно связаны с единственным полем в наборе записей и не требуют дополнительного определения, кроме имени поля, задаваемого для некоторого свойства элемента управления. Например, для текстового окна (TextBox) присвоение свойства Text может содержать значение поля базы данных (тип данных: строка символов, арифметический тип, дата) и определяется заданием свойств DataSource (указывается имя объекта Data) и DataField (указывается имя поля таблицы, установленной свойством Data-Source объекта Data). Окна изображений и рисунков можно использовать для показа картинок, хранящихся в базе данных, флажок — для отображения булевых значений. В комплекте Visual Basic имеется база данных B1BLIO.MDB, содержащая библиографические сведения по Visual Basic. Она состоит из трех таблиц. Таблица Авторы (Authors) с полями идентификационный номер (Au_lD) и фамилия автора (Authors). Таблица издательств (Pablishers) с полями идентификационный номер (PubID), название (Name), компания владелец (Company Name), адрес (Address), город (City), штат (State), код (Zip), теле-tboH (Telephone). Таблица Названия книг (Titles) содержит список опубликованных книг: название (Title), год публикации (Year published) и ссылки на первые две таблицы. Используем элемент управления Data для доступа к этой базе данных. Создадим форму с элементом управления Data, с тремя метками и с тремя текстовыми окнами для вывода соответствующей информации из базы данных B1BLIO.MDB. Свойствам объекта Data присваиваются следующие значения: DataBaseName = C:\VB4\BIBLIO.MBD RecordSourse = Pablishers Connect = Access. Для подключения базы данных (задание значения свойства DataBaseName = C:\VB4\BIBLIO.MBD) используется специальное окно. Свойствам объекта Textl (текстовое окно с заголовком “Издательство”) присваиваются значения: DataSourse = Datal (имя элемента Data — Datal), DataField = Name (Name — имя поля таблицы издательств). * Свойствам объекта Text2 (текстовое окно с заголовком “Город”) присваиваются значения: DataSourse = Datal (имя элемента Data — Datal), DataField = City (City — имя поля таблицы издательств). Свойствам объекта Text3 (текстовое окно с заголовком “Телефон”) присваиваются значения: DataSourse = Datal (имя элемента Data — Datal), DataField = Telephone (Telephone — имя поля таблицы издательств). Созданное приложение позволяет просматривать базу данных, получая из нее указанную информацию. Элемент управления Data обеспечивает движение по записям (последовательное Движение к последующей записи или к предыдущей записи при щелчке мышью по правой или левой стрелке объекта и переход “ первой или последней записи при щелчке мыши по левой или правой кнопке окна). Аналогичные действия можно проделать без использования мыши, а программно. Для этого применяются методы объекта Data. Такими методами являются: · Refresh — открытие и закрытие базы данных;
Рис 53 · Move Previous — текущей становится предыдущая запись из множества записей;
поиска; · FindPrevious найти предыдущую запись для заданного условия поиска. Последние четыре метода требуют задания критерия поиска записи. В общем случае критерием является строка символов, которая может включать логические выражения. Переменной типа строки символов, являющейся критерием, присваивается значение Следующие примеры показывают задание критериев: Dim Criteriy As String Criterly = “State = ' NY ' “ ' значение поля State (Штат) таблицы должно быть равно NY C riteriy = “Title > ‘A’ And Title < 'В' “ ' первой буквой поля Title таблицы должна быть буква А Criteriy = “Name =” & “'” & Poisk & “'” ' значение поля Name таблицы должно быть равно значению переменной Poisk Следует обратить внимание на то, что задаваемое значение в условиях берется в апострофы “ символ — '”. В последнем примере эти апострофы специально задаются. При использовании методов для поиска записей используется также свойство NoMath, применяемое для таких объектов, как таблица, динамическое множество, кадр или Recordset. Синтаксис использования свойства следующий: Объект. NoMath Свойство принимает значение True (требуемая запись не найдена) или False (требуемая запись найдена). Если поиск оказался безрезультатным, то свойство имеет значение True и положение текущей записи (в момент применения одного из указанных выше методов поиска) не меняется. Как было сказано выше, ссылаться на свойства объекта Recordset, создаваемого элементом управления Data, можно только используя свойство Recordset самого элемента Data (синтаксис см. выше). Таким образом, при использовании перечисленных методов вставляется свойство Recoidset элемента Data. Например, Datal.Recordset.MoveLast Datal.Recordset.MoveNext Datal.Recordset.FindFirst FindCriterly Пример программы. Модифицируем приведенную выше форму, добавив командные кнопки и текстовую строку.Свойству Visible для элемента управления Data присвоим значение False (т е на этапе выполнения окно Data не видимо и его нельзя использовать для диалогового доступа к базе данных) Функции движения по записям базы данных, действии с записями, поиска программируются процедурами обработки событии соответствующих командных кнопок Критерии поиска требуемой записи вводится в текстовом окне, которое активизируется командной кнопкой “Поиск” (отрицательный результат поиска также выводится в этом текстовом окне). В процедурах используются выше рассмотренные свойства и методы
Процедуры обработки событий: Option Explicit Dim Pri, Pr2 As Boolean Private Sub Commandl Click() If Not Datal.Recordset.EOF Then Pr2 = True Commandl.Enabled = True Datal.Recordset.MoveNext If Not Pri Then Pri = True: Command2.Enabled = True Else Pr2 = False Datal.Recordset.Move Previous Commandl.Enabled = False End If End Sub 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_Click I 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 Обратите внимание, что элемент Data на форме не виден. При попытке удаления записи с использованием Delete срабатывает защита целостности базы данных. База данных включает три связанные таблицы. Удаления записи из одной таблицы, на которую ссылается запись в другой таблице, приводит к разрушению информации. В рассмотренных выше примерах база данных, необходимые таблицы и поля записей определялись на этапе разработки приложения. Однако Visual Basic позволяет открывать при работе некоторого приложения любую существующую на компьютере базу данных, определять состав ее таблиц и записей и выводить для анализа всю таблицу или информацию из нее по запросу (такой способ подключения к базе данных на этапе выполнения приложения называется динамическим доступом). Для дальнейшего изложения рассмотрим еще одно понятие— наборы (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 (Колонки) — число колонок в сетке.
• • ScrolBars (Линейки прокрутки) — горизонтальная и вертикальная линейки прокрутки для отображения невидимых колонок и строк. ScrolBars = 0 — нет линеек прокрутки, 1 — горизонvbOFNPathMiistExist — возможность ввода только существующего пути и др Например, следующий оператор определяет возможность ввода только имени существующего файла и существующего пути чмя_станд _окна Flags = vbOFNFileMustExist Or \bOFNPathMustExist Пример программы. Приводится пример приложения, которое открывает существующую на компьютере базу данных, выдает список таблиц базы данных и выводит выбранную пользователем таблицу в сеточную форму Будет использоваться уже рассмотренная выше база данных B1BLIO MDB Используются элементы управления Data (имя — Datal), Gild (имя — Giidl, командная кнопка (имя — Commandl). комбинированный список (имя — Combol) и Common Dialog (имя — CommonDialog) Алгоритм работы приложения следующий При щелчке мыши по командной кнопке “Подключить”, появляется стандартное диалоговое окно для выбора файла базы данных. После выбора файла базы данных программно формируется список таблиц выбранной базы данных, который выводится в комбинированное окно После выбора элемента списка (таблица базы данных) ч нажатия клавиши “Ввод”, содержимое таблицы выводится на сетку Линейки прокрутки сетки позволяют просматривать все поля сетки Текст программ' 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). После выбора файла происходит обращение к процедуре Open DataBase, в которую передается имя выбранного файла (CommonDialog.FileName). Процедура OpenDataBase обеспечивает подключение к базе данных через элемент управления Data (по умолчанию оператором Datal.Connect = “” выбирается Формат MS Access, имя базы данных определяется передаваемым в процедуру значением Datal. DatabaseName = DataFile) и заполнение комбинированною списка именами таблиц (цикл). Из этого списка можно выбрать нужную таблицу После выбора таблицы, процедура обрабогки события 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. Цикл 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) СОЗДАНИЕ БАЗ ДАННЫХ Создание новой базы данных может быть выполнено программно или с помощью специальной встроенной подсистемы Data Manager, позволяющей в диалоговом режиме создавать и модифицировать базы данных механизма Jet. Подсистема Data Manager запускается из раскрывающегося меню Add-Ins Главного меню Visual Basic. Рассмотрим использование подсистемы Data Manager на примере создания базы данных по товарам на складе и их поставщикам. Таблицы База данных включает две таблицы (таблица товаров на складе, таблица поставщиков). Таблица товаров на складе
Таблица поставщиков
Таблица товаров на складе связана с таблицей поставщиков через поле “Номер поставщика” (внешний ключ для таблицы товаров). После щелчка мыши по пункту Data Managei раскрывающегося меню Add-Ins Главного меню появляется окно Data Manager, в меню “Файл” нужно выбрать пункт “New DataBase” (создание новой базы данных). Появляется окно для создания файла базы данных. По умолчанию задано расширение файла.mbd (файл базы данных Access). После задания имени файла появляется окно проектирования для задания таблиц, полей таблиц, отношений и индексов. Кнопка “New” используется для создания новой таблицы, “Open” — открытие существующей таблицы для ввода данных, “Delete” — удаление таблицы, “Design” — задание параметров полей таблицы, “Attach” — для подключения используемой СУБД (по умолчанию — СУБД Access). “Relations” — построение отношений между таблицами. Щелчок мыши по кнопке “New” открывает окно проектирования таблицы для ввода имен полей и задания их свойств. В поле Field Name вводятся имена полей таблицы и в раскрывающемся киже меню задается их тип (при задании типа полей “Номер товара” и “Номер поставщика” следует выбирать Long Integei, так как эти поля будут использоваться в качестве счетчика для первичного ключа). Стрелки “ > ” и “ < ” обеспечивают соответственно добавление введенных имен полей или их удаление. Кнопки “Up” и “Down” позволяют изменять последовательность полей таблицы. Аналогично может быть введена таблица поставщиков. Когда таблицы созданы и выбрана одна из них, активизируются кнопки Design (проекгирование таблиц). Open (открытие таблиц для ввода или редактирования информации). Delete (удаление таблиц) и Relations (отношения между таблицами). Проектирование таблиц должно предшествовать заданию отношений между таблицами и вводу данных При щелчке по кнопке Design открывается окно редактирования, содержащее список параметров полей и командные кнопки Для выбранного поля таблицы при щелчке по кнопке “Edit” открывается окно редактирования параметров. На рисунке для поля таблицы “Номер поставщика” задан параметр “Counter” (Счетчик) Это поле является ключевым и должно иметь уникальные значения При задании параметра “Counter”, СУБД автоматически поддерживает уникальность этого поля, увеличивая значение счетчика при вводе новой записи Другие параметры имеют следующий смысл DefaultValue — значение по умолчанию, DataUpdatable — возможность изменения. Required — обязательность ввода, AllowZeioLenght — возможность задания строки нулевой длины, ValidationText и ValidationRule — правила корректности, Fixed или Variable Length — фиксированной или переменной длины. Кнопка “Indexes..” позволяет перейти к созданию и редактированию индексов таблицы Для создания или добавления нового индекса нужно щелкнуть по кнопке “Add ” открывается окно для создания индекса В окне нужно задать имя индекса. Затем выбрать поля таблицы (“Fields in tdble”), которые включаются в индекс. Выбранные поля кнопками Add(ASC) или Add(DEC) (в зависимости от того, упорядочиваются записи по возрастанию или убыванию) Добавляются в индексный список (“Fields in index”). Кнопка Remove позволяет удалить поле индекса Индикаторы в окне позволяют также определить индекс как первичный (Plimary Index) или внешний (Foieign Index), уникальный (Unique) или кластерный (Clustered). Соответствующий требованиям индекс сохраняется кнопкой ОК и отображается в окне Indexes.Для удаления индекса используется кнопка Remove Кнопка “Keys..” окна Table Editor позволяет перейти к созданию ключей таблицы. В раскрывающемся списке полей таблицы выбирается поле “Номер поставщика”, которое будет использоваться в качестве первичного ключа. Для таблицы “Товары” первичным ключом определим поле “Номер товара”. Кнопка “Relations...” окна Table Editor позволяет перейти к созданию отношений между таблицами. В окне Relations” нужно выбрать из раскрывающегося списка первичную таблицу (Prymary Table) и связанную таблицу (Related Table) и установить связь между ними В рассматриваемом примере первичной таблицей является таблица поставщиков, поле “Номер поставщика” которой используется в качестве внешнего ключа для таблицы “Товары”. Ключевое поле первичной таблицы (Номер поставщика) оюбражается на поле окна Поле для связи связанной таблицы выбирается в раскрывающемся списке (“Select Matching Fields). Связующие поля отображаются в окне. Вид отношения “один ко многим” (один поставщик может поставлять различные товары) задается переключателем “Many”. Переключатель “One” определяет отношение “один к одному”. Флажок “Enfoice Refeiential Integrity” позволяет установить, нужно ли обеспечивать целостность отношении (средства СУБД автоматически проверяют целостность базы данных при модификации информации) Кнопка “Add” вводит заданное отношение в базу данных. Таблицы и связи между ними созданы и отображаются в списке таблиц базы данных. При выборе таблицы становятся доступны кнопки “Open”, “Design”, “Delete”, “Relations” Кнопка “Open” открывает выбранную таблицу для ввода или редактирования данных. Данные приведенных выше таблиц примера могут быть введены в базу данных. К недостаткам подсистемы Data Manager можно отнести ограниченные возможности по заданию отношений между таблицами. Подсистема позволяет задать отношения только для ключевых полей “Counter” (Счетчик) и не позволяет задать составных ключей. Базы данных сложной структуры целесообразней создавать непосредственно в СУБВ Access, которая имеет развитые и очень удобные средства проектирования баз данных. Приведенная база данных может быть создана и программно. Приводится текст программы для создания таблиц примера. задания ключей, индексов и отношений между таблицами. Текст программы: • Global Const DB_LANG_GENERAL = “;LANGID-Ox0809;CP=1252;COUNTRY=0’ Global Const DB_BOOLEAN = 1 Global Const DB_BYTE = 2 Global Const DB_INTEGER = 3 Global Const DB_LONG = 4 Global Const DB_CURRENCY = 5 Global Const DB_SINGLE = 6 Global Const DB_DOUBLE = 7 Global Const DB_DATE = 8 Global Const DB_TEXT = 10 Global Const.DB_LONGBINARY =11 Global Const DB_MEMO = 12 Private Sub Form_Click() CreateNewDB End Sub Sub CreateNewDB () Dim Db As Database, Dbname As String Dbname = “C:\VB\PRIMER.MDB” If Dir(Dbname) <> “” Then Kill Dbname Set Db = CreateDatabase(Dbname, DB_LANG_GENERAL) NewProduktTabie Db NewProviderTable Db Relations Db MsgBox “Ваша база данных, “ & UCase(Dbname) & “, создана” End Sub Sub NewProduktTabie(D As Database) Dim Td As New TableDef, Fld() As New Field Dim Idx() As New Index, I As Integer ReDim Fld(l To 5), Idx(l To 2) Td.Name = “Товары” ' Имя таблицы. ‘ Создание полей таблицы. Fid(I).Attributes = DB_AUTOINCRFIELD For I = 1 To 5 ‘ Задание свойств полей таблицы. Fld(I).Name = Choose(I, “Номер_товара”, “Номер_поставщика”, “Название_товара”, “Стоимость”, “Количество”) Fid(I).Type = Choose (I, DB_LONG, DB_LONG, DB_TEXT, DB_CURRENCY, DB INTEGER) Fld(I).Size = Choose(I, 4, 4, 30, 4, 4) Td.Fields.Append Fid(I) Next I ‘ Создание индексов. Idx(l).Name = “PrimaryKey” Idx (1). Fields = “Номера/товара” • Idx(l).Primary = True Idx(1).Unique = True • Idx(2).Name = “Name” Idx(2).Fields = “Название_товара” For I = 1 To 2 Td.Indexes.Append Idx(I) Next I D.TableDefs.Append Td ‘ Создание таблицы. End Sub Sub NewProviderTable(D As Database) Dim Td As New TableDef, Fid() As New Field Dim Idx() As New Index, I As Integer ReDim Fld(l To 5), Idx(l To 2) Td.Name = “Поставщики” ' Имя таблицы. ‘ Создание полей таблицы. For I = 1 То 5 'Задание свойств полей таблицы. Fld(I).Name = Choosefl, “Номер_поставшика”, “Название_фирмы”, “Город”, “Адрес”, “Телефон”) Fld(I).Type = Choose(I, DB_LONG, DB_TEXT, DB_TEXT, DB_TEXT, DB_TEXT) Fld(I).Size = Choose(I, 4, 30, 15, 30, 10) Next I Fid(l).Attributes = DB_AUTOINCRFIELD For I = 1 To 5 Td.Fields.Append Fld(I) Next I ‘ Создание инде^ов. Idx(l).Name == “PrimaryKey” Idx(1).Fields = “Номер_поставщика” Idx(1).Primary = True Idx(1).Unique = True Idx(2).Name = “Fi rmNarne” Idx(2).Fields = “Название_фирмы” For I = 1 To 2 Td.Indexes.Append Idx(I) Next I D.TableDefs.Append Td ‘ Создание таблицы. End Sub Public Sub Relations (D As Database) Dim MyField As Field, MyRelation As Relation Set MyRelation = D.CreateRelation(“MyRelation”) MyRelation.Table = “Поставщики” MyRelation.ForeignTable = “Товары” Set MyField = MyRelation.CreateField(“Номер_поставщика”) MyField.ForeignName = “Номер_поставщика” MyRelation.Fields.Append MyField D.Relations.Append MyRelation End Sub Константы в программе скопированы из входящего в состав Visual Basic файла DATACONS.TXT. Обращение к процедуре CreateNewDB создания базы данных помещено в процедуру обработки события Form_Click, из которой производится обращение к процедуре NewProduktTable, создающей таблицу товаров на складе, к процедуре NewProviderTable, создающей таблицу поставщиков товаров и к процедуре Relations, создающей отношения между таблицами. Следует обратить внимание на удобство использования встроенной функции Choose для задания свойств полей таблиц. ИСПОЛЬЗОВАНИЕ ЯЗЫКА SQL ДЛЯ
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 284; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.103.33 (0.011 с.) |