Ms access 如何在数据库后面的模块中用vba填充记录集

Ms access 如何在数据库后面的模块中用vba填充记录集,ms-access,vba,Ms Access,Vba,我试过很多方法来完成这项工作。我对 访问VBA。 我认为问题在于如何设置当前数据库。代码位于另一个db的模块中,作为当前db。我已经将代码粘贴到了 currentdb也给出了相同的错误。我考虑了很多问题。 这一定很简单。但我看不出答案 Private Sub project() Dim projectnamen As DAO.Database Dim strSQL As String Dim rs As DAO.Recordset Dim strdbName As String Dim str

我试过很多方法来完成这项工作。我对
访问VBA。 我认为问题在于如何设置当前数据库。代码位于另一个db的模块中,作为当前db。我已经将代码粘贴到了 currentdb也给出了相同的错误。我考虑了很多问题。 这一定很简单。但我看不出答案

Private Sub project()

Dim projectnamen As DAO.Database
Dim strSQL As String
Dim rs As DAO.Recordset
Dim strdbName As String
Dim strMyPath As String
Dim strdb As String
Dim accapp As Object    

Path = "c:\GedeeldeMappen\programma en bestanden stiko"
strdbName="projektnamen.accdb"
strMyPath = Path
strdb = strMyPath & "\" & strdbName

'make the db "projectnamen"current. Perhaps this is possible with set??

Set accapp = CreateObject("Access.Application")  
accapp.OpenCurrentDatabase (strdb)

'fieldname is naam_van_het_project  
'tablename is projectnaam    

strSQL = "SELECT All naam_van_het_project FROM projectnaam;"

'here i get an error "can't find the object Select All naam_van_het_project
'FROM projectnaam"  error 3011

Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenTable)
rs.MoveFirst
Do While Not rs.EOF
    MsgBox (rs)    
    rs.MoveNext
Loop
End Sub

我认为您希望对在新访问会话accapp中打开的db运行该查询

CurrentDb
方法是
应用程序的成员。因此,用另一个应用程序会话的对象变量名限定
CurrentDb

'Set rs=CurrentDb.OpenRecordset(strSQL,dbOpenTable)
Set rs=accapp.CurrentDb.OpenRecordset(strSQL,dbOpenSnapshot)

注意
OpenRecordset
不允许在查询中使用dbOpenTable。所以我任意选择了dbOpenSnapshot。如果这不是您想要的,请替换RecordsetTypeEnum枚举中的另一个常量(有关详细信息,请参阅Access帮助主题)。

谢谢您的回答。我遵循了您的建议。我犯了一个错误“没有足够的参数。预期的数字是:1。错误3061问题已解决。首先,我碰巧得到了如下声明:;Dim projectnamen As DAO.database问题解决了。首先,我将声明Dim projectnamen更改为Dao.database,将Dim projektnamen更改为Dao.database。第二个是数据库中包含空格的字段的名称。我删除了空格。现在,代码与您的建议配合得很好