Открыть набор записей в Access 2003/2007
прошли годы с тех пор, как я работал в Коде доступа, и это делает меня сертифицированно безумным.
Я просто ничего не помню, и все, что я хочу сделать, это открыть набор записей в коде, и ничего, что я нашел в интернете, или любая перестановка кода, которую я пробовал, работает.
вкратце:
Dim rsSystem As Recordset
Dim sSQL As String
sSQL = "SELECT * FROM Table"
Set rsSystem = CurrentDB.OpenRecordset(sSQL)
5 ответов
примеры здесь, для всех перестановок открытия " набора записей": http://www.vbexplorer.com/VBExplorer/vb_feature/june2000/Database_Beginner_ADO_DAO.asp
самый простой способ-использовать DAO в текущей базе данных. Мой VBA немного ржавый, но...
Dim db as DAO.Database
Dim rs as DAO.Recordset
Set db = CurrentDB
Set rs = DB.OpenRecordset("table or query name")
для ADO:
Dim rs As New ADODB.Recordset
rs.Open "tblPeople", CurrentProject.Connection, adOpenDynamic
если вы объявите просто Recordset
не указывая, является ли это DAO или ADO, Access самостоятельно решит, будет ли это DAO или ADO, в зависимости от порядка ваших ссылок:
открыть окно кода, перейдите в инструменты - > ссылки, и посмотрите на список.
Это будет выглядеть примерно так:
вы видите, что в этом примере есть ссылка на DAO ("библиотека объектов Microsoft DAO 3.6")и ADO ("данные Microsoft ActiveX Библиотека Объектов 2.5").
если вы объявляете свой набор записей без указания типа, Access выбирает первую из этих ссылок (=ту, которая больше в верхней части списка) и создает набор записей этого типа.
Таким образом, в этом примере это будет DAO.Recordset
.
теперь вернемся к вашему вопросу:
Набор записей объявляется без указания типа.
Поэтому, если первая ссылка в код база данных доступа ADO, доступ создаст ADODB.Recordset
.
Затем вы открываете его с помощью метода DAO, который ожидает DAO.Recordset
, и именно поэтому вы получаете ошибку.
есть два способа решить вашу проблему:
- убедитесь, что в вашей базе данных Access есть только ссылка на ADO или DAO (но не оба), тогда вам не нужно указывать тип набора записей.
- если вам действительно нужны обе ссылки, всегда объявляйте свои наборы записей как
DAO.Recordset
илиADODB.Recordset
чтобы убедиться, что это действительно того типа, который ожидает ваш код.
решите, хотите ли вы использовать ADO или DAO? Вот пример DAO (более родной для Access/Jet)
dim wrk as DAO.Workspace
dim db as DAO.Database
set wrk = DBEngine.Workspaces(0)
set db = wrk.OpenDatabase(CurrentDb.Name)
Dim rsSystem as DAO.Recordset
Dim sSQL As String
sSQL = "SELECT * FROM Table"
Set rsSystem = db.OpenRecordSet(sSQL, dbOpenDynaset)
exitRoutine:
If Not (db Is Nothing) Then
db.Close
Set db = Nothing
End If
Set wrk = Nothing
Не уверен, что вы хотите сделать с этим записей.
Dim rsSystem As Recordset
объектные модели ADO и DAO включают объекты набора записей. Их нельзя обменять.
поскольку вы не указали, какой вы хотите, ваш может быть набор записей ADO ... что объясняет ошибку несоответствия типов в методе OpenRecordset.
Set rsSystem = CurrentDB.OpenRecordset(sSQL)
этот метод возвращает Дао Recordset, поэтому сначала объявите rsSytem как таковой.
Dim rsSystem As DAO.Recordset
"таблица" - зарезервированное слово в SQL. Если вы должны назвать свою таблицу "table", то заключите ее в квадратные скобки: "SELECT * FROM [Table]"
.