Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13293 / 13644 ツリー ←次へ | 前へ→

【6040】オラクルのテーブルをエクセルにコピーしたいのですが。。。 オラクルボーイ 03/6/13(金) 14:23 質問
【6042】条件を明確にしましょ!! こうちゃん 03/6/13(金) 14:57 発言
【6043】ご返答ありがとございます。 オラクルボーイ 03/6/13(金) 15:26 質問
【6046】Re:ご返答ありがとございます。 こうちゃん 03/6/13(金) 16:50 発言
【6062】これでフォローになりますか? 孫悟空 03/6/14(土) 22:06 回答
【6109】ありがとうございました! オラクルボーイ 03/6/16(月) 19:48 お礼

【6040】オラクルのテーブルをエクセルにコピーし...
質問  オラクルボーイ  - 03/6/13(金) 14:23 -

引用なし
パスワード
   お疲れ様です。初めて書き込みさせて頂きます。よろしくお願いします。
さて、ご質問なのですが、題名にもある通り、オラクルのテーブルをエクセルファイルに
コピーしたいのですが、VBAの記述がイマイチわかりません。
VBAでSQLのSELECT文を発行しても、1件しか取得出来ないので、複数レコードある
オラクルのテーブルデータを全てエクセルにコピーする方法がわかりません。
どなたか知ってらっしゃる人がいれば教えて頂きたいのですが。。。
若輩者の私にぜひ、ご指導ご鞭撻のほど、よろしくお願いします。

【6042】条件を明確にしましょ!!
発言  こうちゃん E-MAIL  - 03/6/13(金) 14:57 -

引用なし
パスワード
   オラクルボーイさん、こんにちは

>VBAでSQLのSELECT文を発行しても、1件しか取得出来ないので、複数レコードある
>オラクルのテーブルデータを全てエクセルにコピーする方法がわかりません。

この「1件しか取得出来ないSQLのSELECT文」のVBAをアップしてみてくださいな。
DBからのデータ取得方法は複数ありますので、オラクルボーイさんが取られている方法の応用のほうがわかりやすいと思いますし、ODBCなのかSQL*Net使ってるのか、ADOなのかoo4oなのかとか、条件もわからないとレスがつけづらいですね。

【6043】ご返答ありがとございます。
質問  オラクルボーイ  - 03/6/13(金) 15:26 -

引用なし
パスワード
   ▼こうちゃん さん:

こんにちわ。ご返答ありがとうございます。

>この「1件しか取得出来ないSQLのSELECT文」のVBAをアップしてみてくださいな。
>DBからのデータ取得方法は複数ありますので、オラクルボーイさんが取られている方法
>の応用のほうがわかりやすいと思いますし、ODBCなのかSQL*Net使ってるのか、ADOなの>かoo4oなのかとか、条件もわからないとレスがつけづらいですね。

という事でしたが、実は私も相当の初心者でして、、、オラクルとエクセルの接続環境も
イマイチわからない状態でして。。。今はこの辺の事を勉強中の身分でして、
上記の条件の返答もうまく出来ないのですが、、、もっと勉強します。すいません。
ちなみに以下のロジックだと1件のある項目は取得出来ます(当たり前ですが、、、)

Function M_Test()
  Dim GOraSession   As Object
  Dim GOraDatabase  As Object
  Dim GOraFields   As Object
  Dim StrSQL     As String
  Dim aaa       As String

'データベースとの接続
Set GOraSession = CreateObject("OracleInProcserver.XOrasession")
Set GOraDatabase = GOraSession.DbOpenDatabase("aaa.world", "aaa/bbb", 0&)

StrSQL = "select * from test_tbl"
    
'SQL実行
Set GOraDyna = GOraDatabase.dbcreatedynaset(StrSQL, 0&)
Set GOraFields = GOraDyna.Fields

aaa = GOraFields("test_data1").Value

Range("A1").Select
ActiveCell.FormulaR1C1 = aaa

Set GOraSession = Nothing
Set GOraDatabase = Nothing
   
End Function

こんな感じのコードを記述しています。
なんだかうまく説明出来なくてごめんなさい。。。

【6046】Re:ご返答ありがとございます。
発言  こうちゃん E-MAIL  - 03/6/13(金) 16:50 -

引用なし
パスワード
   オラクルボーイさん、こんにちは

>Function M_Test()
>  Dim GOraSession   As Object
>  Dim GOraDatabase  As Object
>  Dim GOraFields   As Object
>  Dim StrSQL     As String
>  Dim aaa       As String
>
>'データベースとの接続
>Set GOraSession = CreateObject("OracleInProcserver.XOrasession")
>Set GOraDatabase = GOraSession.DbOpenDatabase("aaa.world", "aaa/bbb", 0&)
>
>StrSQL = "select * from test_tbl"
>    
>'SQL実行
>Set GOraDyna = GOraDatabase.dbcreatedynaset(StrSQL, 0&)
test_tblに複数のレコードがあれば、ここでGOraDynaにはレコード取得できているはずですから・・

>Set GOraFields = GOraDyna.Fields

i = 0
Do While Not 「GOraDynaの終了判定」
 >
 >aaa = GOraFields("test_data1").Value
 >
 i = i + 1
 Cells(i,1).Select

 >ActiveCell.FormulaR1C1 = aaa

「GOraDyna次のレコードへ」

Loop
>
>Set GOraSession = Nothing
>Set GOraDatabase = Nothing
>   
>End Function

こんな感じでループで取り出せると思いますよ。
「 」で記述したところの実際の書き方は勉強してくださいね。
iもLongで宣言しといてください。
手元にオラクルの資料がなくて思い出せません。(どなたかHELPです)^^;

【6062】これでフォローになりますか?
回答  孫悟空  - 03/6/14(土) 22:06 -

引用なし
パスワード
   オラクルボーイさん、こうちゃん こんにちは、
以下のようなコードで、できると思います。
ちなみにオラクルoo4oのサンプルコードに、よく似たものが載ってます。
一度のぞいてみてください。結構勉強になります。

Function M_Test()
  Dim GOraSession, GOraDatabase, GOraDyna, GOraFields As Object
  Dim StrSQL As String
  Dim i, icols As Long

  'データベースとの接続
  On Error GoTo oo4o_Error
  Set GOraSession = CreateObject("OracleInProcserver.XOrasession")
  On Error GoTo 0
  
  On Error GoTo Con_Error
  Set GOraDatabase = GOraSession.DbOpenDatabase("aaa.world", "aaa/bbb", 0&)
  On Error GoTo 0
  
  'SQL実行
  StrSQL = "select * from test_tbl"
  Set GOraDyna = GOraDatabase.DbCreateDynaset(StrSQL, 0&)
 
  '以下2通りの方法でデータを貼り付けます。
  '1. CopyToClipboardを使って、シートにデータを配置する方法
  GOraDyna.CopyToClipboard -1
  Range("A2").Select
  ActiveSheet.Paste
  
  '一旦データを消して
  Cells.ClearContents
  
  '2.ループで連続データ貼り付ける方法
  Set GOraFields = GOraDyna.Fields

  ' シートに見出しを配置します
  For icols = 1 To GOraFields.Count
    Cells(1, icols).Value = GOraFields(icols - 1).Name
  Next icols

  ' シートにデーターを配置します
  i = 2
  Do While Not GOraDyna.EOF
    For icols = 1 To GOraFields.Count
      Cells(i, icols).Value = GOraFields(icols - 1).Value
    Next icols
    i = i + 1
    GOraDyna.DbmoveNEXT
  Loop

  Set GOraSession = Nothing
  Set GOraDatabase = Nothing
Exit Function

oo4o_Error:
  MsgBox "oo4o_Error"
Exit Function

Con_Error:
  MsgBox "Con_Error"
Exit Function

End Function

【6109】ありがとうございました!
お礼  オラクルボーイ  - 03/6/16(月) 19:48 -

引用なし
パスワード
   お返事が遅れて申し訳ありません。
こうちゃんさん、孫悟空さん、ご指導ありがとうございました。
おかげでうまくExcelにコピーする事が出来ました、感謝です!!

私もまだまだオラクル初心者ですので、もっともっと勉強して
ここの質問に答える側になれるようにがんばります!
その道中でどうしてもこえられない高い壁にぶつかる事があればまた
厳しく指導してやって下さいませ。

この度はお世話になりました、ありがとうございます。

13293 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free