According to my comment above and Yavar's answer, I don't know that end-to-end queries are always available for editing / updating. They are edited in the sense that you can edit the Skip Through Query object, but I donβt think it is possible for Skip Through Query to create an editable record set.
There are basically two ways to connect Access to a non-Access data source.
The first method and the most popular one is to use some form of related tables, mainly related to ODBC tables. There are many ways to use ODBC-related tables with MS Access, but most developers prefer to use DSN-Less connections, which are updated or rebuilt (deleted and reconnected) at the time your application starts. Keep in mind that when using ODBC, you are also using DAO. DAO is the default access object built into MS Access, and even if you do not write any DAO code, MS Access still uses the DAO under the hood to link your forms, reports and queries with your data source. In the case of ODBC, you actually get two levels of data access, DAO and ODBC. But you can ODBC / DAO with pretty decent performance and without writing code (other than supporting related ODBC tables).
The second method is to use ADO. Contrary to popular belief, this does not mean that you need to use unrelated forms. But that means you need to write more code than using JET / DAO / MSAccess or DAO / ODBC / SSQL Server. You must write code to enter records from your database and into ADO Recordset, and then use the code to bind the form to this record set. You must write more code to synchronize child forms with parent forms, insert foreign keys into child forms when creating new records, and possibly for many other things, such as filtering and sorting. ADO is a great way to talk to SQL Server, because it really gives you a lot of control, but since it is very rich in code, and because ODBC Linked Tables work so well, most developers do not recommend using ADO if there is no other way to do what You want to do. One example of this is calling stored procedures. I believe that end-to-end queries can be used to call stored procedures, but I also think that there are some restrictions (for example, the use of parameters). I believe that in most cases, developers use ADO to call stored procedures. I use ADO a lot, but I don't use a lot of stored procedures (not yet), so I don't have much information about this.
My own function for creating one DSN-ODBC related related table is below. If you're new to Access and new to VBA, this probably won't make much sense to you. The code deletes any table definition that already exists for the table you are trying to associate, which is a bit dangerous because I believe that it can delete a local, unrelated table that you don't want. Error handling is not very efficient here, but most online code examples do not have good error handling due to the complications involved. Creating primary key indexes in a linked table is not always necessary. I just included it in my function because I needed it once for a specific project, so now I leave it there and use it, better or worse.
To use this code correctly, you really need to have a list of all your related tables somewhere and iterate over this list and call this function for each table. This feature allows you to associate a table using a different name than the actual name in SQL Server. You should also have a way to build a valid ODBC connection string, which should also be passed to this function.
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
There are some really good resources you should check out regarding DAO, ADO, Pass Through Queries, SQL Server, etc:
http://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx
http://www.utteraccess.com/wiki/index.php/Choosing_between_DAO_and_ADO
Here is an example of binding a form to an ADO recordset. This is a bit misleading, because it is best to have a global connection object that remains open at runtime. This allows you to use automatic updates to ADO record sets. Using this practice can also make your recordset a form level object.
http://msdn.microsoft.com/en-us/library/office/bb243828%28v=office.12%29.aspx