AccessConnection - Програмні продукти

У Access 2002 з'явилася нова властивість CurrentProject.AccessConnection. У проекті adp не має значення що використовувати: CurrentProject.AccessConnection або CurrentProject. Connection, там це рівнозначні властивості. Відмінності виявляються при використанні в базі даних mdb. Ось що показує вікно налагодження:

? CurrentProject.Connection Prov >? CurrentProject.AccessConnection Prov >Тобто. 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 = "Prov >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 = "Prov >con.Open rst.Open "Table1", con, adOpenKeyset, adLockOptimistic Set Me.Recordset = rst End Sub

Результати експериментів не можуть не тішити. Додам, що в процесі експерименту рекордсет форми проекту adp був наданий як джерело даних форми бібліотечної бази mdb, і його, як і раніше, можна було редагувати. Схоже, межі між mdb та adp починають стиратися :)

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

1. Є «рідна» mdb таблиця. Таблиця має первинний ключ. Підключення через ADO до цієї таблиці, створивши новий конекшн або використовуючи CurrentProject.AccessConnection, дає однаковий результат - результуючий набір у формі редагований. _________ >Dim con As New ADODB.Connection con.ConnectionString = "Prov &conOpen 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. .ConnectionString = "Prov >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 = "Prov &ctcon.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. Connection con.ConnectionString = "Prov con.Open rst.Open "select * from comptyp", con, adOpenKeyset, adLockOptimistic Set Me.Recordset = rst _____________

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