none
既存MDB(ACCESS)のテーブルへの物理的な更新ができない → VB.net 2005 RRS feed

  • 質問

  • 初心者のVB.NET 2005ユーザーです。

    ACCESS 2002 で作成したテーブルに対してVB側から更新結果が保存できていません。

    簡単に作ったプログラムで MDB形式(Access) に用意したテーブル
    をTableAdaper でVB.netが自動生成したプログラム を実行してみたところ うまく更新されません。
      参考:URL
    http://oshiete1.goo.ne.jp/qa1304483.html

    他の方法をいろいろ試したがダメでした。
    下記は二つの項目を画面に配置して自動生成されたものでs。

    自分で書いたコードでOledbDataAdpter も実験してみたのですが結果は同じです。

    メモリー上では更新されますが 物理的にはUpdateがされません。
    一旦、画面をとじて開くと更新されていません。
    なぜでしょうか?
    SQL Server ではこんなことはおきませんでした。

    __________________________________________________________
    Public Class TESTfm

    Private Sub TBL_交信記録BindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBL_交信記録BindingNavigatorSaveItem.Click
    Me.Validate()
    Me.TBL_交信記録BindingSource.EndEdit()
    Me.TBL_交信記録TableAdapter.Update(Me.QSO_LOG_DATASET.TBL_交信記録)

    End Sub



    Private Sub TESTfm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'TODO: このコード行はデータを 'QSO_LOG_DATASET.TBL_交信記録' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
    Me.TBL_交信記録TableAdapter.Fill(Me.QSO_LOG_DATASET.TBL_交信記録)

    End Sub

    Private Sub TESTfm_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    MAINMENU.Visible = True
    End Sub

    End Class
    ____________________________________________

    2009年7月12日 4:17

回答

すべての返信

  • Bin/Debug もしくは Bin/Release フォルダに mdb ファイルのコピーが作られて、それが更新されているのでは
    ないですか?
    2009年7月12日 5:06
  • 返答ありがとうございます。

    SurferOnWww さん のおっしゃるっ通りです。

    ですが、対処の仕方がわかりません。

    毎回、コピーしているようでうすのでこれをせず。 オリジナルのMDBのみを I/O、 結果も保存できるようになりませんでしょうか? 

    よろしくお願いいたします。

    2009年7月12日 6:54
  • 以下を参考にしてみて下さい。

    データーベースに変更内容を保存する。
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/fd7da4f7-c2a7-473d-8ee9-49fd70d9e5f4/

    実際のアプリケーションはexeからの相対パスでmdbを指定することになりますから、このように毎回上書きされることはありません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年7月12日 7:24
    モデレータ
  • もし接続文字列が以下のようになっていたら(xxxxxxx はファイル名)、

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\xxxxxxx.mdb

    この |DataDirectory| の部分を「オリジナルのMDB」のある絶対パス(c:\data など)に変更して
    みたらどうなりますか?

    2009年7月12日 7:33
  • 返答ありがとうございます。

    trapemiya さん の教えていただいた方法、
    ソリューションエクスプローラ → MDB のプロパティ(右クリック) → 「出力ディレクトリにコピー」をコピーしない 


    SurferOnWww さん の

    絶対パスに変更してみましたところうまく行きました。


    2009年7月12日 8:21
  • 大変、参考になりました。 ありがとうございます。 

    疑問なんですが MDBの「出力ディレクトリにコピー」 いったい どんな意味でしょうか? 目的が不明です。
    初心者が戸惑うと思うのですが? ・・・・
    2009年7月12日 8:22
  • > 疑問なんですが MDBの「出力ディレクトリにコピー」 いったい どんな意味でしょうか?

    以下の Web ページが参考になると思います

    Visual Studio 2005でデータベースの更新が反映されない場合には?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/532dbfilecopy/dbfilecopy.html

    SQL Server の場合について書いてありますが、Access でも「出力ディレクトリにコピー」の意味は
    同じようです。

    2009年7月12日 9:54
  • とてもわかりやすかったdす。

    参考書には書いていないこともおおいですね。

    困ったものです。 つまづきになりやすいですね。

    ありがとうございました
    2009年7月13日 14:02
  • こんにちは。フォーラムオペレーターの高橋春樹です。

    SurferOnWwwさん、trapemiyaさん
    いつもお世話になっております。

    MYNOBUさん、はじめまして。
    MSDNフォーラムのご利用ありがとうございます。

    情報が更新されないという問題はよくありますよね(^-^)
    同じような問題で悩んでいる方にとっても、有用な情報になったと思います。

    問題が解決したようなので、大丈夫とは思いますが、
    今回、SurferOnWwwさんとtrapemiyaさんの投稿に、
    回答マークを付けさせてもらいました。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年7月21日 8:26