【無料配信♪】Renta !全タテコミ作品第1話

VB.NETで、
別々のDataTableを外部結合したいです。
どのようにすれば実現できますか?
AというDataTable
CD,
Name
BというDataTable
CD,
Amt
とします。
CDが同じもので結合し、(Aにあるものだけ)
CD,Name,AmtというViewを作成したいです。

お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

データセットの「Relation」プロパティを使用する



MSDN Online Home > Column This Week > 10 行でズバリ !!
http://www.microsoft.com/japan/msdn/thisweek/10l …

VB.NET> VB.NET 突撃レポート> 9
http://www.mitene.or.jp/~sugisita/net/vbnet_rep0 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDataGridViewに複数テーブルのデータをセットしたい

VB6だったら複数テーブルを結合して取得したrecordsetを
表に1行ずつセットできましたが
VB2008で同じことをやりたい場合はどうすればよいのでしょうか?
1つのテーブルを検索してDataGridViewに接続させるやり方は
いろいろな本にあるのですが複数テーブルの場合がありません。
DataGridView上で編集できなくても行を選択して
別画面で編集するのでデータをDataGridViewに表示させるだけでOKです。
よろしくお願いします。

Aベストアンサー

どうもです。

古い記事によると
DataTableの結合は
コード上ではできないようですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4412&forum=7

いつからかは知りませんが、
http://oshiete1.goo.ne.jp/qa1193685.html
データセットの「Relation」プロパティを使用することで同じような事ができそうです。
多分、DataSetにデータベースの主キーのようなものを設定して、結合しよう。的な考えだと思います。

>複数テーブルを結合したdatatableを作って
>bindするとDataGridViewに表示できますか?

については、コード上で
単一テーブルの結果をDataGridViewに表示できているなら
全く同じ考え方でできますよ。

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QDataTableに特定のフィールドが存在するかどうか調べるには?

DataTableに登録されているフィールドに、特定のフィールドが存在しているかどうか調べるには、どのようにすればよいでしょうか?

dtTable.Columns.Add("TEST1")
dtTable.Columns.Add("TEST2")

dtTableにTEST1とTEST2のフィールドが登録されていたとして、

Dim tmp As String = dtTable.Rows(0).Item("TEST3"),ToString

TEST3のフィールド名で値を取得しようとすると、TEST3の列が登録されていない為、エラーとなります。

そこで、事前にTEST3というフィールドが、DataTableに存在するかどうか調べたいのです。
(ハッシュテーブルのContainsKeyメソッド等のようなものを求めています)
お分かりになる方がいましたら、宜しくお願いします。

Aベストアンサー

DataColumnCollection.Contains メソッド
http://msdn2.microsoft.com/ja-jp/library/system.data.datacolumncollection.contains(VS.80).aspx
を使用すればよいと思います。

ちなみに、DataTable.Columns が DatacolumnCollection クラスです。

QVB.NETのコンボボックスについて

VB6からVB.NETでプログラミングを始めました。
コンボボックスのクリアの仕方や設定の仕方、また
取り出し方等を教えて下さい。

色々とヘルプも見てみたのですが、よく解りません。
宜しくお願い致します。

Aベストアンサー

クリアだけだと思ってました。
追記します。

Itemを操作します


'登録
For i = 1 To 10
  Me.ComboBox1.Items.Add(i.ToString)
Next

'取得
For i = 0 To Me.ComboBox1.Items.Count - 1
  MsgBox(Me.ComboBox1.Items(i).ToString)
Next

'完全クリア
Me.ComboBox1.Items.Clear()

部分クリア
Me.ComboBox1.Items.RemoveAt(Index値)

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む

QVB.NET2005 DataGridViewでレコードを絞り込んで表示

Form1のTextboxより入力した数字を元にForm2のload時にoracleDBをselectしDataGridviewのテーブルの中に作成した値と一致するものを絞り込んで表示したいと考えております。
メニューのプロジェクトからDataSetを選択し、必要なDBを選択しTableadapter等も利用しています。
DBから読み込んだものをそのまま表示するだけという事は出来ました。
テキストやネットを調べながら色々試してみましたが、うまくいかず煮詰まっています。
お力を貸してください。よろしくお願いします。

Aベストアンサー

お世話になります。

TableAdapter から取ってきた DataTable を元に
DataView を使って絞り込めばよいのでは?

Dim dt As DataTable = New DataTable
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("FRUIT", GetType(String))

dt.Rows.Add(New Object() {1, "りんご"})
dt.Rows.Add(New Object() {2, "もも"})
dt.Rows.Add(New Object() {3, "かき"})
dt.Rows.Add(New Object() {4, "みかん"})

Dim dv As DataView = New DataView(dt)
dv.RowFilter = "FRUIT LIKE '%ん%'" '絞り込み

Me.DataGridView1.DataSource = dt '全件
Me.DataGridView2.DataSource = dv '絞り込まれた結果(りんごとみかん)

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/129dgfilter/dgfilter.html

お世話になります。

TableAdapter から取ってきた DataTable を元に
DataView を使って絞り込めばよいのでは?

Dim dt As DataTable = New DataTable
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("FRUIT", GetType(String))

dt.Rows.Add(New Object() {1, "りんご"})
dt.Rows.Add(New Object() {2, "もも"})
dt.Rows.Add(New Object() {3, "かき"})
dt.Rows.Add(New Object() {4, "みかん"})

Dim dv As DataView = New DataView(dt)
dv.RowFilter = "FRUIT LIKE '%ん%'" '絞り込み...続きを読む

QComboBoxの初期表示値

当方、VB.NETでwindowsMoblie5.0の開発をしております。

そこでComboBoxを使うのですが起動した際の初期表示の値を決めるにはどうすれば良いのですか?
初歩的な質問で申し訳ありませんがご教授のほどよろしくお願い申し上げます。

Aベストアンサー

> そこでComboBoxを使うのですが起動した際の初期表示の値を決める
> にはどうすれば良いのですか?
これを決めるのは『あなた』ですが ・・・

設定したItemsコレクションの中から選択したいのであれば
SelectedIndexにItemsコレクションの項目のインデックス番号を設定します

『選択してください』Itemsコレクションと無関係な文字列を表示してほしいならTextプロパティでしょう
ただしComboBoxStyleがDropDownList以外の場合に限ります

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Qこの行は既に別のテーブルに属しています

以下のソースで、「この行は既に別のテーブルに属しています。」というエラーが出てしまいますが、対処方法がわかりません。

どのようにしたらよろしいでしょうか?
VS2003のVBです。

    Dim Table1 As DataTable = Me.DS1.Tables("データベース1")
    Dim Table2 As DataTable = Me.DS1.Tables("データベース2")
    Dim Row1 As DataRow
    Dim Row2 As DataRow
    Row1("データ1") = 1
    Row1("データ2") = 2
    Row1("データ3") = 3
    Row2("データ1") = 2
    Row2("データ2") = 3
    Row2("データ3") = 4

    Table2.Rows.Add(Row2) ←ここでエラー
    Table1.Rows.Add(Row1)

'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。

追加情報 : この行は既に別のテーブルに属しています。

以下のソースで、「この行は既に別のテーブルに属しています。」というエラーが出てしまいますが、対処方法がわかりません。

どのようにしたらよろしいでしょうか?
VS2003のVBです。

    Dim Table1 As DataTable = Me.DS1.Tables("データベース1")
    Dim Table2 As DataTable = Me.DS1.Tables("データベース2")
    Dim Row1 As DataRow
    Dim Row2 As DataRow
    Row1("データ1") = 1
    Row1("データ2") = 2
    Row1("データ3") = 3
    Row2("デ...続きを読む

Aベストアンサー

お世話になります。

> Dim Row1 As DataRow
> Row1("データ1") = 1
これは、実行時に例外(NullReferenceException)が発生するはずです。

> Row1("データ1") = 1
こちらを実行する前に、
Row2 = Table1.Rows(0) とか
Row2 = Table1.NewRow とかやってると仮定して、
2 つの DataTable のレイアウトが全く同じならば
DataTable.ImportRow メソッド
を使われてはいかがでしょうか。

Dim dt As DataTable = New DataTable
dt.Columns.Add("Field1", GetType(String))
dt.Columns.Add("Field2", GetType(String))
dt.Columns.Add("Field3", GetType(String))
dt.Rows.Add(New String() {"りんご", "みかん", "ばなな"})
dt.Rows.Add(New String() {"おかし", "ごはん", "おちゃ"})

Dim copyToDt As DataTable = dt.Clone()
For Each row As DataRow In dt.Rows
  If Convert.ToString(row("Field1")) = "おかし" Then
    copyToDt.ImportRow(row)
  End If
Next

参考URL:http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfSystemDataDataTableClassImportRowTopic.

お世話になります。

> Dim Row1 As DataRow
> Row1("データ1") = 1
これは、実行時に例外(NullReferenceException)が発生するはずです。

> Row1("データ1") = 1
こちらを実行する前に、
Row2 = Table1.Rows(0) とか
Row2 = Table1.NewRow とかやってると仮定して、
2 つの DataTable のレイアウトが全く同じならば
DataTable.ImportRow メソッド
を使われてはいかがでしょうか。

Dim dt As DataTable = New DataTable
dt.Columns.Add("Field1", GetType(String))
dt.Columns.Add("Field2",...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング