• 締切済み

デ-タテ-ブルの内容での更新の書き方が分らず困っています

VB2008とADO.NETを勉強中の初心者です。 以下のようなプログラムで、デ-タテ-ブルの内容を変更後(このプログラムでは削除のみですが、追加の処理もやりたいと思っています)"SYOYOURYOU"を更新して、再度読み込みたいと思っています。 いろいろ、参考書等を見たのですが旨く処理できません。 *DBを再読み込みのために更新* の部分での記述の方法を教えて頂けないでしょうか。 よろしくお願いします。 '*LLCの初期化 Dim LLC As Integer = 0 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\MAPICS\MAPICS-S.mdb" Dim da As OleDbDataAdapter 'DataAdapterの作成 '*LLCを 0 から 10 まで処理 For LLC = 0 To 10 '所要量抽出 'DataAdapterの作成 da = New OleDbDataAdapter("SELECT * FROM SYOYOURYOU WHERE Syo_LLC =" & Str(LLC), cn) 'データを取得 Dim ds As New DataSet da.Fill(ds, "SYOYOURYOU") If ds.Tables("SYOYOURYOU").Rows.Count > 0 Then 'DataGridViewに表示 DataGridView1.DataSource = ds.Tables("SYOYOURYOU") MsgBox("確認1") For i = 0 To ds.Tables("SYOYOURYOU").Rows.Count - 1 'SYOYOURYOUをもとに処理を行う(この部分は省略) '処理済みのSYOYOURYOUのデ-タを削除 Dim dr As DataRow dr = ds.Tables("SYOYOURYOU").Rows(i) dr.Delete() 'DataGridViewに表示 DataGridView1.DataSource = ds.Tables("SYOYOURYOU") MsgBox("確認1") Next '***************************** 'DBを再読み込みのために更新 '***************************** End If Next '終了処理 End

みんなの回答

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

教科書どおりの手順で DataAdapterやDataSetを生成してあるのでしょうか? 質問の部分では DataAdapterは『da』、DataSetは『ds』としていますよね これでは Update用のSQLは自前で構築するかOldeDbCommandBuilderで生成することになります dim cb as new OleDbCommandBuilder( da ) といった具合で UpdateやInsert,Delete用のOleDbCommandオブジェクトを生成してdaに関連付けをしておきます # WHERE付で 自動生成したかなぁ ・・・ 削除処理の段階で da.Update(ds) でいいように思います ・・・

SIPPOPAPA
質問者

お礼

お手数をかけました。 重ねての回答ありがとうございました。 Dim cmdbuler As New OleDbCommandBuilder cmdbuler.DataAdapter = da da.Update(ds, "SYOYOURYOU") でうまくDBを書き換えることができました。 今後ともよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

データの削除を MDBに反映させた後 もう一度削除済みのデータを読み込むのでしょうか? それとも別のDataSet(または DataTable)へ削除前のデータを読み込みたいのでしょうか? 前者なら TableAdpternのUpdateメソッドで反映させるだけのように思います 後者なら 別のdsオブジェクト等を生成して Fillすればいいのでは ・・・ # 見当違いならご容赦ください

SIPPOPAPA
質問者

補足

早速の回答ありがとうございました。 >データの削除を MDBに反映させた後 もう一度削除済みのデータを読み込むのでしょうか はい、上記のような処理をしたいと思っています >前者なら TableAdpternのUpdateメソッドで反映させるだけのように思います 参考書にも以下のように書いてあり、 Dim tb As DataTable tb = OrderDataSet.Goods.GetChanges(DatarowState.Deleted) GoodsTableAdapter.Update(tb) これを質問のプログラムのデ-タセットに置き換えて入力すると Dim tb As DataTable tb = MAPICS_SDataSet.SYOYOURYOU.GetChanges(DataRowState.Deleted) SYOYOURYOUTableAdapter.Update(tb) エラー 1 名前 'MAPICS_SDataSet' は宣言されていません。 エラー 2 名前 'SYOYOURYOUTableAdapter' は宣言されていません。 のエラ-が出てしまいます。 エディタ-のデ-タソ-スウインドウには、'MAPICS_SDataSetのしたに SYOYOURYOUTが表示されています。 お手数を掛けますが、どのような記述にすればよいかご教授ください。 よろしくお願いします。

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

関連するQ&A

  • VB2008でMDBのオ-トナンバの項目をキ-にして読み込めなくて困っています

    VB2008とADO.NETを勉強中の超初心者です。 MDBのオ-トナンバの項目をキ-にして、読み込みたいと思って以下のようなプログラムを作ってみました。 Dim yobidashikey As Int32 = 1 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2005\KEYCHECK.mdb" Dim da As OleDbDataAdapter 'da = New OleDbDataAdapter("SELECT * FROM data WHERE key1 = 2", cn) da = New OleDbDataAdapter("SELECT * FROM data WHERE key1 = '" & yobidashikey & "'", cn) Dim ds As New DataSet da.Fill(ds, "data") DataGridView1.DataSource = ds.Tables("data") コメントアウトしてある直接「2」を指定した時は、デ-タグリッドビュ-にオ-トナンバが2の行が表示できました。 次に、yobidashikeyにオ-トナンバの値を入れて動作させると、da.Fill(ds, "data")で「抽出条件でデータ型が一致しません。」のエラ-が出てしまいました。 ちなみに、Dim yobidashikey As Int32 としたのは、DRead.GetFieldType(i).ToString()でオ-トナンバの項目がInt32と 表示されたので、この型にしました。 実際にオ-トナンバをキイ-にして読み込むシステムを作りたいので、是非教えて頂きたいと思います。 よろしくお願いします。

  • VB2005とADO.NETを使った時のSELECT文の書き方で分らないことがあり困っています

    VB2005とADO.NETを本で勉強中の超初心者です。本のサンプルを参考に以下のようなコ-ドを作って動作させるとDataGridViewにDBの内容が正しく表示されますが、 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2005\Order.mdb" Dim da As OleDbDataAdapter da = New OleDbDataAdapter("SELECT * FROM Goods;", cn) Dim ds As New DataSet da.Fill(ds, "Goods") DataGridView1.DataSource = ds.Tables("Good 特定のコ-ドをFormのテキストボックスから入力して、表示させたいと思い"SELECT * FROM Goods WHERE GoodsId = TextBox1.Text;"とするとエラ-になってしまいました。ちなみに"SELECT * FROM Goods WHERE GoodsId = 'A0001';として動作させるとA0001だけを表示することはできました。 どのようにすればテキストボックスや変数で、表示したいコ-ドを指定したら良いか教えて頂けないでしょうか。

  • ビルドしたEXEを実行するとウィスルバスタ-の警告が出てしまいます

    VB2008を勉強中の初心者です。 以下のプログラムをビルトしてEXEファイルを実行すると、ウィルスバスタ-の「インタ-ネットエクスプメラ-の設定変更を拒否する」との警告が出てしまうので、これが出ないような方法はないか伺いたくて投稿いたしました。 これをデバックで実行しても出ませんし、ためしにラベルに文字を表示するだけのプロジェクトを実行して見ましたが、警告は出ませんでした。 原因はVBに有って、ADO.NETが関連しているとは思うのですが、対策は全く分らない状態です。 フリ-ソフトと言うほど大げさなものではないのですが、多くの人に使って貰えるソフトの作成を考えているので、是非でないようにしたいと思っているので、ご教授よろしくお願いします。 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\MAPICAS\MAPICAS-S.mdb" Dim da As OleDbDataAdapter 'DataAdapterの作成 'DataAdapterの作成 da = New OleDbDataAdapter("SELECT * FROM Seihinkousei", cn) da.Fill(_MAPICAS_SDataSet1, "Seihinkousei") DataGridView1.DataSource = _MAPICAS_SDataSet1.Seihinkousei

  • 【VB】データグリッドに読み込んだテーブルの変更を元のデータベースに反映させたい

    VB歴6ヶ月です。 VBのバージョンは2005です。 mdbから読み込んだデータベースをデータグリッドビューコントロールで表示しました。 CNには接続パスが入っていてmdbとの接続は確立しています。 データグリッドビューコントロールのオブジェクト名はDGVです。 読み込むテーブル名はt社員マスターです。 Private sub メンテナンス() Dim DS As DataSet = New DataSet("社員マスター") Dim SQL As String = "SELECT * FROM t社員マスター" Dim DA As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(SQL, CN) DA.Fill(DS, "社員マスター") Dim DV As DataView = New DataView(DS.Tables("社員マスター")) DGV.DataSource = DV End sub これでグリッドに読み込ますことはできたのですが、 読み込んだデータをグリッド上で変更したら元のデータベースにも反映したいのですが やり方がわかりません >< 具体的なコード、やり方を教えていただけたらありがたいです。

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • OLE でACCESSデータを取得するとメモ型の内容255文字で切れてしまう

    お世話になります。 ■開発環境  VisualBasic2008 Express Edition  ACCESS2003(データ) ■質問内容  VBでaccessのmdbからデータを取得し、画面に表示しようと  しています。  ところが、メモ型の項目が255文字で切れてしまいます。  webでいろいろと調べましたが、jetエンジンの問題かなという  ところまではたどり着いたのですが、具体的にどうすれば改善  できるのかわかりません。  わかる方教えていただけないでしょうか。  よろしくお願いいたします。 ■ソース Dim SQL As String Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\message.mdb;") Dim dAdp As OleDb.OleDbDataAdapter Dim dView As DataView Dim dSet As DataSet = New DataSet("Detail") SQL = "SELECT M_ID,M_Title,M_Detail FROM MESSAGE_TBL " dAdp = New OleDb.OleDbDataAdapter(SQL, Cn) dAdp.Fill(dSet, "Detail") dView = New DataView(dSet.Tables("Detail"), "", "", DataViewRowState.CurrentRows) DataGridView1.DataSource = dView M_ID : 数値型、M_Title : テキスト型、M_Detail : メモ型 DataGridView1に表示されるときには、M_Detailが255文字になっています。     また、 'MessageBox.Show(Len(dSet.Tables("Detail").Rows(1)(2)))     で見たときにすでに255文字に切れていました。

  • アクセスDbのテーブル項目属性の取得(VB2005)

    ご協力いただき、table名 field名までは取得できたのですが、種々プロパティを試していますが、fieldの「桁数」「タイプ」がどうしても取得できません。DAoでは .size .type だったのですが。 この部分接続など略(800文字とのことなので) Cn.Open() Dim S As String Dim tbl As DataTable Dim myRows() As DataRow tbl = Cn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) Dim I As Short myRows = tbl.Select() 'S = myRows(1).ItemArray(2) Dim ds As New DataSet For Each row As DataRow In myRows 'MsgBox(row.ItemArray(2)) Dim cmd As New OleDb.OleDbCommand("SELECT * From " + row.ItemArray(2), Cn) Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader Dim da As New OleDb.OleDbDataAdapter("SELECT * From " + row.ItemArray(2), Cn) da.Fill(ds, row.ItemArray(2)) For I = 0 To dr.FieldCount - 1 S = dr.GetName(I) 'Field name S = ds.Tables(0).Columns(I).ColumnName          この2行は同じものがとれます。 tables columns gettypeなど どれもうまく取得できませんでした。 よろしくご教示ください。

  • .NET MDBデータベース更新について質問です

    DataGridViewで表示するところまでできたのですが DataGridView上で編集したものを更新ボタンで MDBデータベースに上書き保存という形で 行いたいのですがいろいろ調べてもわかりませんでした。 VBを初めて日が浅いのでこつこつ勉強中なのですが 業務上の都合でDBの作成を行っています。 基本的に書き直したもの 'データベース取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=保存場所" ) Dim Cm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(Cm) Dim Table As New DataTable Cn.Open() Cm.CommandText = "SELECT * FROM Aテーブル" Adapter.Fill(Table) DataGridView1.DataSource = Table DBにはこのように接続しております。 ここまでも手探りで行ったので熟練の方から見ればへんかもしれませんが指導おねがいします。

  • Datagridviewのコンボボックスにつきまして

    vb2005です。 DataGridViewコントロールのデータセットにデータベースのテーブルをセットしています。 そのDataGridViewの1列目にコンボボックスを設定し、 そのコンボボックスのデータセットにも別のテーブルをセットしたいのです。 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As New DataSet Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 商品", cn) dAdp.Fill(dSet, "t_商品") DataGridView1.DataSource = dSet.Tables("t_商品") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 品種", cn) dAdp.Fill(dSet, "t_品種") Dim col As System.Windows.Forms.DataGridViewComboBoxColumn = DataGridView1.Columns(1) ・・・・★ col.DataSource = dtSet.Tables("t_品種") col.DisplayMember = "品種名" col.ValueMember = "品種コード" 上記のように記述しているのですが、★の部分で、下記のエラーになります。 型 'System.Windows.Forms.DataGridViewTextBoxColumn' のオブジェクトを型 'System.Windows.Forms.DataGridViewComboBoxColumn' にキャストできません データソースを指定したDataGridViewの列にはコンボボックス等の設定は 出来ないのでしょうか?

  • DataSetの使い方が分らず困っています

    VB2008とADO.NETを勉強中の初心者です。 DataSetに読み込んであるデ-タをクリアしたいと思ってるのですが、方法が分らず困っています。 最終目標のプログラムでは、製品のコ-ドを指定して、その製品を造るために必要な部品・材料を買うプログラムを作りたいと思っています。 そのための勉強として、Form1のTextBoxから製品コ-ドを入力して、"Seihinkousei"に登録してある部品・材料を読み込むプログラムを作成しました。 Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\MAPICAS\MAPICAS-S.mdb" Dim da As OleDbDataAdapter 'DataAdapterの作成 da = New OleDbDataAdapter("SELECT * FROM Seihinkousei WHERE Se_Hinban = '" & TextBox1.Text & "'", cn) da.Fill(DataSet1, "Seihinkousei") DataGridView1.DataSource = DataSet1.Tables("Seihinkousei") 複数回、TextBoxから製品コ-ドを入力してDataGridViewに表示してみると、いままで読み込んでデ-タが、その都度すべて表示されてしまいます。 最終目標のプログラムでは、読込の処理をFunctionにして、どのPrivate SubからでもDataSetの内容を参照したいと思っています。 そのため、DataSetを使い、且つ前回読み込んで内容はクリアして、その都度指定した製品の部品・材料だけの情報にしたいと思っています。 ご教授よろしくお願いします。