AccessConnection, MS Office, Програмні керівництва, статті

В 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 XP2002.mdb

? CurrentProject.AccessConnection
Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Data Source = D: Мої документиAccess XP2002.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 XP2002.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 XP2002.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 XP2002.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: Мої
con.Open
rst.Open “select * from comptyp”, con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
_____________

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

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*