• 締切済み

子フォームでDB更新後、親フォームに戻った際、DBを読み直しするには??

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

みんなの回答

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.4

juujuu2929さん こんにちわ 以前、サンプルを提示しました NOBNNN です。 子フォーム 云々かんぬん と考える前に基本技術をみにつけないと 意味がわからないまま 作業をしていることになります。 簡単なDBアプリケーションサンプルをいくつか作ってみて習得してください。 参考:  ■ Visual Studio 2005によるWindowsデータベース・プログラミング http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_index/index.html  ■ 第1回 DBアプリのデータソースとなるデータベースの作成    http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_01/vsdbprog_01_03.html      ■ 第2回 データセットとデータテーブル    http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_02/vsdbprog_02_01.html      ■ 第3回 テーブルアダプタの基礎   http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_03/vsdbprog_03_01.html     マイクロソフトでは チュートリアル を公開しています。 ■「300 秒でズバリ !!」 & 「10 行でズバリ !!」 シリーズ   http://msdn.microsoft.com/ja-jp/events/dd283146.aspx   上記のサイトで勉強してください。 今回の質問に関係することは  1、DBにアクセスし、どうやって自分のコントロール(たとえば DataRepeater) にデータを充填するのか   バインドはどうするのか?    2、子フォーム つまり別クラスで作業をした、 この場合は子フォーム側でDBを更新した結果をえるのか?     この2点です。  1、については 上記参考サイト「第3回 テーブルアダプタの基礎」を参考にしてください。    VB.NETは 2002 からバージョンアップされてきていますので いくつかの方法があります。    まずは OleDataAdapter   サンプル: http://hiros-dot.net/VBNET2005/Control/DataSet/DataSet01.htm    つぎに TableAdapter   サンプル : http://msdn.microsoft.com/ja-jp/events/dd279516.aspx    バインドするには     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      以上  

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

DataRepeater1のDataSourceを更新しないことには、テキストボックスの内容を更新させようとしても、古いままです。 「DBにアクセス」して、「最新のデータ」を「DataRepeaterに与えてあげる」ことが必要です。 私の最初の発言 「初期読み込み部分を関数化し」 補足にそちらで試した4命令が載っていますが、初期読み込み時に、その内のどの命令かをお使いですか? 通常「DB再読み込み」という命令などありません。 「DB再読み込み」という処理を行うために、「その部分を関数化する必要がある」と伝えているのです。 [DdBindingSource] って何?変数?コントロール?取得方法は? こちらも何もわからない状況で、4命令だけ部分公開して「わからない」と言われても、何も言えません。 ・前後関係 ・変数/オブジェクト命名の統一化(宣言の部分とコメントによる補足) ・エラー発生時には、発生箇所/エラー番号/メッセージ内容 などを注意して行うと、求める的確な情報が得られやすいと思います。

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

ShowDialogは、ダイアログとして表示するだけの機能ではありません。 呼ばれた側は、ステータスを返却できます。 >初心者なのでコーディング内容がわかりません 初心者であればなおの事、「丸投げの質問」をするのではなく ・まずやってみる ・部分的にわからないところを、前後関係のソースを載せ、質問する というようにしましょう。 お礼欄にありましたが、自分で「ShowDialog」というキーワードを載せていますが、それでググってみましたか? サンプルはいくらでも転がっているはずです。 会社でやっているのであれば、他の業務のソースもあるでしょうし、自宅でやるのであれば、何らかの書籍を一冊はもっているのではないですか? >関数化と実行のプログラミング内容を教えてください。 と言われても、大まかにしか答えられません。 先にも言ったように、「初期読み込み部分を関数化」です。 あなたのコードがわからないのに、こちらで関数化なんてできません。 何となくのサンプルを載せてはおきますが、この程度のサンプルは、ちょっと探したらいくらでも転がっております。 http://okwave.jp/search?word=ShowDialog&boolean=and&target=&ques_stat=&c_select=true&date=&sort=score&c=257 ここの掲示板で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

juujuu2929
質問者

補足

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

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

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

juujuu2929
質問者

お礼

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

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

関連するQ&A

  • 子フォームの情報を親フォームに利用する

    Visual C++初心者です。visual studio2005を使用しています。 まず親フォームで名前を入力させ、「次へ」を押すと子フォームが出て来ます。 そこで好きな食べ物を入力させて「決定」ボタンを押すと子フォームが閉じ、親フォームのテキストボックスに 「○○さん、こんにちは!好きな食べ物は●●ですね」というメッセージを表示させる・・・というフォームアプリケーションを作りたいのです。 子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。 できれば初心者でも分かる回答をして頂ければ有難く思います。 よろしくお願いします。

  • dbへの接続について

    dbへの接続について Visual Basic2008でVBを勉強中の者です。初心者です。 SQL serverと接続するやりかたを参考書を頼りにコーディングして接続などは問題ないのですが、 プロシージャごとに毎回DBへの接続文字列を指定して接続して、、とやっているのですが何か 無駄なことしている気がしてきました。(同じコードが各フォームの各プロシージャにあるので) DBサーバの情報が変わったときなどもコードを修正するのが大変だと思いました。 こういう場合、何かいい方法はありませんでしょうか?

  • 子フォームから親フォームのオブジェクトを参照したい。

    こんばんわ。 いまVB.Net2005でプログラミングしている者です。 子フォームから親フォームのオブジェクトを参照したいのですが, うまくいきません。 親フォームにListBox1を置き, ここに入力された内容を 子フォームで下記のように参照しようとしました。 Dim 子フォーム As New 子フォーム Label1.Text = 親フォーム.ListBox1.SelectIndex としたのですが, 親フォームでListBox1に0以外のリストを選択したのに, 子側に来ると親フォーム.ListBox1.SelectIndexの値が 0になってしまい,親側での選択内容が反映されません。 どうすれば正しく参照できるでしょうか? 教えてください。よろしくお願いします。

  • C# 親フォームと子フォームのデータのついて

    こんにちは、 今開発して内容は親フォームからチェックしたリストを子フォームのdatagridviewに自動的に追加したり、 チェックを外したら、子フォームのdatagridviewから登録した項目を削除すること作成しています。 親フォームからチェックした項目(データ)を子フォームの関数に渡しているのですが、子フォームのdatagridviewの更新がしなくて、データも反映されていない状況です。 どうすれば良いでしょうか。ご存知でしたら、教えてください。 どうぞよろしくお願いします。

  • 子フォームから親フォーム上のコントロールを操作したい

    VC++.NET(C++/CLI)にてアプリケーションを開発しております。 親フォーム(FormParent)と子フォーム(FormChild)があり 子フォームから親フォーム上にあるtextBox1を操作したいのですがうまくいきません。 親フォームからはFormChild.hをインクルードすることで 親フォームのインスタンスを得て、子フォームを表示させているのですが これに加えて子フォームからFormParent.hをインクルードすると循環参照(と言うのですか?) となる為にエラーになってしまいます。 よろしくお願いします。

  • 子フォームから親フォームへのデータの受け渡し

    いつもお世話になっております。 VB.NETの質問です。 親フォームから子フォームを開き、子フォームで検索した結果を親フォームに返したいです。 はじめはテキストボックスへ表示させており、何の問題もなく出来ていたのですが、 仕様を変更してコンボボックスやラベルのテキストに表示させるようにしたら、子フォームからデータを取れなくなりました。というか表示されなくなりました。子フォームのme.close()する直前の変数の値にはデータが入っているのですが・・・ なんでなんでしょうか? 開発一筋でやられてきた方には、本当に初歩的な質問だと思いますが、 よろしくお願い致します。

  • Accessのフォームだけを表示するには?

    Accessのフォームを使って処理を行う時に、Access自身のバックグラウンドを表示しないでフォームのみ表示して処理するというようなことはできるのでしょか? たとえば、Accessのインスタンスは非表示にしてフォームだけみえるようにする。 WSHで Set accApp = CreateObject("Access.Application") accApp.Visible = False accApp.OpenCurrentDatabase "C:\業務01.mdb" accApp.DoCmd.OpenForm "F010_情報表示フォーム", , , , acFormReadOnly accApp.Forms.[F010_010_情報表示].Visible = true などとして[F010_010_情報表示]フォームのみを表示するなどということはできるのでしょか? 実際これでは、何も表示されません。

  • VBで子フォーム以外をマウスダウンすると子フォームが閉じる

    Visual BASICで Mainフォームからある操作をしたときに、子フォーム(グリッド)を 「子フォーム名.show」 の命令で表示させています。 その子フォームを閉じたくないのに、Mainフォームをマウスでクリックすると子フォームが閉じてしまいます。 べつに、Mainフォームのマウスダウンイベントで子フォームを閉じる命令は記述していないのですが。 また、「子フォーム名.show」と「子フォーム名.visual=true」とではなにが違うのですか? 分かる方がおられましたが教えてください。

  • MDI:親フォームと子フォームを別EXEで実装するには

    MDIでアプリケーションを作成したいと思っています。 その時に子フォームを親フォームとは別EXEで作りたいと思っています。 例えば 親フォームのボタンを押すと、子フォームEXEが起動し、親フォーム内に表示される。 このようなことは出来ますか? 出来るのでしたら、どうしたらよろしいでしょうか。 教えてください。

  • DGV/子フォームで編集して親フォームへ

    親フォームと子フォーム、どちらにもDataGridViewを用意し、親フォームのセレクト行を子フォームに表示するというプログラムがあります。 さらに子フォームで直接DataGridViewに入力し編集して、更新ボタンを押して親フォームに反映させたいです。(関数を使いたい) ご教授お願いします(´;ω;`) Form1 private void DataGridView1_SelectedRowsDoubleClick(Object sender, MouseEventArgs e) { Form2 f2 = new Form2(); f2.setRowData(dataGridView1.SelectedRows); f2.Show(); } Form2 public void setRowData(DataGridViewSelectedRowCollection rows) { DataTable dt = createData(); foreach (DataGridViewRow r in rows) { string s1 = r.Cells[1].Value.ToString(); string s2 = r.Cells[2].Value.ToString(); string s3 = r.Cells[3].Value.ToString(); dt.Rows.Add("12345", s1, s2, s3); } dataGridViewDisp2(dt); } private void savebtn_Click(object sender, EventArgs e) { }