В съответствие с моя коментар по-горе и отговора на Yawar, не знам, че Pass Through Queries могат да се редактират/актуализират. Те могат да се редактират в смисъл, че можете да редактирате запазен обект на Pass Through Query, но не вярвам, че е възможно Pass Through Query да създаде редактируем набор от записи.
Основно има два метода за свързване на Access към източник на данни, който не е Access.
Първият метод и най-популярен е да се използва някаква форма на свързани таблици, обикновено ODBC свързани таблици. Има различни методи за използване на ODBC свързани таблици с MS Access, но това, което повечето разработчици предпочитат, е да използват DSN-Less връзки, които се обновяват или възстановяват (изтриват и свързват отново) по време на стартиране на вашето приложение. Имайте предвид, че когато използвате ODBC, вие все още използвате и DAO. DAO е обектът за достъп до данни по подразбиране, вграден в MS Access и дори когато не пишете изрично DAO код, MS Access все още използва DAO под капака, за да свърже вашите формуляри, отчети и заявки с вашия източник на данни. В случая с ODBC, всъщност в крайна сметка имате два работещи слоя за достъп до данни, DAO и ODBC. Но можете да използвате ODBC/DAO с доста прилична производителност и без писане на код (освен за поддържане на ODBC свързаните таблици).
Вторият метод е да използвате ADO. Противно на общоприетото схващане, това не означава, че трябва да използвате необвързани форми. Но това означава, че трябва да напишете повече код, отколкото да използвате JET/DAO/MSAccess или DAO/ODBC/SSQL сървър. Трябва да напишете код, за да въведете записи от вашата база данни в и ADO Recordset и след това да използвате код, за да обвържете формуляра си с този Recordset. Трябва да напишете повече код, за да поддържате дъщерните форми в синхрон с родителските форми, да вмъквате чужди ключове в дъщерните форми, когато се създават нови записи, както и за редица други неща, като филтриране и сортиране като вградено във формуляра филтриране и сортиране опциите обикновено не работят с ADO набори от записи. ADO е чудесен начин да говорите със SQL Server, тъй като наистина ви дава много контрол, но тъй като кодът е интензивен и тъй като ODBC свързаните таблици работят толкова добре, повечето разработчици не препоръчват използването на ADO, освен ако няма друг начин да направите каквото ти искаш да направиш. Един пример за това е извикването на съхранени процедури. Вярвам, че Pass Through Queries може да се използва за извикване на съхранени процедури, но също така мисля, че има някои ограничения там (като използването на параметри). Вярвам, че в повечето случаи разработчиците използват ADO за извикване на съхранени процедури. Използвам ADO много, но не използвам много съхранени процедури (все още не), така че нямам много информация за това.
Друго нещо, което си струва да се спомене, е, че DAO с ODBC използва „мързеливо зареждане“, но ADO ви принуждава да изтеглите всички данни, което може да отнеме много време и да изразходва много памет, ако имате> милиони редове. В противен случай ще трябва да внедрите някакъв вид страниране.
Моята собствена функция за създаване на единична ODBC свързана таблица без DSN е по-долу. Ако сте нов в Access и нов в VBA, това вероятно няма да има много смисъл за вас. Кодът изтрива всяка дефиниция на таблица, която вече съществува за таблицата, която се опитвате да свържете, което е малко опасно, защото вярвам, че може да изтрие локална, несвързана таблица, която не бихте искали. Обработката на грешки тук също не е на ниво, но повечето онлайн примерни кодове нямат добра обработка на грешки в себе си поради усложненията, които включват. Създаването на индекси на първичен ключ на свързана таблица не винаги е необходимо. Просто го имам вграден във функцията си, защото ми трябваше веднъж за конкретен проект, така че сега го оставям там и го използвам, за добро или за лошо.
За да използвате правилно този код, наистина трябва да имате някъде списък с всичките си свързани таблици и да преминете през този списък и да извикате тази функция за всяка таблица. Тази функция ви позволява да свържете таблицата, като използвате име, различно от действителното й име в SQL Server. Трябва също така да имате начин за изграждане на валиден ODBC низ за връзка, който също трябва да бъде предаден в тази функция.
Private Sub LinkODBCTable(sSourceTableName As String, _
sLocalTableName As String, _
sPrimaryKeyField As String, _
sConString As String)
Dim dbCurrent As DAO.Database
Dim tdfCurrent As DAO.TableDef
Set dbCurrent = DBEngine.Workspaces(0).Databases(0)
On Error Resume Next
'Be Careful, this could delete a local, non-linked table.
dbCurrent.TableDefs.Delete sLocalTableName
If Err.Number <> 0 Then
If Err.Number = 3011 Then
'Table does not exist
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
End If
Err.Clear
End If
On Error GoTo 0
Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect = sConString
tdfCurrent.sourceTableName = sSourceTableName
dbCurrent.TableDefs.Append tdfCurrent
On Error Resume Next
If sPrimaryKeyField <> "" Then
dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sPrimaryKeyField & ")", dbFailOnError
If Err.Number <> 0 Then
If Err.Number = 3283 Then
'Primary Key Already Exists
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
End If
Err.Clear
End If
End If
Set tdfCurrent = Nothing
Set dbCurrent = Nothing
End Sub
Има няколко наистина добри ресурса, които трябва да проверите относно DAO, ADO, Pass Through Queries, SQL Server и т.н.:
http://technet.microsoft.com /en-us/library/bb188204%28v=sql.90%29.aspx
http://www.utteraccess.com/wiki/Choosing_between_DAO_and_ADO
Ето пример за обвързване на формуляр към ADO набор от записи. Това обаче е малко подвеждащо, защото е най-добре да имате обект за глобална връзка, който остава отворен по време на изпълнение на приложението. Това ви позволява да използвате ADO набори от записи, които могат да се актуализират автоматично. Използването на тази практика може също да направи вашия набор от записи обект на ниво формуляр.
http://msdn.microsoft .com/en-us/library/office/bb243828%28v=office.12%29.aspx