DOBON.NET DOBON.NETプログラミング掲示板過去ログ

列同士の計算と指定列へ計算結果表示方法

環境/言語:[VB.NET 2003 Windows2000 Framework1.1]
分類:[.NET]

2006/04/03(Mon) 10:34:26 編集(投稿者)

お世話になります。
txtファイルからSELECT検索して、2つの列同士を計算させて、指定の列へ計算結果を入れたいのですが、指定列に計算結果を入れる方法が分からず困っています。
SELECT検索で「NulAS カラム名」を行なうと「New DataColumn」が使えないみたいで怒られます。
下のサンプルで、<値2>と<備考>の間に、値1と値2の平均値を入れたいのです。
何方かご教示をお願いします。

▼ここから
Imports System.Data.OleDb

Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim oConn As New OleDbConnection
Dim oCommand As New OleDbCommand
Dim oDataSet As New DataSet
Dim oDataAdapter As New OleDbDataAdapter

'DataTableオブジェクトの作成
Dim dt As DataTable
dt = New DataTable("DataTable1")

Try
'DB接続文字列の設定
'注:プロジェクトファイルホルダの下にあるbinホルダにcsvファイルを置く
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source=C:\;" + _
"Extended Properties=""Text;HDR=YES;FMT=Delimited"""

'「列計算サンプル.txt」のデータ
'<LotNo>,<値1>,<値2>, <備考>
' A1, 1, 6, P
' A2, 2, 7, B
' A3, 3, 8, C
' A4, 4, 9, D
' A5, 5, 10, E

'コネクションの設定
oCommand.Connection = oConn

'SQL文の設定
oCommand.CommandText = _
"SELECT LotNo,値1,値2,null AS 値AVE,備考 FROM 列計算サンプル.txt"

'計算結果列<値AVE>が追加された状態
'<LotNo>,<値1>, <値2>, <値AVE>,<備考>

'データを取得する
oDataAdapter.SelectCommand = oCommand
oDataSet.Clear()
oDataAdapter.Fill(oDataSet)
dt = oDataSet.Tables(oDataSet.Tables(0).ToString)

'値AVEの計算
Dim dc As DataColumn
dc = New DataColumn("値AVE", GetType(Integer))
dc.Expression = "(値1 + 値2) / 2"
dt.Columns.Add(dc)

'データグリッドにtxtのデータを連結する
DataGrid1.DataSource = dt

Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.Message, "エラー")

End Try

End Sub

End Class
▲ここまで
SELECT LotNo,値1,値2,(値1 + 値2) / 2 AS 値AVE,備考 FROM 列計算サンプル.txt

単純に上のような感じでできませんでしたっけ? 値1と値2は小数点型にキャストしないと、平均が整数で丸められるかもしれません。
trapemiyaさん、ありがとうございます。

SELECT文に埋め込む方法があったのですね。
以下に変更しましたところ、無事に小数点以下も取得できるようになりました。

"SELECT LotNo,値1,値2,((CDbl(値1)+CDbl(値2))/2) AS 値AVE,備考 FROM 列計算サンプル.txt"

ありがとうございました。また、宜しくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板