ms-access连接到本地mysql数据库
以下代码返回错误:
Public Function run_sql(strSql As String)
On Error GoTo lblError
CurrentDb.Execute strSql, dbFailOnError
lblExit:
Exit Function
lblError:
MsgBox Err.Number & ": " & Err.Description
Resume lblExit
End Function
strSql =“DELETE FROM tblUsersSubjects WHERE user_id = 2007;” - 我运行此语句它完美地工作,但访问给我这个错误:3086:无法从指定的表中删除
这个错误的原因是什么?
表结构是:
CREATE TABLE `tbluserssubjects` (
`user_id` int(11) NOT NULL,
`subject_id` int(11) NOT NULL,
`other` varchar(50) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
请注意我能使用shell执行所需的删除操作,而不是访问
答案 0 :(得分:2)
从Access中可以打开链接表,tblUsersSubjects,在数据表视图中编辑或删除数据表视图吗?如果没有,Access可能会将与MySql表的连接视为只读。尝试删除链接(在Access中;而不是MySql中的实际表)。然后重新链接Access中的表,并确保告诉Access哪个字段(或字段组合)用作主键。如果Access不知道链接表的主键,则该链接将是只读的。
在与Alex进行离线讨论后,我想补充一下这个答案:
Access最初无法识别到什么 用作主键,因此您的链接表是从Access端只读的。我猜这是因为你的CREATE TABLE语句没有 包括主键约束。但我实际上并不知道 Access 自动在链接到主链时如何识别主键的详细信息 外部表。也许,在没有明确定义的情况下 主键,它可能会查找具有Not Null和Unique的字段 限制。但是CREATE TABLE语句没有在MySql上包含任何唯一约束 表格。
因此,当Access无法自动猜测外部表的主键时,您必须告诉它哪个字段(或多个字段)用作主键... 除非您想要链接表从Access获得只读。
答案 1 :(得分:1)
Access或MySql中的表是?如果它在MySql中,则可能是您没有适当的权限来编辑表数据。检查指向MySql表的连接字符串,并确保您连接的任何人都删除了该表的权限。
此外 - 此表是否与其他表有任何外键关系?也许您正在尝试删除会导致违反某些其他表的主键的记录。
答案 2 :(得分:0)
可能是一个区分大小写的问题?
您为表格结构输入了“tbluserssubjects”,但在查询中键入了“tblUsersSubjects”(大写U和S)