如何通过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'); 
+1

'dbSeeChanges'是一个数字('CONST dbSeeChanges = 512(H200)')。你有没有尝试过'rs = accessDB.OpenRecordset(sql_querry,dbSeeChanges);'? (或使用常量512) – Andre

+0

谢谢@Andre。 'dbSeeChanges = 512'给了我一个'Invoke Error(Description:Invalid argument。)'错误,但有趣的是''dbSeeChanges = 4'解决了这个问题。然而,还没有达到为什么那个工作的底部呢! – 4Oh4

我傻,dbSeeChanges对于Options参数,这是第三值,不是OpenRecordset第二个参数:

Database.OpenRecordset Method (DAO)

发生了什么事现在是:Const dbOpenSnapshot = 4 - 您打开了一个“快照”记录集,该记录集是只读的。所以dbSeeChanges是不需要的。

如果你只想从记录集中读取,这确实是最好的选择(但你应该改变你的代码中的常量以避免混淆)。

要打开一个可编辑的记录,使用

Const dbOpenDynaset = 2 
Const dbSeeChanges = 512 
rs = accessDB.OpenRecordset(sql_querry, dbOpenDynaset, dbSeeChanges);