VB.NET MDB(Access 2002) が更新されない

このQ&Aのポイント
  • 簡単に作ったプログラムでMDB形式(Access)に用意したテーブルをTableAdaperでVB.netが自動生成したプログラムを実行してみたところうまく更新されません。
  • 他の方法をいろいろ試したがダメでした。下記は二つの項目を画面に配置して自動生成されたものです。
  • メモリー上では更新されますが物理的にはUpdateがされません。一旦、画面をとじて開くと更新されていません。なぜでしょうか?SQL Serverではこんなことはおきませんでした。
回答を見る
  • ベストアンサー

VB.NET MDB(Access 2002) が更新されない

簡単に作ったプログラムで 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 ____________________________________________

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

MDBファイルがプロジェクト内にある場合『常にコピー』となっているとIDEから実行するたびにMDBファイルを上書きしてしまうことがあります プロジェクトエクスプローラの中にMDBファイルがあるなら一度確認してみましょう プロパティの種類が何だった当方の現在環境では確認できないので申し訳ありません 『常にコピーする』『新しい場合はコピーする』『コピーしない』 などの種類が選べるものです

NOBNNN
質問者

お礼

ありがとうございます。  edfox63さんのおっしゃるとおりです。 自己解決しました。 MSDNのフォーラムにて解決できました。 参考 http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/b3803361-cdbc-4aa6-a6c3-89f8a8546eaa

関連するQ&A

  • データベースを更新したい(VB2008)

    VB2008でつくったアプリケーションでAccessのデータを更新したいです。DataGridView1でデータを表示させ更新ボタン押下時にデータ(Accessのテーブル)を更新したいです。 DataGridView1でデータを表示することはできましたが、「更新」押下に更新されません。 Accessのテーブル名は「01データです」 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me._01データTableAdapter.Fill(Me.年賀状DataSet._01データ) End Sub Private Sub 更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 更新.Click With DataGridView1 .Update()     End With     MsgBox("更新しました") End Sub

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • データの呼び出し

    自分のプロフィール等をデータベースに記録するソフト作りで、まず簡単に「自分の名前」を書き込んだりそれを読みだすだけのものを作ろうと思ってます。 市販の本を参考にトライしている最中ですが、断念しかけています。 「Table1」はテーブルのnameです。 ______ Public Class Form1 Private Sub Table1BindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Table1BindingNavigatorSaveItem.Click Me.Validate() Me.Table1BindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.Database1DataSet) End Sub _____ Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Table1TableAdapter.Fill(Me.Database1DataSet.Table1) End Sub ____ Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click Table1BindingSource.AddNew() End Sub End Class ______ TextBoxプロパティDataBindingsのTextは「BindingSource - name」にしてあります。デザイナのテキストボックスはデータソースからドラッグしたものです。(Table1\name) テキストボックスに入力したものは、これでデータベースに保存できると思います。 次回からこのソフトを立ち上げたときに、自動的にプロフィールを呼び出せるようにしたいです。 Loadのイベントハンドラで 「もし(If)データベースに表示すべきデータがあるなら TextBoxname.Text = 何らかのコード」で良いと思うのですが、データがあるかないかという判定や、何らかのコードが分かりません。 知識不足なところですが、ヒント等ご教授いただけたらと思います。

  • データベースの更新を行うには?

    はじめまして。下記の問題についてご教授願いします。 ■環境 OS:XP SP2 開発環境:VSDE2008(SP1)のVB2008 .NET Framework:3.0 データベース:Access2002でmdb作成 ■概要 プロジェクト作成後、フォームにデータテーブルの列の要素をドロップし、 バインディングによりフォームを作成しています。 起動時に入力フォームにデータを入力しBindingNavigatorコントロールにより新規追加/削除/保存を行うプログラムです。 ■問題点 新規追加→データを入力→保存 の場合はデータベースは更新されるのですが、 データベースに保存されているデータを編集→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な UpdateCommand が必要です。"とエラーになり更新できません。 データベースに保存されているデータを削除→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な DeleteCommand が必要です。"とエラーになり更新できません。 TableAdapterを使用しているのですが、UpdateCommand,DeleteCommandは作成作成されないのでしょうか? ■コード Imports System.Data.OleDb Public Class CustomerForm Private Sub CustomerForm_Load(ByVal sender As_ System.Object,ByVal e As System.EventArgs) Handles MyBase.Load Dim strSQL As String = "SELECT * From customer" Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0/以下省略) Me.CustomerTableAdapter.Fill(Me.OrderDataSet.customer) End Sub Private Sub BindingNavigatorMoveFirstItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles       BindingNavigatorMoveFirstItem.Click CustomerBindingSource.MoveFirst() End Sub Private Sub BindingNavigatorMovePreviousItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMovePreviousItem.Click CustomerBindingSource.MovePrevious() End Sub Private Sub BindingNavigatorMoveNextItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click CustomerBindingSource.MoveNext() End Sub Private Sub BindingNavigatorMoveLastItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveLastItem.Click CustomerBindingSource.MoveLast() End Sub Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click CustomerBindingSource.AddNew() End Sub Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click If MsgBox("削除してもよろしいですか", MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2) = MsgBoxResult.Yes Then CustomerBindingSource.RemoveCurrent() End If End Sub Private Sub CustomerBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CustomerBindingNavigatorSaveItem.Click, Me.FormClosing Me.Validate() If HandleInputError() = False Then If TypeName(e) = "FormClosingEventArgs" Then DirectCast(e, FormClosingEventArgs).Cancel = True End If Return End If Me.CustomerBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.OrderDataSet) End Sub ■データベースファイル order.mdb 商品テーブル id name address phoneの4列 idが主キーでオートナンバーに設定してます。

  • Call文 でデバックできません。

    VB初心者です。 Win2003Sarver+SQL2000+VB.Net2008の組合せで作っています。 Call文で下記の様にすると Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call Button1600_Click() <--ここでデバックできません。 End Sub Private Sub Button1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1600.Click Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call Button1600_Click() デバックできません。 下記の様にすると動きます。 Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call B1600() End Sub Private Sub B1600 Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call先に Click(ByVal sender As System.Object, ByVal e As System.EventArgs) が あると引数か何かが必要になるのでしょうか。 ご存知の方教えてください。

  • VB添削

    このプログラムは 例えば3 3 4とテキストボックスに数字が打ち込まれると 3×3行列が4個分 のテキストボックスがでてきます。 ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。 以下のプログラムはできたところまで作成しています。 どこを直せばよいのでしょうか。 Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 3 AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged Next End Sub Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) With CType(sender, TextBox) .Text = .Text.Substring(0, .Text.Length - 1) .SelectionStart = .Text.Length End With End If Dim cnt1 As Integer Dim cnt2 As Integer Dim cnt3 As Integer If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then For k = 1 To cnt3 For i = 1 To cnt1 For j = 1 To cnt2 Dim tb As TextBox = New TextBox() tb.Name = "tb" + i.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 28 + 55 tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10 tb.Width = 25 Next Next Next End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Bounds = New Rectangle(10, 10, 1350, 800) Me.AutoScroll = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tb" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text) Next tb.Text = sum.ToString() Next Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub End Class

  • VB2008EEラジオボタンにて、

    VB2008EEラジオボタンにて、 チェックされていない時、というのはif文で指定できるでしょうか? チェックボックスは、下記で出来ますが、ラジオボタンでは出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "1" End If End Sub 複数のラジオボタンがあって1つ選んだ後に別のを選び直した後に、選ばれてないほうの値を変えたいです。 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • 簡単なプログラムにまとめる方法

    前回、同じようなプログラムを簡単にまとめる方法を教えて頂いたのですが新しい事で困ってしまいました。 説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus Me.TextBoxNum.Text = "1" End Sub Private Sub TextBox2_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2_1.GotFocus Me.TextBoxNum.Text = "2" End Sub Private Sub TextBox3_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3_1.GotFocus Me.TextBoxNum.Text = "3" End Sub 上記のプログラム、TextBox○○○_1.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、以下のプログラムで纏めたのですが、 Me.TextBoxNum.Text = "○○○" にフォーカスされたTextBox○○○_1の○○○を入れる方法はありますか? Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus,TextBox2_1.GotFocus,TextBox3_1.GotFocus Me.TextBoxNum.Text = "○○○" End Sub 説明が下手くそでスイマセン、ほかに新しい方法でも有ればお願いします よろしくお願いしますm(__)m

  • VBのこのコードの意味を教えてください。(至急)

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click このコードの意味を教えてください。 よろしくお願いします。

専門家に質問してみよう