• ベストアンサー

[VB.NET] DataSetをRDBのように使うには?

VB.NET において、DataSetをRDBソフトのように使う方法を 探していました。 DataSet内の1つのDataTableにあるSelectメソッドを実行すると、 DataTable内の特定のレコードを抽出することができることは わかっています。 しかし、複数のDataTable間でリレーションを組んで、 Joinを実現したいのですが、どのようにしたら実現できるのでしょうか? かなり初歩的な内容かもしれませんが、 何卒、ご教授頂ければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お世話になります。 型付データセットを使って、 データセットデザイナで DataTable 間のリレーションをマウス操作で 定義してやるのが一番簡単なのですが... コードでやるのでやられるのであれば、 参考 URL の様に DataRelation を使います。

参考URL:
http://www.microsoft.com/japan/msdn/thisweek/300x10/phase2/relationaldata/vb.aspx
SUPER-NEO
質問者

お礼

アドバイスありがとうございます。 参考にしてサンプルプログラムを作ってみます。

SUPER-NEO
質問者

補足

サンプルプログラムを作りました。 意図した動きで、満足しています。 さて、このRelationなんですが、DataSet内でインデックスを 貼ることなどできませんよね? いろいろ調べてはみたのですが、インデックスに関する情報が 見つからなかったので。。。 1対Nの関係にあるRelationで、親データに該当する レコードの数が結構多いのと、子データのレコードも、 親データ以上に多くなることが見込まれいるので、 少しでも早く処理したいと思い、インデックスを考えました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DataSetから、DataTableを取得したい。

    C♯環境です。 DataSetに格納されている1つのテーブルを、DataTableとして 取得したいと思っています。 VB.NETではたしか出来たと思うのですが… DataTable Dt= DataSet.Tables(0); 以上のように書くと、「~Tablesはプロパティですがメソッドのように 使用されています」と怒られます。 出来ないのでしょうか…? 誤りをご指摘いただけるとありがたいです。 宜しくお願いします。

  • DataTableのselectメソッドで日付検索

    vbのDataTableのselectメソッドで、年月に該当する日付検索をしたいです。 DataTable1.select(date1 = CDate('2015/01/01')) みたいな事ですが、 やりたいのは、2015年01月のものを全てという条件です。 date1の属性を年月に変換して、2015/01とイコールのものを抽出するか、 date1の属性をYYYYMMDD文字列に変換して、like '201501%' みたいな事をするのか。 postgresqlに例えると、 select * from tb1 where to_char(date1,'YYYYMMDD') like '201501%' みたいな事をVBのDataTableのselectメソッドでやりたいです。 よろしくお願いします。

  • DataTableのselectメソッド

    C#を使用して、DataTableのselectメソッドで複数のフィールドに対して、特定の文字を含まないフィールドを抽出する事はできるでしょうか? ID 名前  住所   出身地 1 前田  東京都  大阪府 2 山田  石川県  三重県 3 藤川  東京都  東京都 4 大野  大阪府  石川県 上記のテーブルで、名前、住所、出身地に「川」が含まない1のレコードのみ抽出するようなイメージです。 よろしくお願いします。

  • C# DataGridViewにデータを追加したい。

    C# DataGridViewにデータを追加したい。 DataGridViewにレコードを追加したいのですが、Formのロードイベントで以下コードを実行しています。 // テーブルを作成 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int)); DataColumn dataClumn2 = dataTable1.Columns.Add("名前", typeof(int)); // テーブルにデータを追加 dataTable1.Rows.Add(new Object[] { 1, name1}); dataTable1.Rows.Add(new Object[] { 2, name2}); dataGridView1.DataSource = dataTable1; としています。 Formにボタンを配置し、ボタンクリック時にテキストボックス[txtProName]のデータを レコード追加したいのですが、記入の仕方がわかりません。 まず、 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); をロードイベントメソッドに記入しているのも問題がありそうなのですが、 良く理解できません。 ボタンイベントでデータを挿入する方法等、記入方法のご教授よろしくお願いいたします。 当方、超初心者なので、出来れば、ソースコードもお願いいたします。m(_ _)m

  • VB LinqでGroup By,Selectする

    VB初心者です。 データが格納済みのデータセット・テーブルからLinqで新たなデータセット・テーブルを作成しようと試みておりますが、どうも上手くいかず困っています。以下にどんな事をやりたいか例示しますので、コードでご教示下さいますようお願いいたします。 データ格納済みのデータセット・テーブル(DataSet1.DataTable1)の内容 YYYYMMDD/HHMMDD/HighPrice/LowPrice/Volume ------------------------------------------ 20100103/000000/100.10/100.05/10△ 20100103/000100/100.15/100.10/10 20100103/000200/100.20/100.15/10 20100103/000300/100.30/100.25/10○ 20100103/000400/100.20/100.10/10 20100103/000500/100.20/100.45/10 20100103/000600/100.35/100.25/10 20100103/000700/100.25/100.15/10 20100103/000800/100.45/100.30/10○ 20100103/000900/100.00/99.90/15△ 20100104/000000/100.50/100.45/15○ 20100104/000100/100.50/100.40/15 20100104/000200/100.45/100.45/15 20100104/000300/100.37/100.35/15 20100104/000400/100.30/100.20/15△ 20100104/000500/100.25/100.20/30 20100104/000600/100.35/100.25/15 20100104/000700/100.50/100.05/20○△ 20100104/000800/100.45/100.40/20 20100104/000900/100.10/100.10/20 以上のデータを新たなデータセット・テーブル(DataSet1.DataTable2)を作成する必要があります。 抽出条件 (1)YYMMDD毎 (以上の例では20100103と20100104となります。) (2)HHMMDDが500毎(以上の例では次の2つの組合せとなります。000000~000400、000500~000900) (3)HighPriceは(1)と(2)の最大値 (以上の例ではレコードの横に○を付けています) (4)LowPriceは(1)と(2)の最小値 (以上の例ではレコードの横に△を付けています) 結果出力。注意点としてはHHMMDDは500毎となります。つまり、00000~000400は000500となり、000500~000900は001000となります。なおVolumeは不要となります。 YYYYMMDD/HHMMDD/HighPrice/LowPrice ------------------------------------------ 20100103/000500/100.30/100.05 20100103/001000/100.45/99.90 20100104/000500/100.50/100.20 20100104/001000/100.50/100.05 非常にややっこしいですが、コードで教えてくださいますようお願いいたします。

  • レコードの分割削除

    いつも参考にさせて頂いてます。 今回の質問は、SQLのDelete文で100件ずつレコードを削除させるには、どうしたら良いでしょうか? という質問です。 過去の質問にも同じ質問があったのですが、当方の環境では実現できませんでした。 アプリケーションはVB6.0で作成しています。 (環境) OS :WinXP SP2 IDE:VB6.0 RDB:DB2

  • Access「レコードが削除されました」のエラー

    お世話になります。 あるデータベースを作成し、クエリで条件抽出しています。 そのクエリを実行しても、「レコードが削除されています」という エラーが出てしまうようになりました。 どうしてなのか、どうしたらいいのか教えていただけませんでしょうか。 テーブル3つをリレーションしています。 テーブルAは、テーブルBとCにつながっています。 クエリA:テーブルAのチェックボックスAでYesの人だけを選択し、 それに連動するテーブルAのデータを選択したいと思っています。 カテゴリーごとに抽出できるようパラメータをいれ、 抽出条件に「yes」を入れてあるのですが、 実行するとエラーになります。 同じ条件で作成しているクエリBは、同様にテーブルBの チェックボックスBのYesの人だけを選択するようにしているのですが、 実行しても問題がありません。 同じ設定をしている2つのクエリなので、 あとは元のテーブルデータがおかしいのかと思っているのですが 情報はちゃんと入力されています。 情報の閲覧が出来ないので非常に困っています。 復活するときもあるのですが、不安定です。 どうかチェックする部分を教えてください。 なぜこういうことが起きるのかも教えていただければと思います。 私は素人なので、VB等は組めません。 クエリ上で行ないたいのですが、 どうしたら宜しいでしょうか。 Access2000、複数人で入力しています。 宜しくお願い致します。

  • VBでキーボードを使わずに"Ctrl+A"をしたい!

    初歩的な質問で申し訳ないのですが、VBでキーボードを使わずに、何かコマンドボタンを押した時に"Ctrl+A"などを実行したいです。VBでコーディングしていけば同じような機能は実現できるのですが、もっと簡単な方法があるような気がしてなりません・・。このボタンを押したら"Ctrl+A"を実行する、みたいなコーディングはどのようにすれば実現できるのでしょうか?

  • 複数の項目でレコードがユニークになる場合のチェック

    Access97で質問です。 一般に1つの項目でレコードがユニークになるテーブルは良く見かけますが、たとえば、色と階数と建坪の3つの項目で誰の家なのかがユニークに特定されるテーブルがあったとします。 フォームからデータ入力する場合、重複チェックするにはどうしたらよいのでしょうか? キーがひとつなら、テーブルのインデックスに「重複なし」としておけばいいのですが、複数キーでユニークになる場合にはどうしたよいのかわかりません。 さらに、サブフォームを作った場合には何をリレーションすればよいのでしょうか? オートナンバー型のIDを駆使すれば実現できるのでしょうか? よろしくお願いいたします。

  • access・複数のテーブル・重複除外したデータ

    accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。 フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを 重複しないレコードとして抽出したいと思っています。 テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。