- PR -

空のDataSetの作成方法について

1
投稿者投稿内容
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-05-20 17:13
お世話になっております
現在vb.net + SQLSERVER 2000で開発を行っておりますが、Vb6.0の頃に存在した
Redimがなくなってしまったため、代わりに空のDatasetを
使用しております。

この空のDataSetの作成ですが、現在ダミーテーブルを作成して、SELECT文を発行
し、Fillを行うというやり方をとっていますが、コマンドで作成することは
できないのでしょうか?
もし、ご存知の方がいらっしゃいましたらお教えください。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-05-20 17:57
背古井さん、こんばんは。

引用:

Redimがなくなってしまったため、代わりに空のDatasetを


えっ???
Redimって、ReDim ステートメントのことですか?
だとしたら、無くなってませんけど...。

引用:

この空のDataSetの作成ですが、現在ダミーテーブルを作成して、SELECT文を発行
し、Fillを行うというやり方をとっていますが、コマンドで作成することは
できないのでしょうか?


「コマンドで作成」っていうのが良く判りませんが、
Dim Ds As DataSet = New DataSet
とか、そういう事ではなくて?

# SQL コマンド?
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-05-20 18:12
きくちゃんさん
わかりにくくてすいません。

引用:
--------------------------------------------------------------------------------

>Redimって、ReDim ステートメントのことですか?
>だとしたら、無くなってませんけど...。

--------------------------------------------------------------------------------


すいません。共通変数として使えなくなったことがいいたかったんです。


引用:
--------------------------------------------------------------------------------

「コマンドで作成」っていうのが良く判りませんが、
Dim Ds As DataSet = New DataSet
とか、そういう事ではなくて?

# SQL コマンド?

--------------------------------------------------------------------------------

そうです。ダミーテーブルを作成して、ADO.NETでSQLコマンドを発行することで
DataSetを作成しているんです。

具体的にいうとこんな感じです。

' 引数 :Colcnt = 必要な列数
'    :TblName = セットするテーブル名
'    :RetDs = セットするデータセット


Dim AdoNet As New Cls_ADONET()
Dim WK_SQL As String
Dim I As Integer = 1

WK_SQL = ""
WK_SQL = WK_SQL & "SELECT " & vbCrLf
If Dim_LargeColNo = "0" Then
WK_SQL = WK_SQL & "LEARGEEDIT" & vbCrLf
Else
WK_SQL = WK_SQL & "EDIT" & vbCrLf
End If

For I = 1 To Colcnt - 1
If Dim_LargeColNo <> "" Then
If CInt(Dim_LargeColNo) = I Then
WK_SQL = WK_SQL & ",LEARGEEDIT " & vbCrLf
Else
WK_SQL = WK_SQL & ",EDIT " & vbCrLf
End If
Else
WK_SQL = WK_SQL & ",EDIT " & vbCrLf
End If

Next
WK_SQL = WK_SQL & "FROM " & vbCrLf
WK_SQL = WK_SQL & "TBL_BRANK " & vbCrLf

'データセットに代入する
If AdoNet.Fnc_GetDatas(WK_SQL, TblName, RetDs) = False Then
'エラーメッセージを代入
Dim_Err = AdoNet.errMsg
RetDs = Nothing
GC.Collect()
Exit Function
End If

でもこれデータベースを使わないシステムには応用できないんですよね・・・。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-05-20 18:35
Mickyでございます。
みなさま、いつもお世話になっております。

引用:

背古井さんの書き込み (2004-05-20 18:12) より:

でもこれデータベースを使わないシステムには応用できないんですよね・・・。




想像するに、Redimの様に可変のメモリエリアが欲しいだけなのかな?
と思いました。
それで、代わりにDataSetを使って管理したいと思ったが、
DB接続もないのにどうやって使うのか?といった感じでしょうか?

的外れでしたらごめんなさいね(^^;

もしそうなら、コレクションクラスについて調べてみてはいかがでしょうか?
DataSetよりも軽快に使えると思います。
DataSetのいろんな機能を使いたいのであれば、
きくちゃんさんご指摘のように、
普通に Newすればあとはテーブルを作るなり好きなように
使うことができると思いますよ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-20 19:07
引用:

背古井さんの書き込み (2004-05-20 18:12) より:

すいません。共通変数として使えなくなったことがいいたかったんです。


例えば、

Public Class GlobalAccessable
 Public Shared RedimableValiable() As String
End Class

として、単独のファイルに書いておきます。すると、同じプロジェクトに属する他のファイルにあるクラスのメソッドからは、

Public Class Form1
〜略〜
 Protected 何かのイベントハンドラ
  Count = 何かの数を数える
  Redim Preserve GlobalAccessable.RedimableValiable(Count)
 End Sub
End Class

と、使えます。

#こういう使い方が推奨されるかどうかは別の問題

でも、Redimにかかるコストを考えると、Mickyさんのコレクションクラス(System.Collections 名前空間)を使用する方がいいでしょう。


↓↓ご指摘により、修正

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-05-21 08:21 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-05-20 21:03
引用:

Jittaさんの書き込み (2004-05-20 19:07) より:

Public Class GlobalAccessable
 Public RedimableValiable() As String
End Class


Public Class Form1
〜略〜
 Protected 何かのイベントハンドラ
  Count = 何かの数を数える
  Redim Preserve GlobalAccessable.RedimableValiable(Count)
 End Sub
End Class




NAL-6295です。

RedimableValiableの宣言が、Sharedじゃ無いのでコンパイルが通らないのでは?
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2004-06-08 13:47
返事が遅れてすいません
クラスで対応できそうです。
助かりました
皆さんありがとうございました。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-06-08 19:53
根本的な解決策がでてしまっているので蛇足となりますが。。。

プログラムでDataSetを作成する例は以下のような感じになります。
http://homepage3.nifty.com/dotnetfan/console/console17.html

この例ではいったんスキーマを保存してますが、そんなことせずに
列のデータをどんどん追加していくことも当然可能です。

#まぁ、覚えておいて損はない、ということで。
1

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