Excel VBAのADODBコネクションでExecuteされない理由を知りたい

このQ&Aのポイント
  • Excel VBAのADODBコネクションでExecuteされない理由を知りたいです。処理が終わらずに【応答なし】になってしまいます。
  • ConnectionOpenは正常に処理され、ExePrcのcmd.Executeで止まってしまいます。先月までは正常に動いていたのですが、要因が分かりません。
  • prc_yotei_genka_meisaiの変更後にエラーが発生し、実行時エラー2147467259(`80004005)となります。要因を特定するために質問させてください。
回答を見る
  • ベストアンサー

Executeされない理由が知りたいので

Excel VBAのADODBコネクションについて。 Executeされない理由が知りたいのです。 お世話になっております。 引継が上手いいかず、原因が分からないExcelVBAがあり困っております。 【フォーム】ボタン3を押します。 Private Sub CommandButton3_Click() If MsgBox("当月の予定原価を集計します", vbYesNo) = vbNo Then Exit Sub End If DbLogic.ConnectionOpen DbLogic.ExePrc DbLogic.ConnectionClose MsgBox "終了しました", vbOKOnly End Sub 【標準モジュール】DbLogic Sub ConnectionOpen() '接続文字列作成 Dim con_str As String con_str = "Driver={Oracle in OraHome92};DBQ=" & oracle_sid & _ ";UID=" & oracle_user & _ ";PWD=" & oracle_password ' 接続オブジェクトの作成 Set cn = CreateObject("ADODB.Connection") ' 接続 cn.Open con_str cmd.ActiveConnection = cn cmd.CommandTimeout = 0 End Sub Function ExePrc() cmd.CommandType = adCmdStoredProc cmd.CommandText = "prc_yotei_genka_meisai" cmd.Execute ←処理が終わらない cmd.CommandType = adCmdText End Function デバックをすると cmd.Executeで処理が終わらずに【応答なし】になってしまいます。 調べるとココにはSQLを渡すと思ったのですが、違うようなのです。 ConnectionOpenは処理されて、 ExePrcのcmd.Executeで止まってしまいます。 prc_yotei_genka_meisaiを適当に変更したら、 実行時エラー2147467259(`80004005) となりエラーで止まりますので、 prc_yotei_genka_meisaiここの何かに問題があるのかなとは 当たりを付けております。 先月までは普通に動いたとのことなのですが、 考えられる要因などご存知の方おられませんでしょうか。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>cmd.CommandType = adCmdStoredProc >cmd.CommandText = "prc_yotei_genka_meisai" CommandTypeがadCmdStoredProcなので CommandText をストアド プロシージャ名として評価します。 つまり、Oracleデータベースに登録されたストアド プロシージャ"prc_yotei_genka_meisai"に問題がある可能性が高い。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc364124.aspx
shinnnn
質問者

お礼

今まで動いていたことを考えると データベース内の何らかのデータが 邪魔をしてプロシージャの処理をとめていたのではないかと考えています。

関連するQ&A

  • CMD.Executeの結果をメッセージボックスで表示したい

    Public Sub SQLActionCmd()     Dim CN As ADODB.Connection     Dim CMD As ADODB.Command     Dim MYSQL As String     '接続     Set CN = CurrentProject.Connection     '更新     MYSQL = "SELECT * FROM 名簿 WEHRE 性別 = "男" ;"     Set CMD = New ADODB.Command     CMD.ActiveConnection = CN     CMD.CommandText = MYSQL     CMD.Execute    '終了     Set CMD = Nothing     RS.Close: Set RS = Nothing     CN.Close: Set CN = Nothing    End Sub と言う感じで実際にはAccessのフォームのボタンをクリックしたタイミングでコードをかいているのですが、このCMD.EXECUTEを実行した結果、テーブルに該当データがなければない旨のメッセージボックスを出したいのです。 そういうことは可能でしょうか?

  • 【ADO】「Execute」を使うときは「Update」は不要?

    Sub test() 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:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

  • 下記質問Vol.3です

    If intSr = 1 Then intRes = MsgBox("追加してもO.K.ですか?", vbYesNo + vbQuestion) If intRes = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL .Execute End With Call 状態変化(2) End If Else intRes2 = MsgBox("更新しても良いですか?", vbYesNo + vbQuestion) If intRes2 = vbYes Then With cmd .ActiveConnection = cn .CommandType = adCmdText .CommandText = strSQL2 .Execute End With Call 状態変化(2) End If End If End Sub よろしくお願いします。 関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999 http://www.okweb.ne.jp/kotaeru.php3?q=161003

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • Insert時に一意制約エラーがでる。

    よろしくお願いします。 VB6.0 DB:ORACLE8.1.6 クライアントWIN2000 サーバーWIN2000SERVER VBでデータをINSERTするプログラムを作ったのですが、どうしても一意制約エラーが出てしまいます。 これはデータの都合上仕方が無いのか? (データの主キーに「.」が入っているのでエラーになるのでしょうか?) プログラムが悪いのか? よろしくお願いします。 エラーは2回目の実行部分です。 データ(すべて文字型) 000   001   002 ベルリン12345 ベルリン 12345 ベルリン123.45 ベルリン 123.45 ベルリン123 45 ベルリン 123 45 プログラム strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン12345','ベルリン,'12345')" '処理のチェック If Execute_sql(strSql) = False Then Err.Raise -1, , "失敗しました!" cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing Exit Sub End If strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン1234.5','ベルリン','123.45')" '処理のチェック If Execute_sql(strSql) = False Then Public Function Execute_sql(strSql As String) As Boolean Dim cmd As New ADODB.Command Execute_sql = False ' Commandオブジェクトを作成 Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSql ' アクション クエリーを実行 cmd.Execute      ←←←←←←エラー部分 Set cmd = Nothing Execute_sql = True Exit Function

  • VB6.0でエクセルを扱うプログラムについて

    こんにちは。VB初級者です。宜しくお願いします。 現在、VB6.0でエクセルの表を操作するようなプログラムを作っています。下に書いたプログラム(わかりにくいとは思いますが、ご教授お願いします。)で値の更新は出来たようなのですが、実際に表を開こうとすると”不正な処理が行われました”というエラーメッセージが出て開くことが出来ません。ADOオブジェクトでエクセルを扱うのがちょっとおかしい(?)のかもしれませんが、今回はEXCELオブジェクトは使わないという方針です。 自分ではどこが間違っているかわかりませんでしたので教えて頂ければと思います。宜しくお願い致します。 Private Sub Command1_Click() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Properties("Extended Properties") = "Excel 8.0" cn.Properties("Data Source") = "C:\VB\株価管理\株価.xls" cn.Open Dim cmd As ADODB.Command Dim mySQL As String mySQL = "update [株価$] set 高値 =10000 where 高値 = 7" Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = mySQL cmd.Execute Set rst = New ADODB.Recordset rst.Source = "Select * From [株価$]" rst.ActiveConnection = cn rst.CursorType = adOpenDynamic rst.Open , , , , adCmdText Do While Not rst.EOF Debug.Print rst.Fields("高値") rst.MoveNext Loop rst.Close cn.Close Set rst = Nothing Set cn = Nothing Set cmd = Nothing End Sub

  • エクセルからアクセスのアクションクエリ エラー

    今までできてたコードが急にできなくなりました。 エクセルからアクセスのアクションクエリを実行するvbaコードなのですが Sub 削除クエリを実行する () Dim cmd As New ADODB.Command Dim MySQL As String cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & "D:\(test).accdb" MySQL = "DELETE Tローカル.* FROM Tローカル;" cmd.ActiveConnection = cn cmd.CommandText = MySQL cmd.Execute MySQL cn.Close: Set cn = Nothing End Sub を、今までやっていたのに、 昨日からできなくなりました。 cn.Open "Provider の部分で、 実行時エラー、-2147467259(80004005) エラーを特定できません。 となります。 環境は、win7、オフィス2010です。

  • ADO オブジェクトの渡し方

    こんにちは。ADOについてお教えください。 フォームをロード時に接続プロシージャと切断プロシージャを走らせたいと思います。 ConnectDatabaseを呼び出しは成功しますが、CloseDatabase呼び出しには失敗します。 スコープの問題で、rs、cnのオブジェクトが無い為だと思います。 ConnectDatabaseで作成されたcn、rsオブジェクトを別の関数で処理するにはどのようにコードをかけばよろしいでしょうか?宜しくお願い致します。 Private Sub Form_Load() Call ConnectDatabase Call CloseDatabase End Sub Module1 ------------------ sub ConnectDatabase() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset 処理~~~~ end sub sub CloseDatabase() rs.Close cn.Close Set rs = Nothing Set cn = Nothing end sub

  • 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 以上、宜しくお願い致します。

  • excelで’付きデータのoracle登録

    office2010 oracle12c 下記のexcelマクロで文字列の中に'があるとoracleのテーブルにデータ登録できません。 Option Explicit ' ADOのオブジェクト変数を宣言 Private cnn As New ADODB.Connection Private cmd As New ADODB.Command Sub add() On Error GoTo err_hdr Sheets("table").Select ' ' Oracleの接続 cnn.Open "Provider=OraOLEDB.Oracle;" & _ "Data Source=Source_name;", "ID", "PW" Set cmd.ActiveConnection = cnn '追加の例 Dim row As Long row = 1 Do Until ActiveSheet.Cells(row, 1) = "" With cmd .CommandText = "insert into table " & " (name1, name2)" & "" _ & "VALUES('" & ActiveSheet.Cells(row, 1) & "','" & ActiveSheet.Cells(row, 2) & "')" .CommandType = adCmdUnknown .Execute End With row = row + 1 Loop cnn.Close Set cmd = Nothing Set cnn = Nothing Exit Sub err_hdr: Resume Next End Sub 具体的には name2のデータがPEOPLEだと上記マクロでoracleのtableにデータ登録できますが、 name2のデータがPEOPLE'Sの様に'がついているとデータ登録できません。 ’付きの文字列を、上記マクロ修正してデータ登録可能でしょうか?

専門家に質問してみよう