- PR -

クロス集計のデータグリッド表示について

1
投稿者投稿内容
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2005-06-16 17:54
はじめまして TAKADONと申します
開発環境 Windows2000SERVER+VB.NET+Sqlserver2000でWEBアプリケーションを作っています。開発経験は半年になります。

今回、困っているのは今までは
テーブルの内容をデータグリッドで表示させている開発ばかりだったのですが
クロス集計を行ったデータをデータグリッドに表示させたいのですが
データアダプタのウィザードではスキーマが作成できませんでしたと
表示されデータセットの生成もできません。
列が変動的なのでスキーマが作成できないのではないかと
思うのですが、これを回避する方法としてはどのような方法があるでしょうか
よろしくお願いします。

クロス集計の方法は SUMとCASE文を組み合わせた集計方法です
クロス集計の結果はあっています。
どういった方法を使うのでしょうか、よろしくお願いいたします

1、新規テーブルにINSERTしてそれをもとにデータアダプタとデータセットを作成する

2、VB.NET上で動的にデータアダプタとデータセットを作成しそれと連結する
  
3、その他



プワゾン
会議室デビュー日: 2005/01/28
投稿数: 13
投稿日時: 2005-06-17 12:01
TAKADONさん こんにちわ

クロス集計ということは、取得したデータによって列数が変動するということですよね?

1の都度テーブルを作成するというのは、定期的なバッチでソースを
作成し他の人は参照のみ行うのであれば検討の余地ありとは思いますが、
動的にテーブルの追加・削除が必要になったり、同一テーブル上にデータ
を挿入するのであれば、データの管理が煩雑になると思われるので、あま
り良い方法とは思えません。
なので特別な事情が無いのであれば、2の.NET上でデータテーブルを動的に
作成し連結する方が良いのではないかと思います。

背景が見えないので、断定は出来ませんけど
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2005-06-17 18:00
プワゾンさん返信ありがとうございます。
自分で一応例をあげたのですが実はやり方がわからないのです。
2、の方法をやるにはデータアダプタに手動で連結をしないとできない
と思うのですがウィザード以外ではやったことがなく
どう設定すれば良いかわかりません。もしよろしければ
教えていただけないでしょうか?
データアダプタにセットしたいのはストアドです。
SELECT文をセットする方法は何とか見つけたのですが
ストアドのセットの仕方がわかりません。
もし,データテーブルをVB上で作成するとすればどういった形になるのでしょうか
よろしくお願いいたします 
プワゾン
会議室デビュー日: 2005/01/28
投稿数: 13
投稿日時: 2005-06-23 16:29
TAKADONさん こんにちわ(忙しくてレス返せなかった)
もう解決したかも知れないですが・・・

コネクション確立→コマンド作成(SQL文をストアドで指定)→データ取得→グリッドに適用
という手順になります。

以下Sampleコード
--------------------------------------------------------------------
Dim strConn As String = "Data Source=TargetServer;" _
& "initial catalog=Test;" _
& "User ID=sa;" _
& "Password=sa"
Dim SqlConnection As SqlClient.SqlConnection
SqlConnection = New SqlClient.SqlConnection(strConn)
SqlConnection.Open()

Dim strSQL As String = "TestProc"
Dim SqlCmd As New SqlClient.SqlCommand
SqlCmd.Connection = SqlConnection
SqlCmd.CommandText = strSQL
SqlCmd.CommandType = CommandType.Text

Dim SqlDA As New SqlClient.SqlDataAdapter(SqlCmd)
Dim DT As New DataTable

SqlDA.Fill(DT)

DataGrid1.DataSource = DT
DataGrid1.DataBind()
--------------------------------------------------------------------
てな感じでどでしょ
1

スキルアップ/キャリアアップ(JOB@IT)