• 締切済み

VB2008を用いたDBの更新について

始めまして。 VB2008とMySQL2008を用いて簡単な商品管理のプログラムを作成しようと しているのですが、VBを使って自分で作成したDBへ追加するといった処理が どうしても上手くいかない為、質問させていただきにきました。 /*****VB2008のプログラム*****/ '商品情報追加 Private Sub 追加btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 追加btn.Click Dim r As FDA_DBDataSet.商品マスタRow Try r = Me.FDA_DBDataSet.商品マスタ.New商品マスタRow() r.Item(0) = 商品ID_text.Text r.Item(1) = 商品名_text.Text r.Item(2) = CInt(単価_text.Text) r.Item(3) = 型番_text.Text r.Item(4) = 仕入先CD_text.Text r.Item(5) = CInt(リードタイム_text.Text) r.Item(6) = 備考_text.Text Me.FDA_DBDataSet.商品マスタ.rows.Add(r) Me.商品マスタTableAdapter.Update(Me.FDA_DBDataSet.商品マスタ) Catch ex As Exception MsgBox("入力値エラーです。正確な値を入力してください。", 0, "エラー") End Try Me.商品マスタTableAdapter.商品IDソート(FDA_DBDataSet.商品マスタ) End Sub /*****ここまで*****/ 上記の処理はVBのフォーム上で追加というボタンを押したらFDA_DBという名前のDBの 商品マスタというテーブルにフォーム上で入力したデータを書き込むという処理をしようとしています。 追加ボタンを押したとき、プログラムが起動している最中はフォーム上のDataGridViewにはきちんと値が追加され表示もできているのですが、実際にDBの中身を確認してみるとDBへの追加処理が行われておらずプログラムを再起動させると当然ながら追加していたデータも消えてしまいます。 どうにかして実際のDBに反映させる方法はないでしょうか?

みんなの回答

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.1

トランザクション 処理(質問でいうUpdate) コミット コミットしてないからじゃないすかね。

Fattest
質問者

お礼

返事が遅れて申し訳ありません。 こちらの単純なミスでデータベースの接続先がおかしくなっていたのが原因でした。 もう少しきちんとチェックしてたらこういうことには・・・ 何はともあれご回答ありがとうございました。

関連するQ&A

  • VB2005のTableAdapterのInsertについて

    教えてください。 現在VB2005の環境で開発をしています。 DBにレコードを追加のに、TableAdapterのInsertを使っています。 ------------------------------------------------------------ Dim regiontableadapter  As New mydtbsDataSetTableAdapters.EmployeeTableAdapter regiontableadapter.Insert("鈴木","太郎") ------------------------------------------------------------ と入力しました。 DBには反映が出来たのですが、DataGridViewには反映が出来ません。 どうしたら反映が出来ますでしょうか? 現在はわからないので、下記の文を追加しています。 ------------------------------------------------------------ TableAdapter.Fill(Me.MydtbsDataSet.Employee) ------------------------------------------------------------ 普通はこのやりかたでDataGridViewに反映をさせるのでしょうか? 以上2点の質問です。 お解りになるかた、教えてください。

  • VB2013でVB6でのDBは利用可能?

    VB4.0で作成してましたMicrosoft.Jet.OLEDB.4.0のDBをSQLSERVER2012で作成したDBに移行したいのですが VB2013では読み込めないのでしょうか? データーベースエクスプローラーでは中身の確認はできるのですが プログラムで走らせるとSqlDataAdapter(sql, cnStr)のところでエラー下記[エラー結果]とになります Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim cnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\SERVER\DB名.mdb" Dim sql As String sql = "SELECT * FROM テーブル名" Dim dt1 As New DataTable Dim da1 As New SqlDataAdapter(sql, cnStr) Try da1.Fill(dt1) DataGridView1.DataSource = dt1 Catch ex As Exception End Try End Sub [エラー結果] 型 'System.ArgumentException' のハンドルされていない例外が System.Data.dll で発生しました 追加情報:キーワードはサポートされていません : 'provider' 以前のmdbファイルが読み込める方法はないのでしょうか?

  • VB2005でDB接続

    勉強で、VB2005でAccessDB接続するプログラムを作成しています。 目的は商品コードを入力すると、DBに売上げが計上され、今日の売上げ内訳一覧を表示する、ごくシンプルな練習用プログラムです。 基本的なコーディングは大丈夫ですが、教科書では非接続型・デザイナでのせてあり、VBサンプル集では接続型・非デザイナで、ややこしく混乱して、理解できずに困っています。何がどう違うんでしょうか。お願いいたします。

  • VB.NET LoadDataRowでDBデータの更新ができない

    VB.NETですが、 DataSet.Tables(0).LoadDataRow()でデータの更新をしたいのですが DBに登録されません。なぜでしょうか 以下の手順の処理で問題があるのでしょうか? 以下ソース pAddUpdList(0) = "2" pAddUpdList(1) = "2" pAddUpdList(2) = "col1data" pAddUpdList(3) = "col2data" f(ここでwDataSet.Tables(0)のプライマリーキーの設定処理) wDataSet.Tables(0).BeginLoadData() Dim myRow As DataRow myRow = wDataSet.Tables(0).LoadDataRow(pAddUpdList, True) wDataSet.Tables(0).EndLoadData() ' ここの時点でwDataSetはちゃんと更新されているのですが f(ここでOleDbDataAdapter.Update(wDataSet):DBアップデート処理) 'しかしDBに反映されてない ------ LoadDataRowでネットを検索してみたのですが、ヒットするものがあまりありません。 サンプルなどがあれば教えていただきたいのですが。

  • VB2005 データセットの内容をDBに更新

    VB2005Expressにて開発を行っています。 ・DBから条件を指定して抽出した値をデータセットにセット ・データセット内の値を編集(追加、更新、削除) ・データセットの値をDBへ更新 という処理を行った場合、DB側では 1.データセットの値だけが更新される  (抽出されてないデータは残っている) 2.データセットの値に更新されるので、データセットの値のみになる  (抽出されてないデータは消えてしまう) のどちらなのでしょうか。 どなたかご存知でしたら教えてください。

  • 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 ____________________________________________

  • VB5でCSVデータをAccess97のDBへセット

    普段はVB.NETの開発をすこししているのですが VB5のプログラムの修正の依頼が来て困っています。 CSVのデータをVB5でAccess97のDBへデータセットしたいのですが VB.Netでは同様のプログラムを作成した事があるのですが VB5は全然仕様が違うので困っています。 VB5でCSVを読み込んで配列にセットするにはどのように したらいいのでしょか?CSVを行で読み込むところは なんとか調べてわかりましたが、VB5ではSplitや配列が使えそうに ないのでどのようにしたらいいのかわかりません。 よろしくお願いします。 現在のソース Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "c:\infile.csv" For Input As #intFileNo Do While Not EOF(intFileNo) Line Input #intFileNo, strTextLine Loop Close #intFileNo

  • データベースを更新したい(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 DB更新時にパラメーターへ値のセット

    データベースの更新についてご指導下さい。 VB2010からSQLサーバーのデータベースに接続しております。 dataAdapter.Updateによりデータベースを更新する際の パラメーターへ値をセットする方法を教えて下さい。 テーブル名Test Code Name ------------ A   Suzuki 希望する処理 テキストボックスに入力された名前に変更 例) Suzuki → Yamada ○フォームの変数として定義 Dim dataAdapter As New SqlDataAdapter Dim dataSet As New DataSet ○FormLoad時にSelectCommandとUpdateCommandを設定 Dim SQL As String = "" Dim command As SqlCommand Dim connection As SqlConnection = New SqlConnection(~) SQL = "SELECT * FROM Test WHERE Code = @code " command = New SqlCommand(SQL, connection) dataAdapter.SelectCommand = command dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char) SQL = "UPDATE Test SET Name = @name WHERE Code = @code" command = New SqlCommand(SQL, connection) dataAdapter.UpdateCommand = command dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char) dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50) ○データ表示時にはこれで表示されました。 dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text dataAdapter.Fill(dataSet) ○このSelectCommandを参考にこのように書いて見たのですが更新されません。 dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text dataAdapter.Update(dataSet) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。

  • DataGridViewからDBの更新

    DataGridViewの内容を変更してボタンを押したらDBを更新する ということをしたいのですが とあるサンプルコードには Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("t_商品") Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=C:\VB2008\SampleDB.accdb;") 'データセットに取得してデータを表示する dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn) dAdp.Fill(dSet, "t_商品") Me.DataGridView1.DataSource = dSet.Tables("t_商品") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dTbl As DataTable Dim dRow As DataRow Dim i As Integer 'DataGridからデータソースを取得する dTbl = Me.DataGridView1.DataSource '編集された行をコミットする For Each dRow In dTbl.Rows If dRow.RowState <> DataRowState.Unchanged Then dRow.AcceptChanges() End If Next End Sub End Class となっているのですがこのまま使用しても更新されません 全くの他力本願な質問ですがよろしくおねがいします イミデイトにはグリッド内容をnchange」になっています?