質問 |
||
| QNo.4021391 | DAOでのOpenRecordsetの方法 | |
|---|---|---|
| 質問者:kmor |
SQLServerのDBをDAOを使って更新しようとしていますが、方法がわからず困っています。 ------------------- private Cn as DAO.Database private function fnc1() as integer Dim ws As DAO.Workspace Dim rcdst1 As DAO.Recordset dim strCnct As String dim strSQL As String strCnct = "ODBC;Driver={SQL Server};SERVER=" & g_strSVName & ";DATABASE=" & g_strDBName & ";UID=" & strpUserID & ";PWD=" & strpPassword & ";" 'DB接続 Set Cn = ws.OpenDatabase("", False, False, strCnct) strSQL = "SELECT * FROM Table1" Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset, dbDenyWrite, dbOptimistic) ------------------------------------- このOpenRecordsetで ODBC--すべてのレコードをロックできません。(3254) のエラーが出ます。 また、OpenRecordsetを Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset) とすると rcdst1.Edit で データベースまたはオブジェクトは読み取り専用なので、更新できません。 のエラーが出ます。 どうしたらいいでしょうか。 |
|
困り度:
|
||
| 質問投稿日時: 08/05/14 12:33 |
||
回答 |
|
| ANo.2 | ADOで解決したみたいですが、DAOでODBC接続して更新するにはODBC Directを用いる必要があります。 こんな感じです Dim Cn As DAO.Connection Dim ws As DAO.Workspace Dim rcdst1 As DAO.Recordset Dim strCnct As String Dim strSQL As String strCnct = "ODBC;Driver={SQL Server};SERVER=(local);DATABASE=pubs;UID=xxx;PWD=xxx;" 'DB接続 Set ws = DBEngine.CreateWorkspace("", "", "", dbUseODBC) Set Cn = ws.OpenConnection("", False, False, strCnct) strSQL = "SELECT * FROM Table1" Set rcdst1 = Cn.OpenRecordset(strSQL, dbOpenDynaset, dbExecDirect, dbOptimistic) rcdst1.AddNew rcdst1!ID = 1 rcdst1!Name = "aaa" rcdst1.Update http://msyk.net/vb5db/ODBCDirect.html http://www.ie.reitaku-u.ac.jp/~ykago/lectures/db/dao/dao05.html |
|---|---|
| 回答者:nora1962 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/14 22:02 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.1 | ぱっと見、問題なさそうなコードなんですが。 よくあるのは、DBそのものを誰かが先に掴んでいるという場合です。 既に業務用か何かのプログラムが、そのDBを排他的に開いてないですか? また、自分自身のプログラムが「閉じ忘れ」ってのも結構ありますよ。 なんとなく、DB側に問題があるような気がしたもので。 |
|---|---|
| 回答者:FEX2053 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/14 13:03 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | ですよね... とりあえずADOでやればできるのでそのように変更しました。 ありがとうございました。 |