重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VB入門者ですが、よろしくお願いします。(2005)
DataGridViewのデータをアクセスに書き込みたいのですが、うまくいきません。どうすればよいのでしょうか。

「フィールド '(式)' は更新できません。フィールドが更新可能ではありません。」というエラーがでてしまいます。

A 回答 (3件)

恐らくですね、Tetralemmaさんがおっしゃっているように、


データソースがないか、SQLが悪いかのどちらかだと思います。

そこで、確認なんですが、

Dim Table As DataTable = DirectCast(DataGridView2.DataSource, DataTable)



Dim Table As DataTable = TryCast(DataGridView2.DataSource, DataTable)

に変更して頂いて、その時に、変数「Table」には、Nothingが
代入されていないか確認してみてください。

また、もう1つの確認事項として、

SQLCm.CommandText = SQL

の部分で、ブレークポイントを止めて、変数「SQL」に設定されている
値をコピーし、そのコピーしたSQLをAccess側で流した(動かした)
場合、エラーになるか?ならないか?を確認してみてください。

#変数SQLの値を見るには、変数「SQL」を選択して、右Clickし、
 「ウォッチ式の追加」を選択します。
 すると、「ウォッチ」というエリアに変数「SQL」の値が
 どのように設定されているか見ることができます。

・もし変数「Table」が、Nothingであれば、データソースが
 正しく設定されていないです。

・変数「Table」が、Nothing以外が代入されていて、
 SQL変数に代入されているSQL文をAccess側のクエリで
 そのまま実行した場合、エラーになるようであれば、
 SQL文の構文ミスがありますので、見直してみてください。

上記をTable変数、SQL変数に問題がないようであれば、別の問題が
考えられますので、その場合は、別途ご相談頂けたらと思います。
    • good
    • 0
この回答へのお礼

遅くなってすみません。
おっしゃられたように、SQLに問題があったようです。
ありがとうございました。

お礼日時:2007/10/18 15:37

DataGridViewに「データソース」が設定されていないのでしょう。


DataGridViewのプロパティでデータソースを選択し、プロジェクトデータソースを設定してください。

この回答への補足

プロパティでデータソースを選択してみても、同じエラーがでてしまいました。

補足日時:2007/10/09 13:46
    • good
    • 1
この回答へのお礼

遅くなってすみません。
ありがとうございました。

お礼日時:2007/10/18 15:38

VBのバージョンは何をご利用でしょうか?



また、DataGridViewという言い方をしているので、
VB.NET2003か2005(2008ってことはまだないと思いますが)の
Windows Formアプリかと思いますが、バージョンによって
イベントが若干違うので、ご利用バージョンを教えて下さい。

また、このエラーが発生した箇所のソースコードを
可能な範囲で構いませんので、掲載して頂けませんか?

よろしくお願いします。

この回答への補足

バージョンは2005です。

よろしくお願いします。

Private Sub cmdTekiMi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTekiMi.Click
Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path2)
Dim SQLCm As OleDbCommand = Cn.CreateCommand
Dim Table As DataTable = DirectCast(DataGridView2.DataSource, DataTable)
For Each Row As DataRow In Table.Rows(DataRowState.Modified)
  Dim SQL As String = ""
Select Case Row.RowState
Case DataRowState.Modified
SQL = "UPDATE テーブル1 SET "
SQL &= " ID= " & Row("ID") & ", "
SQL &= " 500 = '" & Row("500") & "', "
SQL &= " 900 = '" & Row("900") & "' ,"
SQL &= " 1300 = '" & Row("1300") & "', "
SQL &= " 1700 = '" & Row("1700") & "', "
SQL &= " 2100 = '" & Row("2100") & "', "
SQL &= " 2400 = '" & Row("2400") & "' "
SQL &= " WHERE "
SQL &= " ID = " & Row("ID",DataRowVersion.Original)
Case Else
Continue For
End Select


SQLCm.CommandText = SQL
Cn.Open()
SQLCm.ExecuteNonQuery()
Cn.Close()
Next
Table.Dispose()
SQLCm.Dispose()
Cn.Dispose()
End Sub

補足日時:2007/10/09 11:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!