こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

Visual Basicでデータベース接続について

こんにちは。
VB初心者です。

前任者が作成したCSVファイルをメモリに格納するプログラムから
Oracleテーブルのデータからメモリへ格納するプログラムへ
変更したいのですが、全くのVB初心者でわかりません。
ヒントでもいいですので教えてください。

CSVファイルをメモリに格納するプログラムは以下の通りです。
Function ReadCSV(ByVal szFilePath As String) As String()()
' (全般) に Imports 追記
' Imports System.IO
' Imports System.Text
Dim arrayTempLines()() As String = {}
' ストリームを開きます
Dim reader As New IO.StreamReader(szFilePath, System.Text.Encoding.Default)
Dim iIdx As Integer = 0
' 一気に読み込みます
Dim szData As String = reader.ReadToEnd()
' 不要な文字を取り除きます
szData = szData.Replace(vbCr, "")
' 改行で分離して配列に格納します
Dim arrayLines() = szData.Split(vbLf)
Dim szLine As String
For Each szLine In arrayLines
Dim iCount As Integer = 0
Dim szTemp As String = ""
Dim bValid As Boolean = False
If szLine.Length > 1 Then
' 配列の追加します
ReDim Preserve arrayTempLines(iIdx)
' カンマ区切りで分離して配列に格納します
arrayTempLines(iIdx) = szLine.Split(",")
' データのチェックをします
If arrayTempLines.Length >= 1 And _
arrayTempLines(iIdx)(0) <> "" Then bValid = True
' 不要データを除きます
For Each szTemp In arrayTempLines(iIdx)
arrayTempLines(iIdx)(iCount) = _
szTemp.Replace(Chr(34), "").TrimEnd() ' Chr(34)は"のことを指します
iCount += 1
Next
' 配列数チェックをします
If bValid Then iIdx += 1
End If
Next
' 配列を切り詰めます
'ReDim Preserve arrayTempLines(iIdx - 1)

' 読み込み用のストリームを閉じます
If (Not reader Is Nothing) Then
reader.Close()
reader = Nothing
End If

ReadCSV = arrayTempLines
End Function

以上です。

ちなみに、Oracleテーブルの中にはフィールドが二つあります。

投稿日時 - 2015-10-15 12:10:25

QNo.9064313

困ってます

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

2段階に分けて考えましょう。
1.Oracleからデータを抽出してDataTableに保存。
2.DataTableの中のデータをCSVファイルに保存する。

そこで次のサイトが参考にならないでしょうか。
1.http://www.oborodukiyo.info/ADONET/VS2008/ADONET-HowToAccessOracle.aspx
2.http://www.oborodukiyo.info/CSharp/VS2010/CS-SaveDataTableToCSV.aspx

1ではDataTableにデータを入れた後、DataGridViewで表示していますが、ここは省略してみて考えてください。

頑張ってください。

投稿日時 - 2015-10-17 01:35:14

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

直接Oracleから取り込むにしろ、Oracleからのデータ取得が理解できなければなにもできないのではないでしょうか?
まずは、他の回答者がおっしゃられている通り、簡単なCSV出力から試してみては?
それが理解できれば、元のコードに組み込むことも出来るのではないでしょうか?

投稿日時 - 2015-10-16 13:31:54

-広告-

ANo.2

Oracleのデータをカンマ区切りファイル(CSV)に落としてください。
#1のご回答でもおっしゃっています。そのやり方を勉強してください。
CSVファイルは、異種のソフトの、(テキスト)データ受け渡しの、汎用性がある、最後の手段です。
そしてエクセルブックを開き、VBE画面を開き、標準モジュールに(この辺はエクセル
マクロやVBAの解説書やWEB記事(「エクセル VBA 実行方法」で検索)を読んでください)
Sub test01()
Set objfs = CreateObject("scripting.filesystemobject") 'VBSを使う宣言
Dim s As Variant
Set objtext = objfs.OpenTextfile("C:\Users\XXX\documents\発注明細0710.csv") 'CSVファイルのフルパス指定。ファイルを開く。
i = 1 'エクセルのシートの第1行の1
Do While objtext.atendofstream <> True 'ファイルデータの最終行まで繰り返し
mytext = objtext.readline '1行を読む
MsgBox mytext '確認のた画面に表示。本番では削除かコメント化
s = Split(mytext, ",") 'セパレータ文字のカンマで区切って分離して、配列的なところsへ入れる
'下記部分で、各列のセルへ項目データを配分
For j = 0 To UBound(s) - 1
Worksheets("Sheet1").Cells(i, j + 1) = s(j) 'j+1の+1は、sが0から始まるので必要。Sheet1に書き出す。
Next j
i = i + 1 'シートの次行に書き出す用意。iはポインター的なもの
Loop
objtext.Close '作業終了したので、ファイルを閉じる
End Sub
をコピペする。実行するとエクセルシート(Sheet1)に
データが展開される。上記は、VBScriptをVBAでやるもの。
ReadAllに対してReadLineの考え方、扱い方です。
VB初心者なら、こちらが「当面のおすすめ」。
今後VBを勉強してください。
結果(私のサンプル例)
発注リスト

商品番号商品名メーカー数量単位
12324ノートA製紙20包
24123マーカー近藤産業30箱
35922クリップ井上金属10箱
47721消しゴムB産業5袋
59520ホッチキスC精工5箱

投稿日時 - 2015-10-15 17:36:46

ANo.1

わからないのでしたらOracleテーブルをcsvファイルにしたほうが早いかと思われます
これは比較的簡単な作業なので、検索すれば色々出てきます

その上でcsvデータを読み込めば同一の作業はできるかと

投稿日時 - 2015-10-15 12:13:38

補足

angel2015さん、アドバイスありがとうございます。
おっしゃる通りcsvファイルを作成後、現在のコードを通せば
良いのですが、少しでも処理時間を短縮したかったので
直接データベースからの処理をしたいのです。

投稿日時 - 2015-10-15 13:39:12

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-