Vba ADO限制表名
我必须连接到一个名为“数据库”的表,这似乎是不允许的。在不更改表名的情况下是否有解决方法Vba ADO限制表名,vba,ms-access,ado,Vba,Ms Access,Ado,我必须连接到一个名为“数据库”的表,这似乎是不允许的。在不更改表名的情况下是否有解决方法 Set con = New ADODB.Connection con.CursorLocation = adUseClient RawData = IIf(SelectedRawDromXL <> "", SelectedRawDromXL, SelectedRawFile1) con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Da
Set con = New ADODB.Connection
con.CursorLocation = adUseClient
RawData = IIf(SelectedRawDromXL <> "", SelectedRawDromXL, SelectedRawFile1)
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & RawData & ";Jet OLEDB:Database Password="
Set objRecordsetraw = New ADODB.Recordset
ggg = "DATABASE"
objRecordsetraw.Open ggg, con, adOpenKeyset, adLockOptimistic
Set con=New ADODB.Connection
con.CursorLocation=adUseClient
RawData=IIf(SelectedRawDromXL“”、SelectedRawDromXL、SelectedRawFile1)
con.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“&RawData&”Jet-OLEDB:数据库密码=”
Set objRecordsetraw=New ADODB.Recordset
ggg=“数据库”
打开ggg、con、adOpenKeyset、ADLOCKSETRAW
如果
数据库是一个表,我的建议是
ggg = "[DATABASE]"
objRecordsetraw.Open ggg, con, adOpenKeyset, adLockOptimistic
PS 1:AdLockOptimization+adCmdTable
在我的环境中不工作。当运行行objRecordsetraw.Open ggg、con、adOpenKeyset、adLockOptimistic+adCmdTable
时,我得到RTE 3001
PS 2:这可能是问题的原因
如果数据库是一个表,我的建议是
ggg = "[DATABASE]"
objRecordsetraw.Open ggg, con, adOpenKeyset, adLockOptimistic
PS 1:AdLockOptimization+adCmdTable
在我的环境中不工作。当运行行objRecordsetraw.Open ggg、con、adOpenKeyset、adLockOptimistic+adCmdTable
时,我得到RTE 3001
PS 2:这可能是问题的原因
ggg
应该是有效的SQL字符串,如SELECT*FROM tblName
或表resp的名称。存在于MS Access数据库文件中的查询。您收到的错误消息是什么?那么在哪一行呢?那么,我猜您会在objRecordsetraw.Open ggg,con,adOpenKeyset,adLockOptimistic
这一行收到错误消息。原因是ggg
在您的MS Access数据库中不包含表名或查询名,或者它是否包含?ggg
应该是有效的SQL字符串,如SELECT*FROM tblName
或表名resp。存在于MS Access数据库文件中的查询。您收到的错误消息是什么?那么在哪一行呢?那么,我猜您会在objRecordsetraw.Open ggg,con,adOpenKeyset,adLockOptimistic
这一行收到错误消息。原因是ggg
不包含MS Access数据库中的表或查询的名称,或者是这样吗?这也只是在数据库
中添加了方括号后才起作用。我只能说它起作用了,现在我不明白为什么像Customer
这样的表没有方括号,而DATABASE
只有方括号才起作用,因为数据库是Access中的保留名称。这是因为只定义表名是必要的愚蠢,ADO只是将SELECT*FROM
预先添加到它(查看objRecordsetraw.Source
)。实际上,只能将表名与adCmdTableDirect
结合使用,它实际上打开了一个具有不同功能的不同记录集类型。这也只是在数据库
中添加括号时才起作用。我只能说它起作用了,现在我不明白为什么像Customer
这样的表没有括号,而数据库
只有括号才起作用,因为数据库是一个数据库Access中的保留名称。这是因为仅定义表名是愚蠢的,ADO只是将SELECT*FROM
预先添加到它(查看objRecordsetraw.Source
)。实际上,只应将表名与adCmdTableDirect
结合使用,这样它实际上会打开具有不同功能的不同记录集类型。