vb6.0でassessDBにアクセスしてるのでが、表示された
DataGrid1が更新できません。
DataGrid1.AllowUpdate = true にしてるのですが?
それだけではなんともいえませんが、
とりあえず、
●ミドルウェアが更新可能かどうか
●クエリが更新可能かどうか
●ファイルが更新可能かどうか
あたりを調べてみては?
入力自体も出来ません。どこか指定があるのでしょうか?
とりあえず、試してみましたが、
http://support.microsoft.com/default.aspx?scid=kb;ja;224192
のコードにDataGrid1.AllowUpdate = Trueを追加するだけで、
Customerテーブルが更新可能でした。
なので、
書いたコードが正しくないか、連結しているクエリーが更新不可能なのでは?
としか言えないですね。
どんなテーブルに対してどういうコードを書いてるのか
が判れば、それに対してアドバイスが可能ですが。
'** ODBC 接続
Set cn = CreateObject("ADODB.Connection")
cn.Open "dsn=SAK3;uid=sak;pwd="
cn.CursorLocation = 3
Dim sql As String
sql = "select * from T_住所録 where 性別='" & Me.cmd_sex.Text & "'"
'** レコードセットオープン
Set rs = cn.Execute(sql)
'** トランザクション開始
cn.BeginTrans
DataGrid1.AllowAddNew = False
DataGrid1.AllowDelete = False
DataGrid1.AllowUpdate = True
Set DataGrid1.DataSource = rs
datagridに入力も出来ません。
MDBが相手なら、ODBCじゃなくて専用のOLEDBプロバイダを使用したほうがいいかも(経験則)。
cn.Executeで受け取ってきたレコードセットは更新不可になっているケースが考えられるので、ここでのBeginTransはちょっと微妙。
レコードセットはOpenメソッドを使用して、http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdmthrstopen.asp
カーソルタイプ、ロックタイプを明示して開いてみては?
(サンプルは前述
http://support.microsoft.com/default.aspx?scid=kb;ja;224192
)
lock type がreadonly になってました。それは下記例を参照して
更新系に変えれましたが
レコードセットはOpenメソッドを使用して、http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdmthrstopen.asp
の例でAdodc1はどのように定義すればよいのでしょうか?
>Adodc1はどのように定義すればよいのでしょうか?
フォームにADOデータコントロール(Microsoft ADO Data Control 6.0 (OLEDB) )
を貼り付けてください。
ADOデータコントロール無しでも、OpenしたRecordsetを直接、
Set DataGrid1.DataSource = rs
としてもOKです。
解ケツしました。ありがとうございました。
>←解決時は質問者本人がここをチェックしてください。
チェックしてください
'** ODBC 接続
Set cn = CreateObject("ADODB.Connection")
cn.Open "dsn=SAK3;uid=sak;pwd="
cn.CursorLocation = 3
'oledb 接続
Dim strConn As String
Dim stcnQL As String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\Nwind.mdb;"
Set cn = New ADODB.Connection
cn.Open strConn
更新系のdatagridはodbc接続では#errorと表示されます。
datagridの表示のみは、表示されます。
一方oledb接続だと表示、更新できます。
datagridの更新系には、odbc接続は使えないって事ですか?
正確には、貴殿が示されたコードはどちらも「OLEDB接続」といえます。
前者はJet4.0 OLEDBプロバイダ接続で、プロバイダ名を省略している後者は、
OLEDBプロバイダ for ODBCが使用されています。
大雑把な説明ですが、
Jet4.0 OLEDBプロバイダの場合は、
MDB⇔Jet4.0 OLEDBプロバイダ⇔ADO⇔プログラム
OLEDBプロバイダ for ODBCの場合は、
MDB⇔ODBC⇔OLEDBプロバイダ for ODBC⇔ADO⇔プログラム
みたいな感じで余計なデータのやりとりが入るので、
パフォーマンスその他もろもろで不利です。
試しに、前者のコードのほうで、
strConn = "DBQ=D:\NWIND.MDB;FILEDSN=D:\Program Files\Common Files\ODBC\Data Sources\NWIND.dsn"
のように指定してみてください。
当方が試した範囲では、OLEDBプロバイダ for ODBCでも、
customersテーブルをDataGridで更新可能でした。
以上のことから、
>datagridの更新系には、odbc接続は使えないって事ですか?
に関しては「いいえ」です。
更新出来ないのは、レコードセットのタイプの指定が適切でない等、
コードの書き方に問題があるものと推測します。
Set cn = CreateObject("ADODB.Connection")
↓
Set cn = new ADODB.Connection としたら出来ました。
ありがとうございます。助かりました。今後ともご指導お願いします!。
ツイート | ![]() |