掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB2010でAccess2003に接続後、データの更新 (ID:147590)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>「位置0には行がありません」とエラーになります。 DataTable に取得した内容が期待通りになっているか もう一度確認してみてください。 DataTable に対して Fill した後、処理を一時停止して DataTable 変数の上にマウスカーソルを重ねてみましょう。 虫眼鏡のアイコンが表示されると思いますが、それを使うと、 DataSet/DataTable の内容をグリッド表示で閲覧する事ができます。 > SQLで得られたレコード数も取得したいのですが ADO でいうところの (静的カーソルの)Recordset.RecourdCount と 同じもので良ければ、DataTable の .Rows.Count を利用できます。 > For i = 0 To 10 > table.Rows(i)("列名") = "**" > OleDA.Update(table) ←エラー発生 > Next (i) Update はループの外に出しましょう。 一行ずつ更新するのではなく、まとめて更新処理をかけます。 > 「更新には、変更された行を含むDataRow コレクションが渡されたとき、 有効なUpdate Commandが必要です。」 OleDbDataAdapter には、 SelectCommand DeleteCommand InsertCommand UpdateCommand というプロパティがあります。 それぞれ、取得・削除・追加・更新のための SQL を保持するものですが、 現在のコードでは、SELECT クエリーしか指定されていません。 つまり、UpdateCommand プロパティが空の状態で実行したため、 更新処理が失敗したという事です。なので、これを用意してやりましょう。 UpdateCommand プロパティは自分でセットしていくこともできますが、 簡単なのは「OleDbCommandBuilder」を使う事です。 確かに先のコードでも OleDbCommandBuilder は宣言されているのですが、 あれでは機能していません。ちゃまきさんのコードを解説つきで抜粋しますね。 ------------------ 'ここで、DataAdapter を生成しています。 'この状態では、SelectComand は作られますが、UpdateCommand はありません。 Public OleDA As New OleDbDataAdapter(strSQL, ConnectionString) 'ここで、UpdateCommand 等が作成されます。 Public cb As New OleDbCommandBuilder(OleDA) 'ここで何故か、接続文字列を再セットしています。 '最初に New した時に、ConnectionString はセットしておいたはずですよね? OleConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & MainD + "Sien2\MASTER\Kanri.mdb" & ";" 'そしてさらにここで、もう一度 DataAdapter を再生成しています。 '先ほど作成してあった UpdateCommand 入りの OleDA は破棄され、 '新たに、UpdateCommand の無い OleDA が再度作り直されたことになります。 OleDA = New OleDb.OleDbDataAdapter(strSQL, OleConn) 'そしてそのまま、UpdateCommand 無しに更新処理を実施しています。 OleDA.Fill(table) -------------------- OleDbCommandBuilder を使った後、UpdateCommand プロパティの内容が どのようになっているか、確認してみてください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.