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

1 ... 40 41 42 [ 43 ] 44 45 46 ... 153


Конкретные задачи были выбраны, можно сказать, почти случайно, они носят достаточно общий характер и удобны с методической точки зрения. Предлагаем вам

примеры удачных решений, которые допускают повторное применение в ваших будущих реальных проектах.

Созданиетаблицы

Первый уровень абстракции в общей модели управления информацией - база

данных, а второй, весьма важный, - таблица. База данных состоит из одной или более таблиц. В некоторых ситуациях возникает задача динамического создания и удаления таблицы средствами прикладной программы в течение одного сеанса ее работы.

В Access 2002, наряду с VBA, поддерживается и язык структурированных запросов к базе данных (Structured Query Language - SQL) (подробнее см. главу 16-й час. Применение языка SQL ). На данном этапе вам достаточно знать, что для создания

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

таблицы, которую требуется создать. Просмотрите текст листинга 8.5.

Листинг 8.5. Пример процедуры построения таблицы в базе данных

2: 3: 4: 5:

Sub As String)

Dim SQLAs String

Используется команда CREATE table SQL

SQL = CREATE TABLE & TableName & (TotalSales Double); Call CurrentDb.Execute ( SQL ) End Sub

I Ну как - неплохо, не правда ли? Хотя до универсальности здесь далековато (любая создаваемая таблица будет содержать одно и то же единственное поле, TotalSales типа Double), некоторая гибкость все-таки

обеспечивается: динамически строится таблица с именем, которое задается в качестве аргумента процедуры. Если вы будете придерживаться подобного подхода, то сократите объем кода программы, самое меньшее,

на треть. Пример дает пищу для размышлений и простор для дальнейшего творчества.

Впрочем, простота простоте рознь. Решения должны быть конструктивными и целесообразными. Листинг 8.5 демонстрирует пример того уровня сложности, который допустим в функциях и процедурах. Воспринимайте отдельные выражения кода как атомы, а функции -как молекулы. Все мыслимые сущности физического мира состоят из иерархии атомов и молекул. Ваша программа сможет достичь степени сложности физического мира, если вы, ее создатель, будете последовательно и продуманно строить ее из маленьких кирпичиков отдельных выражений, процедур и функций.

Импорт текста из файла

В составе класса Application имеется вложенный клас md. Объект типа Application позволяет ссылаться на приложение Access как таковое. Он содержит инструменты управления Access. DoCmd (его следует воспринимать как интерфейс



к средствам Access) - весьма серьезный объект, насчитывающий множество свойств

методов, среди которых имеются функции импорта содержимого текстовых файлов.

Новый термин

Свойство - это переменная или объект определенного класса, щийся в составе класса более высокого уровня иерархии.

находя-

Процедура импорта содержимого текстовых файлов носит название ferText. Ниже приведен синтаксис ее вызова.

Call DoCmd.TransferText( [ТипПреобразования] [, ИмяСпецифи-кации], ИмяТаблицы, ИмяФайла [, ФлагЗаголовков] [, ИмяТабли-▲ цынтмь] [, КодоваяСтраница] )

Поскольку метод TransferText принадлежит классу этот факт необходимо

явно оговаривать, используя при вызове процедуры префикс DoCmd с последующим символом точки. В качестве необязательного аргумента ТипПреобразования допустимо указывать одно из предопределенных значений (по умолчанию система устанавливает признак ас Import Delim - импорт текста с разделителями). Аргумент ИмяС-пецификации также необязателен. Параметры ТипПреобразования и ИмяСпецифика-ции находят применение в случае импорта текста более сложной структуры. Аргументы ИмяТаблицы (наименование таблицы-получателя информации) и ИмяФайла (название файла-источника) обязательны. Остальные параметры - ФлагЗаголовков, имятаблицынтмъ И КодоваяСтраница - разрешается не задавать. (Исчерпывающие сведения о назначении, способах и примерах использования всех аргументов процедуры DoCmd.TransferText вы найдете в файлах оперативной справочной системы Microsoft Visual Basic.)


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

Рассматривая частную задачу импорта текста с разделителями, удобно определить новую функцию с меньшим числом аргументов и дополнительными средствами контроля. Рассмотрим пример простого текстового файла, содержащего разделенные запятыми имена, фамилии и почтовые адреса группы людей (листинг 8.6).

Листинг 8.6. Пример текстового файла с разделителями

Имя, Фамилия, Адрес Email Paul, Kimmel, Paul Kimmel@hotmail.com Robert, Dearman, Robert.Dearman@jnli.com Robert, Golieb, RobertGolieb@hotmail.com

Набор строк, приведенный в листинге 8.6, - это, по существу, уже готовая таблица. Если ее содержимое необходимо импортировать в таблицу базы данных, процедура DoCmd.TransferText придется весьма кстати. Листинг 8.7 отображает код пользовательской процедуры, упрощающей задачу импорта простого текста с разделителями.



Листинг 8.7. Пример процедуры импорта текста с разделителями

Su tFile( ByVal FileName As String,

ByVal TabieName As String ) Const HASFIELDNAMES = True If (FiieExists( FiieName Then

Caii DoCmd.TransferText (acImportDelim, ,

FileName, HASFIELDNAMES)

Else

MsgBox Файл & FiieName & не найден!

End If End Sub

2: 3: 4 J

5: 6:

7: 8:

10:Function FiieFxists (ByVai FiieName As 11: FiieFxists = Len(Dir(FileName)) > 0 12:End Funotion

TableName,

String) As Boolean

Определение дополнительной процедуры, охватывающей вызов метода DoCmd.TransferText, позволяет расширить возможности кода (скажем, в нашем примере добавлены строки, анализирующие наличие файла с заданн1м именем) и скрыть те аспекты интерфейса TransferText, которые в данном случае просто не нужн1.

Поиск записи

В своей личной профессиональной практике я часто сталкивался цами кода, буквально перенасыщенного предложениями на языке SQL. Подобные программы, к сожалению, очень трудно воспринимать и тем более исправлять. Как и в пре-д1дущем примере, м1 постараемся скрыть особенности интерфейса SQL внутри тела разработанной нами функции.

Листинг 8.8 содержит код функции, в которой предложение на яз1ке SQL используется для поиска записи в таблице CONTACTS (считайте, что с помощью процедуры листинга 8.7 м1 уже ее заполнили) по заданному значению фамилии корреспондента.

Листинг 8.8. Пример функции поиска записи в таблице

1: Function ntact ( ByVa Name As String : As String

2: Dim DeoordSet As New AdoDB.RecordSet

3 : Dim SQL As String

4: SQD = SFDFCT [FirstName] + + [LastName] As &

5: [Contact Name] From CONTACTS WHFDF [DastName] = &

6 : DastName &

7: Cal et.Open (SQL, CurrentProj ect. Connection, dbOpenDynami с)

8: dSet.BOF An et.EOF) = False) Then

9: FindContact = Contact Name )

10 Flse

11 FindContact = Запись не найдена!

12 End If

13 RecordSet.Close

14 Set RecordSet = Nothing

15 End Function



1 ... 40 41 42 [ 43 ] 44 45 46 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика