如何通过MS Access前端从MATLAB中的SQL Server打开记录集
我有通过ActiveX服务器将MS Access表格中的数据读取到MATLAB,通过ActiveX服务器读取数据的代码(以下)。现在我想使用相同的代码从连接到SQL服务器的访问链接的表中读取数据,但我得到一个错误:如何通过MS Access前端从MATLAB中的SQL Server打开记录集
Invoke Error, Dispatch Exception: Source: DAO.Database Description: You must use the dbSeeChanges option with OpenRecordset when accessing a SQL Server table that has an IDENTITY column. Help File: jeterr40.chm Help Context ID: 4c5966
所以,问题的表有标识列,我需要用OpenRecordset指定'dbSeeChanges'选项。我的问题是,我该如何指定这个选项?我可以在网上看到很多关于如何在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');
我傻,dbSeeChanges
对于Options
参数,这是第三值,不是OpenRecordset
第二个参数:
Database.OpenRecordset Method (DAO)
发生了什么事现在是:Const dbOpenSnapshot = 4
- 您打开了一个“快照”记录集,该记录集是只读的。所以dbSeeChanges
是不需要的。
如果你只想从记录集中读取,这确实是最好的选择(但你应该改变你的代码中的常量以避免混淆)。
要打开一个可编辑的记录,使用
Const dbOpenDynaset = 2
Const dbSeeChanges = 512
rs = accessDB.OpenRecordset(sql_querry, dbOpenDynaset, dbSeeChanges);
'dbSeeChanges'是一个数字('CONST dbSeeChanges = 512(H200)')。你有没有尝试过'rs = accessDB.OpenRecordset(sql_querry,dbSeeChanges);'? (或使用常量512) – Andre
谢谢@Andre。 'dbSeeChanges = 512'给了我一个'Invoke Error(Description:Invalid argument。)'错误,但有趣的是''dbSeeChanges = 4'解决了这个问题。然而,还没有达到为什么那个工作的底部呢! – 4Oh4