• 締切済み

Oracleのテーブルに対して書込みができない

お世話になります。 DBをSQLServerからOracleに切り替えると、読み出しはできるのですが追加・更新ができなくなりました。どこが間違っているのかわからずお手上げ状態です。 ソースを貼り付けますので、教えていただけないでしょうか? Private Const SRC_SQL = "Provider=MSDAORA;Data Source=XXXX;User ID=XXXX; Password=XXXX;" Private Const TBL_A = "XXXX.TABLE_A" Sub DATA_UPD() Dim ws As Excel.Worksheet Dim A_cd As String Dim B_cd As String Set ws = ThisWorkbook.Worksheets("シート") Set cn = CreateObject("ADODB.Connection") cn.CommandTimeout = 0 cn.Open SRC_SQL strSQL = "SELECT A.* FROM " & TBL_A & " A" strSQL = strSQL & "WHERE A.行番 is not null" Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn, adOpenDynamic, adLockOptimistic With rs .MoveFirst Do While .EOF = False '↓★★★このステップで止まる★★★ .Fields("担当者A").Value = ws.Range("Aの担当者") .Fields("担当者B").Value = ws.Range("Bの担当者") .update .MoveNext Loop End With Set rs = Nothing End Sub エラーメッセージは、 実行時エラー '3251': 現在の Recordset は更新をサポートしていません。プロバイダか、選択されたロックタイプの限界の可能性があります。 不明な点があれば補足欄にて追記させていただきますので、 皆様どうぞよろしくお願いします。

みんなの回答

  • neko3839
  • ベストアンサー率37% (100/268)
回答No.1

同様の事例が下記にあります。 御参考まで ↓

参考URL:
http://homepage1.nifty.com/MADIA/vb/vb_bbs/200306_03060019.html
motsu2006
質問者

お礼

お礼・締め切りが大変遅くなり申し訳ございませんでした。 ここでの質問意外でもあれこれ探していた上、もう少し粘れば他の回答もいただけるかな、と思い……。 具体的な解決策はまだ見出せていませんが、原因はほぼ特定できました。 ありがとうございました。

関連するQ&A

  • 【EXCEL VBA】ローカルmdbからデータを取得したい

    (環境)  WindowsXP  Excel2003  Access2003 現在、SQLサーバーからデータを取得しています。 下記のソースです(一部抜粋) Private Const SRC_SQL = "Provider=SQLOLEDB.1;User ID=testid;Password=testpass;Data Source=TEST-DB-1;Initial Catalog=testDB" Private Const TBL_TEST = "TEST.テストテーブル" Public Sub TEST_PRO Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CreateObject("ADODB.Connection") cn.CommandTimeout = 0 cn.Open SRC_SQL strSQL = "SELECT X.*, FROM " & TBL_TEST & " X" strSQL = strSQL & " WHERE X.担当者CD = '" & wNAME & "'" strSQL = strSQL & " AND X.オープン日 >= '" & start_dt & "'" strSQL = strSQL & " AND X.オープン日 < '" & end_dt & "'" strSQL = strSQL & " ORDER BY X.オープン日 ASC" Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn With rs ~~~ End With Set rs = Nothing End Sub これを、SQLサーバーではなく、 C:\TESTACCESS.mdbのテーブル:テストテーブル からデータを取得するように変更したいのですが、 どのようにコーディングすればよろしいでしょうか? よろしくお願いします。

  • Excel VBA ADOでのCSV取込みについて

    下記は、Excel VBAでADOを使って、CSVデータを取り出すソースです。ソースは、とあるサイトからほぼ丸写しです。 Sub main()   Const DRIVER As String = "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ="   Const PROVIDER As String = "Provider=MSDASQL;Extended Properties="""   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Dim idx As Integer   Dim strSQL As String   cn.ConnectionString = PROVIDER & DRIVER & "C:\"""   cn.Open   '全件数取得   strSQL = "SELECT * FROM Sample.csv"   'CSVファイルの内容を取得   Set rs = cn.Execute(strSQL)   rs.MoveFirst   Do Until rs.EOF     For idx = 0 To rs.Fields.Count - 1       Debug.Print rs.Fields(idx).Value '←ここ     Next idx     rs.MoveNext   Loop   Set rs = Nothing   cn.Close   Set cn = Nothing End Sub ここで、「'←ここ」と示した行のrs.Fields(idx).Valueって、実際には「001」と書かれた値は、ダブルクォーテーションでも入ってない限りは「1」と変換されちゃいますよね?これをちゃんと、実際の値「001」のまま取得することって出来ないのでしょうか?

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • ADOでRecordsetオブジェクトをレコードソースに設定したい

    Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。 宜しくお願いします。 Private Sub FormNoKansu() Dim cn as New ADODB.Connection Dim rs as New ADODB.Recordset Dim strSql as String 'ODBCでサーバーに接続 cn.ConnectionString = "ODBCでMySQLに..." ... strSql = "SELECT * FROM ..." rs.Open strSql, cn 'ここに[rs]を入れられたらと思っています Me.Recordset = "" End Sub

  • アクセスVBA。ADO

    CSVから列を分割してテーブルにしたいかったので 下記のコードを記述しましたが、 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim datacount As Long Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\;" .Properties("Extended Properties").Value = "text;HDR=YES;" .Open End With Set rs = cn.Execute("SELECT * FROM 構成マスタ.csv") datacount = rs.Fields.Count For i = 0 To datacount strsql = "SELECT " & rs.Fields(i).Name & " INTO " & rs.Fields(i).Name & " FROM 構成マスタ.csv;" cn.Execute strsql Next i rs.Close cn.Close Set rs = Nothing Set cn = Nothing SQLを実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。

  • MSFlexGridでデータの追加の方法は?

    VB6.0 WINXP DB:Oracle10g  よろしくお願いします。 SELECT文でデータベースからデータを取ってきてMSFlexGridにデータを送ったのですが、そのデータに更に追加したいと思います。 ' ADOのオブジェクト変数を宣言する Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim STRSQL As String 'Oracleとの接続 cn.Open "Provider=MSDAORA;" & _ "Data Source=NT;", "scott", "tiger" ' SQLステートメントを指定してレコードセットを作成する re.Open STRSQL = "select * from TOKUI WHERE A01 = 100" rs.CursorLocation = adUseClient rs.Open STRSQL, cn, adOpenDynamic, adLockBatchOptimistic 'グリッドに送る Set MSFlexGrid1.DataSource = rs 'ここからのSELECT文を追加したいと思います。 STRSQL = "SELECT TOKUI FROM WHERE A01 = 200" Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open STRSQL, cn, adOpenDynamic, adLockBatchOptimistic よろしくお願いします。

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ADOでテーブルにハイパーリンクを追加したい(アドレスと表示文字列は別)

    アクセスのtblのURLフィールドに 表示文字列→aaa URL→http://www.yahoo.co.jp/ を追加したいのですがうまくいきません。 (URLフィールドのデータ型はハイパーリンク型です) Sub test() Dim moji As String Dim URL As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Documents" & "\access.mdb" Set rs = New ADODB.Recordset rs.Open "tbl", cn, adOpenStatic, adLockPessimistic moji = "aaa" URL = "http://www.yahoo.co.jp/" rs.AddNew rs("URL") = "#" & moji & "#" rs("URL") = "#" & URL & "#" rs.Update Set rs = Nothing Set cn = Nothing End Sub を実行すると 結果は 表示文字列もアドレスも「http://www.yahoo.co.jp/」になってしまいます。(そりゃそうか) どうすれば 表示文字列→aaa URL→http://www.yahoo.co.jp/ が実現できるのでしょうか? よろしくお願いします。 (ヴァージョンは2003です)

  • ExcelVBA Accessにデータ書き込み

    VBAでコマンドボタンを押した際に特定のセルの値をAccessDBに入力するプログラムを作りたいのですが、上手くいきません...。 実行した際に「実行時エラー '21472179000 (80040e 14)': オートメーションエラーです。」と表示されます。 また、ステップインで実行してみるとEnd Withのところでエラーが発生します。 恐らくインサート文が間違っていると思うのですが、試行錯誤しても解決できませんでしたので教えて頂きたいです。 以下プログラムです。 Private Sub CommandButton1_Click() Dim cn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim constr As String Dim strSQL1 As String Dim a As String a = Range("A1").Value Dim b As String b = Range("A2").Value Dim c As String c = Range("A3").Value constr = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=~.accdb strSQL1 = "insert into " & _ "TableName (1,2,3) " & _ "values ('" + Range("A1").Value + "','" + Range("A2").Value + "','" + Range("A3").Value + "')" Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open Set cmd = New ADODB.Command With cmd .ActiveConnection = cn .CommandText = strSQL1 .Execute End With Set cmd = Nothing Set rs = Nothing cn.Close Set cn = Nothing End Sub 以上、宜しくお願い致します。

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。