
前提・実現したいこと
Accessファイルを読み込み、.datファイルに読み込んだデータを出力するプログラムを開発中です。
※AccessファイルはユーザーDSNで接続済み
※コンソールプログラムで開発中
【Accessファイルの構造】
社員ID = 短いテキスト
社員氏名 = 短いテキスト
部門No = 短いテキスト
入社日 = 日付/時刻型
退職日 = 日付/時刻型
出身 = 短いテキスト
部門名 = 短いテキスト
※NULL可のフィールドはありません。
【Accessファイルの中身】※.accdbファイルです。
■社員テーブル
社員ID 社員氏名 部門No 入社日 退職日 出身
00001 田中太郎 001 2000/04/01 2001/04/01 東京
00002 山田太郎 002 2001/04/01 2002/05/01 埼玉
00003 鈴木太郎 003 2002/04/01 2003/06/01 千葉
■部門テーブル
部門No 部門名
001 営業部
002 総務部
003 開発部
【datファイルへの出力イメージ】※ヘッダ・フィールドとの間はタブ区切りで出力
社員ID 社員氏名 部門No 部門名 入社日 退職日 勤続年数 出身
00001 田中太郎 001 営業部 2000年04月 2000年04月01日 1年0ヶ月 東京
00002 山田太郎 002 総務部 2001年04月 2002年05月01日 1年1ヶ月 埼玉
00003 鈴木太郎 003 開発部 2002年04月 2003年06月01日 1年2ヶ月 千葉
ここでは全員退職者という設定でお願いします。
困っていること/分からないこと
① 上記に記載の【datファイルへの出力イメージ】のようなヘッダ・フィールドの順番で出力するための正しい書き方がわからない。
どこに、どのような順番でコードを書けば良いかが分かりません。現在のコードだと任意の位置に出力してくれません。
② 上記に記載の【datファイルへの出力イメージ】のように"勤続年数"を算出する方法が分からない。
③ 上記に記載の【datファイルへの出力イメージ】の〇年〇月や〇年〇月〇日、〇年〇ヶ月というように出力するための書き方が分からない。同じくどこに、どのような方法でコードを書けば良いかが分かりません。
作成中のソースコード
Imports Systen.DataI.Odbc Imports System.Windows.Forms Imports System.IO Module Module1 Sub Main() Dim con As New System.Data.Odbc.OdbcConnection Dim command As New System.Data.Odbc.OdbcCommand Dim Adapter As New System.Data.Odbc.OdbcDataAdapter(command) Dim Syaintable As New DataTable Dim Bumontable As New DataTable Try '接続文字列 con.ConnectionString = "DSN=sampleDB" 'DBオープン con.Open() '列作成(社員テーブル) SyainTable.Columns.Add("社員ID", Type.GetType("System.String")) SyainTable.Columns.Add("社員氏名", Type.GetType("System.String")) SyainTable.Columns.Add("部門No", Type.GetType("System.String")) SyainTable.Columns.Add("入社日", Type.GetType("System.DateTime")) SyainTable.Columns.Add("退職日", Type.GetType("System.DateTime")) SyainTable.Columns.Add("出身", Type.GetType("System.String")) '列作成(部門テーブル) Bumontable.Colmuns.Add("部門No", Type.GetType("System.String")) Bumontable.Colmuns.Add("部門名", Type.GetType("System.String")) 'DataSetに格納 Dim ds As New DataSet ds.Tables.Add(SyainTable) ds.Tables.Add(BumonTable) 'コマンド command = con.CreateCommand 'SQL command.CommandText = "出力イメージになるようなSQLをここに書く" Adapter.SelectCommand = command 'DataTableに格納する Adapter.Fill(SyainTable) Adapter.Fill(Bumontable) 'ファイルパス Dim FilePath As String FilePath = "output.dat" '出力するためのファイルを開く処理 Dim sw As New System.IO.StreamWriter(FilePath, False, System.Text.Encoding.GetEncoding("shift_jis")) '変数用意 Dim colCount As Integer = SyainTable.Columns.Count Dim lastColIndex As Integer = colCount -1 'ヘッダを書き込む Dim i As Integer For i = 0 To colCount -1 'ヘッダの取得 Dim field As String = SyainTable.Columns(i).Caption 'フィールドを書き込む sw.Write(field) 'タブ区切りで書き込む If lastColIndex > i Then sw.Write(Tab) End If Next '改行する sw.WriteLine() 'レコードを書き込む For Each row In SyainTable.Rows Dim strTSV As String strTSV = "" strTSV = strTSV & row("社員ID").ToString() & Tab strTSV = strTSV & row("社員氏名").ToString() & Tab strTSV = strTSV & row("部門No").ToString() & Tab strTSV = strTSV & row("部門名").ToString() & Tab strTSV = strTSV & row("入社日").ToString() & Tab strTSV = strTSV & row("退職日").ToString() & Tab strTSV = strTSV & row("出身").ToString() '改行する sw.WriteLine(strTSV) Next 'sw.Close() Catch ex As Exception MessageBox.Show(ex.Message, "エラー") End Try SyainTable.Dispose() Adapter.Dispose() command.Dispose() con.Close() con.Dispose() MessageBox.Show("処理が終了しました", "通知") End Sub End Module
補足情報(FW/ツールのバージョンなど)
OS:Windows10
開発ツール:Visual Studio2019
フレームワーク:.NET Framework4.8
VBを学び始めてまだ日が浅く、意味のないロジックや無駄なコードがあるかもしれませんが、併せて教えていただければ幸いです。




回答2件
あなたの回答
tips
プレビュー