プロが教えるわが家の防犯対策術!

Visual Basic 2008 DB:Access MDB

親フォームにはDatarepeater があり、DB情報を表示して該当する情報にあるボタンをクリックすると子フォームが表示されます。
子フォームでその行について修正すると親フォームに戻るのですが、子フォームの情報が反映されません。
子フォームを閉じた際、表示されているデータを最新にしたいのですが、再読込みのコーディングを教えてください。

A 回答 (4件)

juujuu2929さん こんにちわ



以前、サンプルを提示しました NOBNNN です。

子フォーム 云々かんぬん と考える前に基本技術をみにつけないと

意味がわからないまま 作業をしていることになります。

簡単なDBアプリケーションサンプルをいくつか作ってみて習得してください。

参考:

 ■ Visual Studio 2005によるWindowsデータベース・プログラミング
http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog …

 ■ 第1回 DBアプリのデータソースとなるデータベースの作成
   http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog …
   
 ■ 第2回 データセットとデータテーブル
   http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog …
   
 ■ 第3回 テーブルアダプタの基礎
  http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog …
 
 
マイクロソフトでは チュートリアル を公開しています。

■「300 秒でズバリ !!」 & 「10 行でズバリ !!」 シリーズ

  http://msdn.microsoft.com/ja-jp/events/dd283146. …
 

上記のサイトで勉強してください。

今回の質問に関係することは

 1、DBにアクセスし、どうやって自分のコントロール(たとえば DataRepeater) にデータを充填するのか
  バインドはどうするのか?
 
 2、子フォーム つまり別クラスで作業をした、
この場合は子フォーム側でDBを更新した結果をえるのか?
 
 
この2点です。

 1、については 上記参考サイト「第3回 テーブルアダプタの基礎」を参考にしてください。
 
 VB.NETは 2002 からバージョンアップされてきていますので いくつかの方法があります。
 
 まずは OleDataAdapter
  サンプル: http://hiros-dot.net/VBNET2005/Control/DataSet/D …
 
 つぎに TableAdapter
  サンプル : http://msdn.microsoft.com/ja-jp/events/dd279516. …
 
 バインドするには
 
  TEXTBOX、DataGridView や DataRepeater などのコントロールオブジェクトに DataTable を指定する場合は
  
  TEXTBOXにDataTableをバインド
  
   Me.Txt販売コード.DataBindings.Add("Text", DT_Row, "販売コード")
Me.Txt支店.DataBindings.Add("Text", DT_Row, "支店")
Me.Txt商品.DataBindings.Add("Text", DT_Row, "商品")


 
  DataGridView サンプル: http://d.hatena.ne.jp/coma2n/20090924/1253779717
  
  
 2については
   クラスプログラミングを勉強する必要があります。
   
   参考: オブジェクト指向入門
    http://www.atmarkit.co.jp/channel/oo/oo.html
    


以上
 
    • good
    • 0

DataRepeater1のDataSourceを更新しないことには、テキストボックスの内容を更新させようとしても、古いままです。



「DBにアクセス」して、「最新のデータ」を「DataRepeaterに与えてあげる」ことが必要です。


私の最初の発言
「初期読み込み部分を関数化し」

補足にそちらで試した4命令が載っていますが、初期読み込み時に、その内のどの命令かをお使いですか?
通常「DB再読み込み」という命令などありません。
「DB再読み込み」という処理を行うために、「その部分を関数化する必要がある」と伝えているのです。


[DdBindingSource]
って何?変数?コントロール?取得方法は?
こちらも何もわからない状況で、4命令だけ部分公開して「わからない」と言われても、何も言えません。

・前後関係
・変数/オブジェクト命名の統一化(宣言の部分とコメントによる補足)
・エラー発生時には、発生箇所/エラー番号/メッセージ内容
などを注意して行うと、求める的確な情報が得られやすいと思います。
    • good
    • 0

ShowDialogは、ダイアログとして表示するだけの機能ではありません。


呼ばれた側は、ステータスを返却できます。

>初心者なのでコーディング内容がわかりません
初心者であればなおの事、「丸投げの質問」をするのではなく
・まずやってみる
・部分的にわからないところを、前後関係のソースを載せ、質問する
というようにしましょう。

お礼欄にありましたが、自分で「ShowDialog」というキーワードを載せていますが、それでググってみましたか?
サンプルはいくらでも転がっているはずです。

会社でやっているのであれば、他の業務のソースもあるでしょうし、自宅でやるのであれば、何らかの書籍を一冊はもっているのではないですか?


>関数化と実行のプログラミング内容を教えてください。
と言われても、大まかにしか答えられません。
先にも言ったように、「初期読み込み部分を関数化」です。
あなたのコードがわからないのに、こちらで関数化なんてできません。

何となくのサンプルを載せてはおきますが、この程度のサンプルは、ちょっと探したらいくらでも転がっております。

http://okwave.jp/search?word=ShowDialog&boolean= …
ここの掲示板でShowDialogの質問はいっぱいあります。

目的にマッチするものがあるかはわかりませんが、一つ一つ目を通すのを「手間」と感じていてはいけません。
上級者はもっと的確に履歴を絞りはしますが、絞りきれないときは、やはり全て目を通していきます。
そこから本来の目的とは違っても、目から鱗のテクニックを見つけることもあります。

まずは努力を・・・

'------------------------------
'ダイアログ呼び出し側
'------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  'フォーム2をダイアログで表示
  Dim l_frm2 As New Form2

  'ダイアログでからの戻り値を取得
  Dim l_dlgRet As Windows.Forms.DialogResult = l_frm2.ShowDialog()

  '戻り値による分岐
  Select Case l_dlgRet
    Case Windows.Forms.DialogResult.OK
      Call MsgBox("OKが帰ってきたので、読み込み処理")
      'ここで関数を実行
    Case Windows.Forms.DialogResult.Cancel
      Call MsgBox("キャンセルされてきたので、何もしない")
  End Select
End Sub

'------------------------------
'ダイアログ側(Form2)
'------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  'OKボタン処理
  Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  'キャンセルボタン処理
  Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub

この回答への補足

またまた早々にありがとうございました。
書籍は3冊、逆引き500や基本などの本ですが、今回親フォーム側でリスト形式でDataRepeaterを使って表示させ、その中に「子フォーム」へのボタンを配置しております。クリックにより子フォームが開き、該当するデータを更新できるのですが、戻ってきた際親フォームのDB表示は変更前のままになってて苦戦中でした。
showdialogにしてもだめ、サイトからDataRepeaterを使用する際は.ResetBindings(false)で再読込みが必要(癖があるから?)だとの情報で設定してもダメ。本屋さんではあまりDataRepeaterの記載もなく苦戦しておりました。
また探し方もダメだったんですね。「DB 再 読込み」とかで検索している時点で間違っていたのかもしれません。

戻ってきた際、
'DdBindingSource.ResetBindings(False)
'Me.Refresh()
'Me.ResetText()
'f4.Dispose()
も順番に足してデバックしてみたのですがダメでした。配置の問題なのかそもそも間違っているのか、余計わけがわからなくなってあせっていました。

補足日時:2010/02/01 12:07
    • good
    • 0

初期読み込み部分を関数化し、子から親に戻ったタイミングで、その関数を実行する

    • good
    • 0
この回答へのお礼

早々にありがとうございます。
すいません、初心者なのでコーディング内容がわかりません。子フォーム側でのCloseにどんな内容をコーディングしたらよいか教えてください。それとも 子.showdialog()の後に関数実行をすればよいのでしょうか?関数化と実行のプログラミング内容を教えてください。

お礼日時:2010/02/01 02:08

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