Программирование MsAccess, VB, VBA

  

© am 1999-2024

Добро пожаловать, незнакомец! [вход]   

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

AccessConnection и связанные с ним новые возможности форм mdb.

(обращений: 18965 с 03.04.2002)

Разделы:  Формы, Статьи

 

Описание:

Автор: Вакшуль Сергей

Добавил на сайт: Профиль пользователяВакшуль Сергей 03.04.2002


В Access 2002 появилось новое свойство CurrentProject.AccessConnection.
В проекте adp не имеет значения что использовать: CurrentProject.AccessConnection или CurrentProject. Connection, там это равнозначные свойства.
Различия проявляются при использовании в базе данных mdb. Вот что показывает окно отладки(кое-что пропущено для наглядности):

?
CurrentProject.Connection
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\
Мои документы\Access XP\2002.mdb

?
CurrentProject.AccessConnection
Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:\
Мои документы\Access XP\2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0

Т.е. CurrentProject.Connection использует только одного провайдера – Microsoft Jet OLEDB provider. А CurrentProject.AccessConnection использует двух провайдеров: одного для доступа к данным(параметр в строке подключения Data Provider) и другого сервис провайдера - Microsoft.Access.OLEDB.10.0. Вот этот самый другой и является сутью новшества.

Про ограничения нового сервис провайдера говорить не буду, хочу выделить только достоинства. С появлением в Access 2000 свойства формы Recordset, появилась возможность указать форме в качестве источника данных рекордсет DAO/ADO. Однако редактировать через интерфейс формы можно было только рекордсет DAO. Так вот, появление нового свойства
CurrentProject.AccessConnection, а если говорить более обобщенно, нового сервис провайдера Microsoft.Access.OLEDB.10.0, сняло это ограничение в Access 2002. Теперь для того, чтоб указать форме в качестве источника данных рекордсет ADO, который будет обновляемым через интерфейс формы, необходимо чтобы Connection, в котором будет открыт этот рекордсет, использовал не только провайдера данных, но и сервис провайдера Microsoft.Access.OLEDB.10.0. Частным случаем этого правила является свойство CurrentProject.AccessConnection. Его удобно применять для открытия рекордсетов ADO, по таблицам текущей базы данных, с последующей их передачей формам в качестве источника данных.
Информации из MSDN по свойству
CurrentProject.AccessConnection хватило для того, чтобы, поняв суть нововведения, использовать ее для работы с источниками данных, не присоединенными к базе данных, т.е. там, где CurrentProject.AccessConnection не может быть применен.
Привожу два примера, демонстрирующих использование в формах Access 2002 редактируемых рекордсетов ADO по разным источникам данных:

Sub Кmdb()
'Пример подключения к другому mdb через отдельный Connection
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:\Мои документы\Access XP\2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0"
con.
Open
rst.
Open "Table1", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
End Sub




Sub КSQL()
'Пример подключения к SQL Server через отдельный Connection
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=VAKSHUL;User ID=sa;Initial Catalog=
Динамика;Data Provider=SQLOLEDB.1"
con.
Open
rst.
Open "Table1", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
End Sub




Результаты экспериментов не могут не радовать. Добавлю, что в процессе эксперимента рекордсет формы проекта adp был присвоен в качестве источника данных формы библиотечной базы mdb, и его по-прежнему можно было редактировать. Похоже, границы между mdb и adp начинают стираться :)


Сказанное ранее хочу дополнить результатами дополнительных экспериментов.

1.
Имеется «родная» mdb таблица. Таблица имеет первичный ключ.
Подключение через ADO к этой таблице, создав новый конекшн или используя
CurrentProject.AccessConnection, дает одинаковый результат – результирующий набор в форме редактируемый.
_________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:\Мои документы\Access XP\2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0"
con.
Open
rst.
Open "Table2", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________
___________
Dim rst As New ADODB.Recordset
rst.
Open "Table2", CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________

У
далим в таблице первичный ключ.
Результат в обоих способах подключения одинаковый - результирующий набор в форме Не редактируемый.

2.
Имеется не присоединенная к mdb базе таблица SQL Sever. Таблица имеет первичный ключ.
Подключение через ADO к этой таблице в результате дает редактируемый набор в форме.
___________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=VAKSHUL;User ID=sa;Initial Catalog=Динамика;Data Provider=SQLOLEDB.1"
con.
Open
rst.
Open "tbl", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________

У
далим в таблице первичный ключ.
Результат подключения через ADO к этой таблице в результате дает НЕ редактируемый набор в форме.

3.
Имеется присоединенная к mdb базе таблица формата dbf. При присоединении было указано поле, выполняющего функцию поля первичного ключа.
Подключение через ADO к этой таблице, создав новый конекшн или используя
CurrentProject.AccessConnection, дает одинаковый результат – результирующий набор в форме редактируемый.
__________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:\Мои документы\Access XP\2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0"
con.Open
rst.Open "comptyp", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
__________
__________
Dim rst As New ADODB.Recordset
rst.Open "comptyp", CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
__________

Переприсоединим таблицу dbf к базе без указания поля первичного ключа.

Результат в обоих способах подключения одинаковый - результирующий набор в форме Не редактируемый.

4.
Имеется не присоединенная к mdb базе таблица dbf. Таблица, естественно, не имеет первичного ключа.
Подключение через ADO к этой таблице в результате дает HE редактируемый набор в форме.
____________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Access.OLEDB.10.0;Data Provider=MSDASQL.1;Extended Properties=""DSN=Belch_dbf;UID=;PWD=;SourceDB=D:\
Мои документы\dbf\Prod_dbfs;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"""
con.
Open
rst.
Open "select * from comptyp", con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
_____________


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

Я не знаю, может возможности нового сервис провайдера и ограничены, и пока он позволяет редактировать данные в формах, основанные на рекордсетах ADO только избранных поставщиков данных, но в любом случае нужную таблицу можно будет присоединить к mdb файлу и открыть ADO-шный рекордсет уже по ней, использовал в качестве конекшн CurrentProject.AccessConnection. Набор данных формы, получившей этот рекордсет в качестве источника данных, будет редактируемый.

 

Вакшуль Сергей

ТАКЖЕ ОПУБЛИКОВАНО НА КМ: http://msa.km.ru/msa/access/article.asp?id=367

 

[Back]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
ссылки на статьи от microsoft по теме: Профиль пользователяam   
http://support.microsoft.com/default.aspx?scid=kb;en-us;281784
http://support.microsoft.com/default.aspx?scid=kb;EN-US;281998
13.08.2003 12:06