Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
DataTableから新たなDataTableを生成し表示
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30415#CommentId83602
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
さすが
 (社会人)
投稿日時
2019/8/13 17:27:23
魔界の仮面弁士様
何度もご回答誠にありがとうございます。
実際にコードを書き込み、疑問点が出てきました。
①
Ds.Relations.Add("Rel消費税課税", dt2.Columns("Key"), dt1.Columns("消費税課税"), True)
のところでどうしてもエラーが発生します。
Accessファイルから「クエリ1」を生成し、DataSetに格納するのですが、その方法を、
(1)
Private Function Createクエリ1() As DataTable
dt1 = New DataTable("クエリ1")
Cn = New OleDbConnection
Rs = New ADODB.Recordset
Dim SQL As OleDbCommand = Cn1.CreateCommand
SQL.CommandText = (省略)
Cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = kanridata.mdb"
Cn.Open()
Da = New OleDb.OleDbDataAdapter(SQL_CLTFee1)
Da.Fill(dt1)
Ds.Tables.Add(dt1)
Return dt1
End Function
というコードでdt1というDataTableを、Fillし、DataSetにAddし、Returnしてやると、
たくさんの文章がイミディエイトウィンドウに現れて、
「親列および子列に型が一致する列が含まれていません。」
というエラーメッセージ」が現れます。
(2)
Cn = New ADODB.Connection
Rs = New ADODB.Recordset
Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Cn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = kanridata.mdb"
Cn.Open()
dt1 = New DataTable
dt1.TableName = "クエリ1"
Dim SQL As String
SQL = (省略)
Rs.Open(SQL, Cn)
Da = New OleDb.OleDbDataAdapter()
Ds = New DataSet()
Da.Fill(Ds, Rs, dt1.TableName)
というコードで、"クエリ1"という名のDataTableをDataSetにFillしてやると、
「'column' 引数を Null にすることはできません。」
というエラーメッセージが現れます。
("クエリ1"という名のDataTableがあるのであり、dt1というDataTableがあるわけではないので、
Nullとかいうエラーになるのは当然ではありますが。)
どこを、どのように直せばいいのでしょうか?
②今回の質問の条件下では、質問のタイトルである
「DataTableから新たなDataTableを生成」
する必要は、どうやらなさそうであることが分かりました。
しかし、あまり書きたくなかったのですが、仮にTableAというテーブルがあるとして、フィールドは、
契約ID|担当者名|取引先名|業務完了日|ナンバリング用フィールド|
とあるとします。
このテーブルから、
〇「行見出し」 = 担当者名
〇「列見出し」 = 業務完了日(8/13とか8/31とか)
〇「値」 = 取引先名をすべて結合した文字列
というクロス集計クエリを生成しようとする場合、
Step1 TableAに、1人の担当者が1日に業務完了させた契約にナンバリングを行う。
Step2
〇「行見出し」 = 担当者名および業務完了日
〇「列見出し」 = ナンバリングした番号
〇「値」 = 取引先名
というクロス集計クエリ1-1を生成する。
Step3 クエリ1-1の取引先名の文字列全てを結合した「文字列集計列」を追加する。
追加するのではなくこれをクエリで行うならば、そのクエリを仮にクエリ1-2と名付ける。
Step4 クエリ1-1もしくはクエリ1-2から
〇「行見出し」 = 担当者名
〇「列見出し」 = 業務完了日
〇「値」 = 取引先名をすべて結合した文字列
というクロス集計クエリ1-3を生成する。
というステップを踏む必要があると思われ、過去に実際にこれをAccessで行ったことがあります。
これをVBで行う場合、
「DataTableから新たなDataTableを生成」
することは避けて通れないと思います。
しかし、ご教示いただいたコードは未だ、
DataTableから新たなクエリを生成するためのコードとなっていないように感じられました。
再度お願いいたします。
こちらがお示しした条件下で
「DataTableから新たなDataTableを生成」する方法を教えてください。