我有代码(下面)通过ActiveX服务器将数据从MS Access表读入MATLAB,非常好用。我现在尝试使用相同的代码从连接到SQL Server的Access链接表中读取数据,但是收到错误:
调用错误,调度异常: 来源:DAO.Database 描述:访问具有IDENTITY列的SQL Server表时,必须对OpenRecordset使用dbSeeChanges选项。 帮助文件:jeterr40.chm 帮助上下文ID:4c5966
因此,有问题的表有一个IDENTITY列,我需要指定' dbSeeChanges' OpenRecordset选项。我的问题是,如何指定此选项?我可以在网上看到很多关于如何在VBA中做到这一点的例子,但没有一个与MATLAB兼容。这是我的代码:
% Setup environment
app = 'Access.Application';
DBAddress = 'O:\testData.accdb';
% Load an Activex server for Access
try
svr = actxGetRunningServer(app);
catch err
svr = actxserver(app);
end
% Load the required database file
accessDB = svr.DBEngine.OpenDatabase(DBAddress);
% Query the database for the required records
sql_querry = 'SELECT * FROM dbo_PatientMeasurementResults;';
rs = accessDB.OpenRecordset(sql_querry);
我已尝试过显而易见的事,但这不起作用:
rs = accessDB.OpenRecordset(sql_querry,'dbSeeChanges');
答案 0 :(得分:1)
愚蠢的我,dbSeeChanges
是Options
参数的值,它是第三个,而不是OpenRecordset
的第二个参数:
Database.OpenRecordset Method (DAO)
现在发生的事情是:Const dbOpenSnapshot = 4
- 你开了一个"快照"记录集,它是只读的。因此不需要dbSeeChanges
。
如果你只想从记录集中读取,那么这确实是最好的选择(但是你应该在你的代码中改变你的常量以避免将来混淆)。
要打开可编辑记录集,请使用
Const dbOpenDynaset = 2
Const dbSeeChanges = 512
rs = accessDB.OpenRecordset(sql_querry, dbOpenDynaset, dbSeeChanges);