|
Программирование >> Разработка пользовательского интерфейса
SQL Data Sources Select Data Source: FoodTwo Meandpdx mvfox myteach myvvod newlycreatedaccessbase?. Sergey New... Cancel Рис. 8.6. После выбора источника данных в следующем диалоговом окне вам останется только выбрать из списка доступных таблиц те, которые вы хотите присоединить. При этом обратите внимание, что вы можете выбрать несколько или даже все имеющиеся таблицы. На этом процесс присоединения закончен. В случае отсутствия в присоединяемой таблице уникального индекса вам будет предложено выбрать это поле самостоятельно. Это делается для того, чтобы процессор баз данных Jet Access мог однозначно передавать изменения в данных на сервер. Поэтому тщательно следите, чтобы поле, определяющее уникальность записи, всегда присутствовало в ваших таблицах. Теперь вы можете работать с внешней таблицей так же, как и с таблицей самого Access. Вам будут недоступны только операции по модификации структур таблиц непосредственно визуальными средствами Access. Обратите внимание, что в предыдущем предложении сказано непосредственно визуальными средствами . Потому что способы изменить структуру таблиц на сервере у вас еще остаются. Среди дополнений (Add-In) Visual Basic присутствует Data Manager. Если на компьютере установлен Visual Basic, то в качестве упражнения предлагаем проделать аналогичную манипуляцию с присоединением внешних таблиц к базе данных с помощью Data Manager. В случае затруднений обратите внимание на рис. 8.7-8.9.
Рис. 8.7. vDolQ Manaqcr - C:\sportMalcQch.nfidb Fib WiTS* Нф Tabb fSouice-ТаЫе Connect □RDEFIS.DB МуТдЫа IOD 9l iD-iPi -vfpSl :S ouice[i В - С VPr4J!:i:t boDl :(tet*{ie -c-itMrt\lotMtW и* Рис. 8.8. New Attached Table Attachment Name
Рис. 8.9. Чем хороши присоединенные таблицы? Во-первых, не требуется никакого программирования для того, чтобы работать с ними. Во-вторых, они модифицируемы, то есть все изменения, которые вы будете проводить с записями, будут отражаться на сервере. Исключением является случай, когда Access однозначно не сможет определить запись на сервере, в которой надо провести обновление данных в колонках. Чем плохи присоединенные таблицы? Только тем, что в некоторых случаях вам будет недоставать скорости обработки. Какой есть выход из положения? Использовать другие методы для получения набора данных. Но сначала закончим с присоединенными таблицами. Помимо визуального способа, есть и программный. Для этого мы должны использовать DAO - набор объектов для работы с данными. Вы уже не раз встречались на страницах этой книги с конструкцией следующего типа: Dim MyDb As Database Dim mytableDef As TableDef Set MyDb = DBEngine.Workspaces(0).Databases(0) Set MytableDef = CreateTabledef( JustProgrammaticalyMadeTable ) Данная конструкция создает таблицу в текущей базе данных. Отметим, что этот пример не завершает построения таблицы, так как мы не создали полей и не добавили таблицу в коллекцию таблиц текущей базы данных. Следующий пример создает присоединенную таблицу формата Visual Fox-Pro 3.0. Необходимо лишь добавить две строки, которые устанавливают свойства Connect и SourceTableName для вновь создаваемого объекта. В данном примере создается присоединенная таблица AttachTable. Для этого используется источник данных vfp34. На вашем компьютере название таблицы и источника данных (Data Source) могут быть иными. Public Sub TableCREATE() Dim myDb As DATABASE, mytdef As TableDef Set myDb = DBEngine.Workspaces(0)( Autostore.mdb ) Set mytdef = myDb.CreateTableDef( AttachTable ) mytdef.Connect = ODBC;dsn=vfp34 mytdef.SourceTableName = country myDb.TableDefs.Append mytdef End Sub Данную процедуру можно запустить как в Access, так и в Visual Basic или Microsoft Excel. Единственное отличие последних в том, что необходимо проследить за доступностью объектов DAO приложению. После выполнения этого или подобного кода в базе данных появится значок, а если вы откроете присоединенную таблицу в режиме Конструктора, то, воспользовавшись командой Свойства меню Вид, сможете прочитать в строке Описание строку Соединения. Не забывайте, что физически присоединенные таблицы не находятся в вашей базе данных, и требуется определенное время для связи с ней, поэтому при работе с таблицами, хранящими большое количество данных, используйте другие, более быстрые методы выборки данных, к примеру, параметрические запросы. Обратим внимание, что с присоединенными таблицами нельзя использовать метод Seek. Поэтому здесь нужно придумать другие способы оптимизации поиска, самым лучшим из которых является, извините за назойливость, параметрический запрос. Перед тем как использовать транзакции, необходимо выяснить, поддерживаются ли операции такого рода в источнике данных. Для баз данных ODBC нельзя использовать вложенные транзакции. До сих пор мы говорили о присоединенной таблице, но можно и напрямую открыть таблицу. Это доступно только с помощью языка программирования Basic. Dim CurrentDatabase As Database Dim MySet As Recordset Открываем внешнюю базу данных формата FoxPro Set CurrentDatabase = DBEngine.Workspaces(0).OpenDatabase ( C:\FOXPRO\DATA\ , False, False, FoxPro 2.5 ) Открываем таблицу Customer Set MySet = CurrentDatabase.OpenRecordset( Customer ) В приведенном примере в начале делается текущей база данных внешнего формата (в нашем случае, так как FoxPro 2.х не поддерживает понятие базы данных как контейнера таблиц, это каталог C:\FOXPRO\DATA\), а затем напрямую открывается таблица покупателей в этом каталоге. Понятно, что никакого значка для данной таблицы в текущей базе данных не появится и работать с этими данными мы сможем только программным способом. Еще одним недостатком данного метода доступа к внешним данным является более медленная, по сравнению с присоединенной таблицей, скорость работы. Помимо присоединения уже существующих таблиц, хранящихся в источнике данных, вы можете создавать новые таблицы, которые станут присоединенными. Ниже приводится простейший пример создания таблицы формата FoxPro 2.6. Dim CurrentDatabase As Database Dim MyTableDef As TableDef Set CurrentDatabase = DBEngine.Workspaces(0).OpenDatabase( C:\DATA , False, False, FoxPro 2.6 ) Set MyTableDef = CurrentDatabase.CreateTableDef( FromAccess ) MyTableDef.Fields.Append MyTableDef.CreateField( Field1 , DB TEXT, 15) CurrentDatabase.Tabledefs.Append MyTableDef Следующим способом для работы с данными на сервере, который мы рассмотрим, будет SQL pass-through. Выборка данных при использования SQL pass-through проходит быстрее, так как запрос сразу отправляется на сервер, минуя процессор баз данных Jet. Но полученные запросы являются не модифицируемыми, то есть изменения в них не передаются на сервер. Следовательно, вам нужно использовать какие-то другие способы для обновления данных на
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |