ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Visual Basic User's Clubコミュの型付データセット

  • mixiチェック
  • このエントリーをはてなブックマークに追加
基本的なこととは思うのですが、教えていただけるととても助かります。

コンボボックスに型付データセットの値をバインドしました。
そこで、コンボボックスで選択したデータを、返り値用の型付データセットに入れなおしたいのです。
現在は「BindingSource.Current」を利用して選択した値を型付データセットに入れようとしているのですが・・

お願いします。

コメント(13)

>なおこさん
コンボボックスの選択値が変わるタイミングで、データセットの値を書き換えてあげれば良いと思います。(イベントに処理を実装する)

バインドを使っているからといって、特に難しく考える必要はないですよ。
データセットに「BindingSource.Current」の値を入れようとしてるのですが、合ってるでしょうか?
すみません。あまりに初心者なもので・・。
>なおこさん

とりあえず開発環境と使用してるデータベースを書いた方がいいかも?
(例)VB2003 + SQL Serverとか

あと、型付データセットをどういう感じで作ってるのかとか、コンボボックスのスタイルは何かとか・・・
最終的に、どういう風にデータベースに更新したいのとか・・・

いままでのカキコでは、何がしたいの?ってみなさん思ってるのかも???

実際に今書いてるコードをここに書いた方が早いと思います。
>hiro ozzy 5150さん
ありがとうございます!
なるほど・・。
環境はVS2005(VB)でデータベースはOracle10gです。

・フォームのコンボボックスのDataSourceにはBindingSource1
 が設定済み
・データベースからデータを取得するメソッドで、
 BindingSource1.DataSource = TestDataSet
 を記述
 (TestDataSet(型付データセット)にはデータが入っている)

という前提で、

コンボボックスで選択したデータを
フォームのOKボタン押下時処理で型付データセットに入れて返したいのです。

Private Function OKボタン押下時処理・・・
 Dim RetDataSet As New TestDataSet

 RetDataSet.テーブル.NewRow()
 RetDataSet.テーブル.Rows.Add(BindingSource1.Current★)

Return RetDataSet
End Sub

★の部分ではCurrentを実際の型にキャストしてます

この状態で実行すると「この行は既に別のテーブルに属しています」とエラがでて、RetDataSet.テーブルにはデータが入っていません。

こんなものじゃわからないでしょうか。。
ふむ・・・・

Oracleなら、本格的にデータベースを運用してる環境になると思いますので、直接バインディングしていいのかな??と思います。

多分ですが、Oracleに対して直接更新かけてたら怒られますよwww

基本的にオンラインのデータベースに更新するには、ちゃんとトランザクション切って、データを取り込んだ後、変更して更新するまでの間に、他の端末から更新されていないかどうかのチェックが必要になると思います。

会社・エンジニアによって詳細の仕様はまちまちなので、SEに確認しましょう^^v

ただ、どうもデータベースはキーなしのデータのみで、追加オンリーの仕様のような気もしますので、その場合は、SQLでINSERT文発行するだけでいいような気がします。

------------------
で、とりあえず、
OKボタン押下時処理・・・

dim dRow As New DataRow
dRow = TestDataSet.NewRow()
dRow("Column1") = BindingSource1.Current
TestDataSet.Rows.Add(dRow)

----------------
TestDataSetというデータセットは既に存在してるはずなので、これで画面上の1行追加できないっすかね??
ただ、画面のコンボボックスに指定された型付データセットには登録できますが、Oracle本体には別に更新ロジックが必要になると思いますよ。

DataAdapterなり、別にSQLコマンド発行して、更新かけないといけないと思います。

このやり方は使ったことないので、うまく動くか心配ですが^^;動かなかったらごめんなさい(o*。_。)oペコッ
>dim dRow As New DataRow
>dRow = TestDataSet.NewRow()
>dRow("Column1") = BindingSource1.Current
>TestDataSet.Rows.Add(dRow)

カラムに対して、レコードを設定しようとしているので、
dRow("Column1") = BindingSource1.Current で、実行時エラーが起きるような気がします。

以下の2案を書いてみました。
但し、当然、BindingSource1.Currenは、TestDataSetの既存の行を参照しているので、キーを指定していると落ちます。
【案1】
Dim dRow As DataRow = TestDataSet.NewRow()
Dim wkRow As DataRow = ★★★★★ '←BindingSource1.Currentをキャストしたのをセットする。

'以下の様に、カラム毎の値を設定する。
dRow("Column1").Value = wkRow("Column1").Value
dRow("Column2").Value = wkRow("Column2").Value
dRow("Column3").Value = wkRow("Column3").Value
TestDataSet.Rows.Add(dRow)

【案2】
'以下の様に、カラム毎の値を設定する。
Dim wkRow As DataRow = ★★★★★ '←BindingSource1.Currentをキャストしたのをセットする。
TestDataSet.ImportRow(wkRow)
ん〜〜〜〜〜〜同じような処理を作ってみようと思ったが・・・いまいち・・・仕様がわからないです^^;

1)まずオラクルの更新しようとしているテーブルの構造
2)コンボボックスで、編集してるんですかね?(DropDown)それとも値を選択してるだけ?(DropDownList)どっちでしょう?
  DropDownかDropDownListかで処理がまるっきり違ってくるので・・・
3)何故、型付データセットを作ってるのか???

もうちょっと詳しく教えていただけるとうれしいかも
>3)何故、型付データセットを作ってるのか???
このトピックのタイトルにもなっていますが、本質は「型付データセット」とは何ら関係ないと思います。
通常のデータセット、型付データセットも同じ「入れ物」なので…
>ZEBRAさん
ですよね〜〜

仕様的に、コンボボックスの初期表示はなしで、まったく空のコンボを作っておいて、いくつかコンボボックスに値を入れていって、OKボタンでその複数件のデータをオラクルに送り込むんだろうか?

それとも、初期表示にオラクルからデータを引っ張ってきて、その中から選択した物で内容を変更されたものを、別のテーブルに送り込む?

ん〜〜〜〜〜、やっぱどんな仕様でどんなことをしたいのかがわからないと、アドバイスしようがないと思うんですが^^;
ありがとうございます!

>hiro ozzy 5150さん
データベースへの更新処理ではなく、単純にデータセットの中の1行をコピーしたデータセットを作りたいのです。
次回からはせめてもう少しわかりやすく質問するようがんばります!

>ZEBRAさん
案2を試しました。
「TestDataSet」には「ImportRow」がないようです・・

あ!!!
ありました。テーブルまで指定すればいいんですね。

試してみます。

気がついたらもう外真っ暗です・・
すいません、私が勘違いして、トンチンカンなアドバイスしてましたね( p_q)すいません(o*。_。)oペコッ

家に帰って、ちょこっといじってたら、私、BindingSource使ったことなかったっす(^^;)

いつも、コンボはドロップダウンリストで、ValueMemberとDisplayMember指定して、選択されたValueMemberから再度データベース読むロジックしか作ってなかったため、間にBindingSourceが入るとこが、全く頭の中に入ってない状態で、お話ししちゃってました>。<ううう

ごめんなさいです(o*。_。)oペコッ
>なおこさん
>あ!!!
>ありました。テーブルまで指定すればいいんですね。
すみません。記述漏れのようです。m(_ _)m

>hiro_ozzy_5150 さん
BindingSourceって、.NETFramework2.0からサポートだったと思います。
私も、1.1までは、ValueMemberとDisplayMemberを指定したやり方で頑張っていました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Visual Basic User's Club 更新情報

Visual Basic User's Clubのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング