ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3628719 SQLから取得した値をEXCELへ表示したい
質問者:kiy0kiy0 お世話になります。
お分かりになる方教えてください。
VB.NETでSQLに繋いで画面から入力されたテキストボックスの値をパラメータに
結果がワークテーブルに格納されるストアドを呼び出します。
ストアドの結果(ワークテーブルの値)をSELECTして
今はダイアログに仮に出している状態です。
それからOLEDB接続を使ってEXCELにデータを表示したい
(セルに結果を貼り付けたい)のですが
データのやり取りがうまくいきません。

System.Data.SqlClient.SqlDataReaderで取得した値をSystem.Data.OleDb.OleDbDataReaderに移したいのですが
よくわかりません。

どなたか教えていただけませんでしょうか。
よろしくお願いします。
困り度:
  • 困っています
質問投稿日時:
07/12/26 14:24
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.2 余分なところまで書いてしまい、混乱させてみたいですね。
DB => VB => Excel 
これがやりたいわけですよね。
>' ◆ここでCOMExceptionエラーになってしまいます◆
>Recordset = cmdText.Execute
このエラーの部分は「DB => VB」の部分なので現在動いているソースを使ってください。


>System.Data.SqlClient.SqlDataReaderで接続せずに
>直接ADOで接続すると言うことですよね?
違います。COMオブジェクトを使う方法です。
COMは、アプリ(Excel、WORD、IE)を操作する仕様です。
詳しくは、下記を参照してください。
http://homepage1.nifty.com/rucio/main/dotnet/technique/teq2_COM.htm

「VB => Excel」の部分ですが、下記の部分だけ使ってください。
試しに、(1)に値をセットしてみてください。
>(セルに結果を貼り付けたい)のですが
エクセルは立ち上がっているかと思います。

======================
Dim xlApp As Object 'or Dim xlApp  As Excel.Application 
'(ObjectかExcel.Applicationの両方ためしてみて、Excel.Applicationがエラーが無ければExcel.Applicationを使ってください 下も同じ)
Dim xlSheet As Object 'or Dim xlSheet As Excel.Worksheet

Set xlApp = GetObject("C:\フルパス指定\test2.xls")


Set xlSheet = xlApp.Sheets("sheet1")'シート名をセット
======================

' Excel のセルに値を代入します。

xlSheet.Cells(1, 1).Value = (1)の値をセット

処理の最後に記述
======================
' Quit メソッドを使って Excel を終了します。
'xlApp.Quit '(Quitがエラーが無いかテストしてください。エラーが無ければコメントをはずしてください)
' オブジェクトを解放します。
Set xlSheet = Nothing
Set xlApp = Nothing

・エクセルを立ち上げておいてください。
・エラー処理をいれてませんから、追加してください。
・xlAppでエラーがでる場合は、参照設定を追加する。
  →COMコンポーネントのMicrosoft Excel xx.x Object Libraryを追加する。
回答者:tomo316
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
08/01/08 14:33
この回答へのお礼tomo316さん
ありがとうございます、解決いたしました(^^)

当初私が悩んでいたのはDBから取得した値をどうやって加工し
Excelにもっていくかということだったのですが
深く悩むところではなかったですね。
久々のProgrammingだったのであわあわしてしまいました。

本当にありがとうございました。

回答

ANo.1 レスが無いようなので、参考まで。
>System.Data.OleDb.OleDbDataReaderに移したいのですが
System.Data.OleDb.OleDbDataReaderでは無いのですが、EXCELが開いているとして、以下を試してみてください。

' ADO で SQL Server に接続し、
' パラメータ付きストアドプロシージャを実行する

' ADOのオブジェクト変数を宣言する
Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rec As New ADODB.Recordset

' 接続を確立する
cnn.Open "Provider=SQLOLEDB;" & _
"Data Source=(local);" & _
"Initial Catalog=pubs;", "sa", ""

' コマンドを実行する接続先を指定する
cmd.ActiveConnection = cnn

' パラメータを ? マークで指定する
cmd.CommandText = "reptq3 ?"

' それぞれのパラメータの値を指定する
cmd.Parameters(0).Value = パラメータ

(1) Set rec = cmd.Execute ' レコードを返す場合は戻り値を指定する

多分こんな感じで記述してると思います。

この部分を宣言部に記述
======================
Dim xlApp As Object 'or Dim xlApp  As Excel.Application
Dim xlSheet As Object 'or Dim xlSheet As Excel.Worksheet

Set xlApp = GetObject("C:\フルパス指定\test2.xls")


Set xlSheet = xlApp.Sheets("sheet1")'シート名をセット
======================

' Excel のセルに値を代入します。

xlSheet.Cells(1, 1).Value = (1)の値をセット

処理の最後に記述
======================
' Quit メソッドを使って Excel を終了します。
'xlApp.Quit
' オブジェクトを解放します。
Set xlSheet = Nothing
Set xlApp = Nothing
======================
回答者:tomo316
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/12/30 02:10
この回答への補足今下記のように記述しているのですが
Dim cmdText As New ADODB.Command
Dim Recordset As New ADODB.Recordset

' SQLStringを設定する
cmdText.CommandText = "SELECT * from wk_himoku"

' ◆ここでCOMExceptionエラーになってしまいます◆
Recordset = cmdText.Execute
この回答へのお礼遅くなってすみません。
tomo316さん、ありがとうございます!!!

上記に書いてくださった例は
System.Data.SqlClient.SqlDataReaderで接続せずに
直接ADOで接続すると言うことですよね?

初心者な質問で申し訳ないのですが
これはVB.netで実現することは可能なのでしょうか。
ご回答お願いいたします