如何在 MS-access 2010 中向链接 table 的 ODBC 添加行
How to add rows to a ODBC linked table in MS-access 2010
我有一个 MS-Access 2010 数据库,Sybase tables 通过名为 FNA 的 ODBC 链接到它。
我可以很好地从链接的 table 中读取内容,但事实证明,向它们写入内容要困难得多。我正在尝试使用下面的插入 sql 将数据从名为 _ModelVersion 的访问 table 添加到名为 DBA__ModelVersion 的链接 table。有时它会工作一会儿,但主要是我收到一个错误 "ODBC--insert on a linked table 'DBA__Collectors' failed. authentication violation"
strQuery63 = "INSERT INTO [DBA__ModelVersion] ( ID, EDXVersion, template, DatVersion, DbVersion, AccessVersion ) " & _
"SELECT [_ModelVersion].ID, [_ModelVersion].EDXVersion,[_ModelVersion].ProjectTemplate, [_ModelVersion].DatVersion, [_ModelVersion].DbVersion, [_ModelVersion].AccessVersion " & _
"FROM _ModelVersion "
DoCmd.SetWarnings False
DoCmd.RunSQL strQuery63
DoCmd.SetWarnings True
是否应该使用其他方法?不确定这是否重要,但我有使用链接 table 作为源的组合框,并且在此查询之前 运行 dmax 函数也在相关链接 table 上使用。我读到在 sybase 数据库端创建一个存储过程并从访问中调用它是可行的方法,但我不知道该怎么做,更不用说让存储过程在访问端使用 FNA 提取数据了。
编辑:到目前为止我已经尝试过:
1) 确保来自 sybase 的数据类型在访问中正确显示(sybase 中的数据类型是数字和 varchar,在访问中它们显示为小数和文本,这似乎没问题)
2) 在sybasetable中添加自增主键并在链接到access
时指明
3) 使用 currentdb.execute 和 dbseechanges
4) 使用接受的答案 here
中显示的方法刷新 table
5) 尝试添加一个字段时间戳,并将值设置为当前时间戳。没有改善。
Funcionallity 保持不变:更新查询偶尔会工作,然后继续提供 "run-time error '3155': ODBC--insert on a linked table failed",这可以看出我是使用 VBA 还是查询设计 运行 查询。
我过去在 ODBC 链接 table 上使用 RunSQL 时遇到过一些问题。在处理带有主键的链接 table 时,您需要使用 dbSeeChanges 选项。
您上面提到的错误表明 table 没有设置主键。右键单击 table 并进入设计视图(在 MSAccess 中)。突出显示您希望作为主键(唯一标识符)的行。单击带有金钥匙图标的按钮。
尝试 UPDATE/INSERT 以下...
CurrentDb.Execute "INSERT INTO tblYourTableName VALUES ('YourTextValue',123)", dbSeeChanges
替换你的 table/columns/values.
我有一个 MS-Access 2010 数据库,Sybase tables 通过名为 FNA 的 ODBC 链接到它。
我可以很好地从链接的 table 中读取内容,但事实证明,向它们写入内容要困难得多。我正在尝试使用下面的插入 sql 将数据从名为 _ModelVersion 的访问 table 添加到名为 DBA__ModelVersion 的链接 table。有时它会工作一会儿,但主要是我收到一个错误 "ODBC--insert on a linked table 'DBA__Collectors' failed. authentication violation"
strQuery63 = "INSERT INTO [DBA__ModelVersion] ( ID, EDXVersion, template, DatVersion, DbVersion, AccessVersion ) " & _
"SELECT [_ModelVersion].ID, [_ModelVersion].EDXVersion,[_ModelVersion].ProjectTemplate, [_ModelVersion].DatVersion, [_ModelVersion].DbVersion, [_ModelVersion].AccessVersion " & _
"FROM _ModelVersion "
DoCmd.SetWarnings False
DoCmd.RunSQL strQuery63
DoCmd.SetWarnings True
是否应该使用其他方法?不确定这是否重要,但我有使用链接 table 作为源的组合框,并且在此查询之前 运行 dmax 函数也在相关链接 table 上使用。我读到在 sybase 数据库端创建一个存储过程并从访问中调用它是可行的方法,但我不知道该怎么做,更不用说让存储过程在访问端使用 FNA 提取数据了。
编辑:到目前为止我已经尝试过:
1) 确保来自 sybase 的数据类型在访问中正确显示(sybase 中的数据类型是数字和 varchar,在访问中它们显示为小数和文本,这似乎没问题)
2) 在sybasetable中添加自增主键并在链接到access
时指明
3) 使用 currentdb.execute 和 dbseechanges
4) 使用接受的答案 here
中显示的方法刷新 table
5) 尝试添加一个字段时间戳,并将值设置为当前时间戳。没有改善。
Funcionallity 保持不变:更新查询偶尔会工作,然后继续提供 "run-time error '3155': ODBC--insert on a linked table failed",这可以看出我是使用 VBA 还是查询设计 运行 查询。
我过去在 ODBC 链接 table 上使用 RunSQL 时遇到过一些问题。在处理带有主键的链接 table 时,您需要使用 dbSeeChanges 选项。
您上面提到的错误表明 table 没有设置主键。右键单击 table 并进入设计视图(在 MSAccess 中)。突出显示您希望作为主键(唯一标识符)的行。单击带有金钥匙图标的按钮。
尝试 UPDATE/INSERT 以下...
CurrentDb.Execute "INSERT INTO tblYourTableName VALUES ('YourTextValue',123)", dbSeeChanges
替换你的 table/columns/values.