2016-11-09 45 views
1

我有通過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

回答

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);