VBAでOracleにSQL発行(ADO)|変数定義がされていませんというエラーの解決方法とは?

このQ&Aのポイント
  • ExcelのVBAからOracleにADOでSQLを発行するためのコードを作成しましたが、コンパイルで「変数定義がされていません」というエラーが発生します。
  • コードの中でADODB.ConnectionとADODB.Recordsetの変数を宣言している部分でエラーが出ています。
  • このエラーは、参照設定が必要な可能性があります。適切な参照設定を行うことでエラーを解消することができます。
回答を見る
  • ベストアンサー

VBAでOracleにSQL発行(ADO)

ExcelのVBAからOracleにADOで登録したく下記のコードを作成しましたが コンパイルで"変数定義がされていません”に成ってしまいます。 参照設定に何か必要なのでしょうか? ----------------------------------------------- 'ADO用のオブジェクト変数の宣言 Dim cn As New ADODB.Connection ← ここでエラー Dim rs As New ADODB.Recordset Dim rownum As Long Dim colnum As Integer 'ADOコネクションの生成 cn.Open "Provider=OraOLEDB.Oracle;Data Source=" & ActiveSheet.Cells(26, 1) & ";User ID=scott;Password=tiger;", "scott", "tiger" 'ADOレコードセットの生成(全データを返すレコードセットの生成) rs.Open "select * from emp", cn, adOpenDynamic, adLockOptimistic, adCmdText ... ... ...

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

  • ベストアンサー
  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.2

参照設定でadoのライブラリを入れないとだめです。

mt1227
質問者

お礼

ありがとうございます。 何とか解決しました。

その他の回答 (1)

  • raphel_7
  • ベストアンサー率34% (86/252)
回答No.1

Dim cn As ADODB.Connection Dim rs As ADODB.Recordset New が余分では? Dim でなく Public したほうがいいかも

関連するQ&A

  • ADO 「NEW」の意味、必要性

    ADOを使ってACCESSやSQLサーバーへ接続する時に Option Explicit Sub ADO() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=SQLOLEDB;Data Source=○○○\SQLEXPRESS;Initial Catalog=test;Integrated Security=SSPI" rs.Open "table1", cn, adOpenStatic, adLockOptimistic というようなコードを書きますが、 変数の宣言の「 New 」はどういう意味なのでしょうか? 何のためにつけるのでしょうか? あえて「 New 」を取ると、 「オブジェクト変数または With ブロック変数が設定されていません。」 というエラーになります。 普通の変数(Dim table名 As String)に 「 New 」を付けるとコンパイルエラーになります。 違いがわかりません。 よろしくお願いします。

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • 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しなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • 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 「認証に失敗しました」

    ADOでデータベースに接続したいのですが ”実行時エラー -2147217843(80040e4d) 認証に失敗しました。” になります。 コードは Sub ado() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source" & CurrentProject.FullName ★ rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub です。 ★ 印の所でエラーになります。 宜しくお願いいたします。

  • ADOでアポストロフィー入りの値をフィルタしたい

    例えばレコードの値が「あああ'ああ」だった場合、 ----------------------------------------------------- Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'あああ'ああ'" MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ----------------------------------------------------- とすると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になってしまいます。 ADOでアポストロフィー入りの値をフィルタする方法を教えてください。

  • アクセスでADO 並べ替えが適用できない

    アクセスでADOを使っているのですが、 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "SELECT * FROM Q1", cn, adOpenStatic, adLockPessimistic rs.Sort = "受付日 DESC" For i = 1 To rs.RecordCount ・ ・ ・ このようなコードを作っていますが、 rs.Sortの部分で、「並べ替えを適用できません」になります。 レコード数は、15000件くらいです。 なぜ並べ替えができないのでしょうか? しょうがないからクエリで最初から並べ替えしておきますが、原因を教えてください。

  • VB6とSQL SERVER 2005のADO接続方法

    VB6とSQL SERVER 2005(Developer Edition)のADO接続方法がわかりません。 今までSQLSERVER2000で開発していたのですが、DBをSQLSERVER2005に 変更したところ接続できませんでした。 以下はSQLSERVER2000時のソースなのですが、 2005の場合ConnectionStringはどうやればいいのでしょうか? --------------------------------------- Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Set rs = New ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "Provider=SQLOLEDB.1;" & _ "User ID=" & strUsr & ";" & _ "Data Source=" & strSvr & ";" & _ "Password=" & strPass cn.CursorLocation = adUseClient cn.Open --------------------------------------- 初歩的な質問で申し訳ありませんがどなたかお助けください。

  • ADOで現在のレコードの次のレコードの値も取得

    ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

専門家に質問してみよう