2016-11-09 11 views
1

MS Accessテーブルから、MATLABにデータを読み込み、ActiveXサーバ経由で非常にうまく動作するコードがあります。私は今、SQL Serverに接続されたアクセスリンクテーブルからデータを読み取るために同じコードを使用しようとしているが、エラーを取得しています: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

をので、問題のテーブルがIDENTITY列があり、私が必要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); 
関連する問題