|
Програмирование на Visual Basicпервого поля второй таблицы присоединенной базы данных. Выражение 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] Кнопка “Relations...” окна Table Editor позволяет перейти к созданию отношений между таблицами. В окне Relations” (рис. 5.21) нужно выбрать из раскрывающегося списка первичную таблицу (Prymary Table) и связанную таблицу (Related Table) и установить связь между ними В рассматриваемом примере первичной таблицей является таблица поставщиков, поле “Номер поставщика” которой используется в качестве внешнего ключа для таблицы “Товары”. Ключевое поле первичной таблицы (Номер поставщика) оюбражается на поле окна Поле для связи связанной таблицы выбирается в раскрывающемся списке (“Select Matching Fields). Связующие поля отображаются в окне. [pic] Вид отношения “один ко многим” (один поставщик может поставлять различные товары) задается переключателем “Many”. Переключатель “One” определяет отношение “один к одному”. Флажок “Enfoice Refeiential Integrity” позволяет установить, нужно ли обеспечивать целостность отношении (средства СУБД автоматически проверяют целостность базы данных при модификации информации) Кнопка “Add” вводит заданное отношение в базу данных. Таблицы и связи между ними созданы и отображаются в списке таблиц базы данных (рис. 5 22). При выборе таблицы становятся доступны кнопки “Open”, “Design”, “Delete”, “Relations” Кнопка “Open” открывает выбранную таблицу для ввода или редактирования данных (рис. 5.23). Данные приведенных выше таблиц примера могут быть введены в базу данных. [pic] Рис. 5.22 [pic] Рис. 5.23 К недостаткам подсистемы 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 для задания свойств полей таблиц. 5.5. ИСПОЛЬЗОВАНИЕ ЯЗЫКА SQL ДЛЯ СОЗДАНИЯ И РАБОТЫ С БАЗАМИ ДАННБ1Х Язык структурированных запросов (SQL) является стандартным средством для работы с базами данных и может использоваться как для интерактивной работы с базами данных, так и включаться в языки программирования. Применительно к Visual Basic SQL позволяет: . создавать, модифицировать или удалять таблицы в базе данных Access; . создавать или удалять индексы для таблиц в базе данных Access; . вставлять, удалять или модифицировать записи таблиц; . получать сводную информацию о данных в таблицах (число записей, суммы, средние, минимальные, максимальные значения и др.); . поиск данных в одной или более таблицах по запросу. Язык SQL используется совместно с элементом управления DATA или с объектами доступа к данным (DAO) механизма Jet. Объект Database содержит объекты доступа к данным TableDef, определяющие таблицы, объекты Field, определяющие поля, объекты Index, определяющие индексы и др. В ранее рассмотренных параграфах данной главы через элемент управления Data подключалась одна таблица (свойству Re-cordSource элемента управления Data присваивалось значение имени таблицы). При использовании языка SQL запрос вводится в свойство RecordSource. В случае использования элемента управления Data, это позволяет работать с информацией из нескольких таблиц. Следует отметить, что каждое выполнение оператора запроса изменяет набор записеи. В связи с этим необходимо применять метод Refresh для элемента управления Data после каждого присвоения SQL-запроса свойству RecordSource. Рассмотрим операторы и использование языка SQL для работы с базами данных. Для поиска информации в базе данных используется оператор SELECT. Синтаксис оператора следующий: SELECT список имен полей FROM список имен таблиц где SELECT, FROM — ключевые слова; список имен полей — список имен полей, которые выбираются из одной или нескольких 1аблиц. Для выбора всех полей можно использовать символ “*”, вместо перечисления имен всех полей. Если имя поля таблицы содержит пробел, то это имя должно заключаться в квадратные скобки; список имен таблиц — список имен таблиц, из которых производится выбор. Имена полей и таблиц нечувствительны к регистру клавиатуры. ' Примеры: SELECT * FROM Titles — выбор всех полей из таблицы Titles рассмотренной выше базы данных по библиографии по Visual Basic. SELECT Title, /Year Published/ FROM Titles — выбор полей заголовков (Title) и года издания (Year Published) из таблицы Titles. Имя поля года издания берется в квадратные скобки (имеет пробел). Для поиска информации, соответствующей некоторому условию, используется дополнение к оператору SELECT — WHERE, которое имеет следующий синтаксис: SELECT список имен полей FROM список имен таблиц WHERE условие где условие определяет критерии поиска информации. В условии используются имена полей, операции сравнения (<> , >=, <>) и специальные операции сравнения IN, LIKE, BETWEN. Эти операции могут объединяться с помощью логических операций и задавать сложные условия поиска информации. Примеры: SELECT /Year Published/, Title FROM Titles WHERE /Year Published/ > 1991 определяет выбор названий книг, год выпуска которых позже 1991. SELECT I Last Name], /First Name/ FROM Employees WHERE /Last Name/ = ‘King’ определяет выбор полей имен и фамилий из таблицы служащих, фамилии которые совпадают с фамилией King. Операция IN сравнивает содержимое поля со списком значений, определяющих критерий поиска информации. Примеры: SELECT /Year Published/, Title FROM Titles WHERE /Year Published/ IN (1995, 1996) определяет выбор книг, опубликованных в 1995 и в 1996 гг. SELECT /Last Name/, /First Name/, City FROM Employees WHERE City In (‘Interlaken ', ‘New York’, ‘Frankfurt’) определяет выбор служащих, живущих в городах Interlaken, New York или Frankfurt. Операция LIKE сравнивает содержимое поля со значением образца. Для записи образца используются строковые константы, символы шаблона и списки диапазона символов. Символы шаблона следующие: *, ?, #. * — соответствует цепочке символов, ? — соответствует одному символу, # — соответствует одной цифре. Примеры: R* — возможные результаты поиска right, Roza. А? — возможные результаты поиска and, any. 12345# — возможные результаты поиска 123455. 123457. Список диапазона заключается в квадратные скобки и первый и “последний символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем порядке. Примеры: SELECT /Last Name/, /First Name/ FROM Employees WHERE /Last Name/ Like ‘S*’ определяет выбор служащих, фамилии которых начинаются с буквы S. SELECT Author FROM Authors WHERE Author LIKE fA-K/ определяет выбор авторов, фамилии которых начинаются с букв от А .до К. SELECT Title FROM Titles WHERE Title LIKE “database*” AND [Year Publisher/ = 1996 определяет выбор названий, в которых присутствует слово “database” и выпущенных в 1996 году. Операция BETWEEN проверяет принадлежность значения поля диапазону значении и является включающим значением (выбираются записи, содержащие поле со значением, равным границе диапазона). Границы значений объединяются операцией AND. Примеры: SELECT lOnler IDI, I Order Dale/ FROM Orders WHERE /Order Date/ Between # I-1-94” And #6-30-94# определяет выбор документов первой половины 1994 г. С SELECT /Last Name/, Salary FROM Employees ' WHERE [Last Name] Between ‘Lon’ And To/’ определяет выбор зарплаты служащих, начальные буквы фамилий которых, расположенные в алфавитном порядке, находятся в диапазоне 'Lon' и 'ТоГ. Для определения порядка, в котором представляются результаты поиска записей, используется дополнение ORDER BY, синтаксис которого следующий: SELECT список имен полей FROM список имен таблиц WHERE условие ORDER BY имя поля [DESC] [имя поля [DESC]] где имя поля — поле, по которому производится упорядочение. Опция DESC устанавливает обратный порядок сортировки. Упорядочение может вестись по нескольким полям (сортировка, например, по фамилии, а затем по имени) Пример: SELECT Title FROM Titles WHERE Title LIKE “*database*” AND [Year Publisher] = 1996 ORDER BY Title определяет выбор названий книг, в которых присутствует слово “database” и выпущенных в 1996 г., и упорядочивает названия в алфавитном порядке. При работе с несколькими таблицами, каждое из рассмотренных дополнений условий выбора может быть применено для любой из таблиц. В общем случае при формировании запроса для нескольких таблиц указывается таблица, в которой ведется поиск полей и связь между таблицами. Синтаксис запроса для нескольких таблиц следующий: SELECT список имен полей FROM список имен таблиц, список связей где список связей определяет, как таблицы в списке имен таблиц связаны между собой. В частности для задания связи используется рассмотренное дополнение WHERE (WHERE имя_табмщы1.1шя_поля1 = 1шя_таблицы2.имя_поля2). Примеры: . SELECT Tities.Title, Publishers. [Company Name} FROM Titles. Publishers WHERE Titles. Pubid = Publishers. Pubid определяет выбор названий книг (Title) из таблицы названий (Titles) и названий издательств (Company Name) из таблицы издательств (Publishers). Дополнение WHERE определяет связь между таблицами (выбирается название книги и номер издательства из таблицы Titles, по номеру издательства в таблице издательств Publishers находится название издательства). SELECT Tities.Title. Authors. Author, Publishers. [Company Name] FROM Titles, Authors. Publishers WHERE Titles.auJd = Authors. au_id AND Tilles.pubid = Publishers. Pubid определяет выбор из всех трех таблиц полной информации по книге (название, автор, издательство). В целом, язык SQL имеет широкий набор средств для организации различных запросов, о которых можно более подробно узнать из встроенной системы помощи Visual Basic. Пример программы. Модернизируем приведенную выше программу для просмотра таблиц баз данных для ввода SQL-запросов и отображения полученной информации. Добавим на форму текстовое окно для ввода SQL-запроса (нажатием клавиши ввода запрос вводится). Полученная информация динамически (соответственно запросу) формируется и отображается элементом управления Grid. Форма показана на рис. 5.24, пример ввода запроса и таблица с информацией — на рис. 5.25. [pic] [pic] Текст программы: Option Explicit Const vbOFNPATHMUSTEXIST = &H800& Const vbOFNFILEMUSTEXIST = S.H1000& Private Sub Coinmandl_Click () Combol.Clear CommonDialogI.DefaultExt = “MDB” CommonDiaiogI.FiieName = “” CommonDialogI.Filter = “Базы данных Access(*.MDB)|*.MDB” CommonDialogI.Flags = vbOFNPATHMUSTEXIST CommonDialogI.Action = 1 If CommonDialogl.FileName = “” Then Exit Sub OpenDataBase CommonDialogI.FileName End Sub Public Sub OpenDataBase(ByVal DataFile As String) Dim I As Integer Datal.Connect = “” Datal.DatabaseName = DataFiie Datal.Refresh For I = 0 To Datal.Database.TableDefs.Count - 1 Combo 1.Addltem Datal.Database.TableDefs(I).Name Next Combol.Text = “” End Sub Public Sub FillGrid(ByVai Zapros As String) Dim I As Integer, CellWidth As Integer Datal.RecordSource = Zapros Debug.Print Zapros Datal.Refresh Gridl.Cols = Datal.Recordset.Fields.Count Debug.Print Gridl.Cols Gridl.Row •= 0 ‘ For I = 0 To Datal.Recordset.Fields.Count - 1 Gridl.Coi = I Gridl.Text = Datal.Recordset.Fields(I).Name Gridl.ColWidth(I) = TextWidth(Gridi.Text) + 100 . Next Datal.Refresh Datal.Recordset.MoveLast Gridl.Rows = Datal.Recordset.RecordCount + 1 Datal.Recordset.MoveFirst Gridl.Row = 0 Do While Not Datal.Recordset.EOF Gridl.Row = Gridl.Row + 1 For I = 0 To Datal.Recordset.Fields.Count - 1 Gridl.Coi = 1 If IsNuil(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 Gridl.ColWidth(I) = CeilWidth End If Next I Datal.Recordset.MoveNext Loop End Sub Private Sub Textl_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then FillGrid Textl.Text End If End Sub ЗАКЛЮЧЕНИЕ Автор надеется, что прочитавший эту книгу до конца и самостоятельно выполнивший на компьютере приведенные в ней примеры получил достаточные знания и навыки программирования на Visual Basic, позволяющие самостоятельно создавать программные системы. Вы получаете в свои руки относительно простой, но очень эффективный инструмент для создания программ, работающих в операционной системе Windows. Эти программы могут иметь любую прикладную направленность: от простых баз данных для личного использования на работе и дома до профессиональных систем автоматизации производственной, торговой, банковской, страховой и других видов деятельности. Вы делаете первые шаги, чтобы стать специалистом в области информационных технологий. Технологий, которые прокладывают дорогу в XXI век и в значительной степени определят дальнейшее развитие человечества. Желаю Вам успехов на этом сложном, но очень перспективном пути. Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 |
|
|||||||||||||||||||||||||||||
|
Рефераты бесплатно, реферат бесплатно, сочинения, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |