vb6.0 DataGrid1 で更新できません

解決


初心者  2005-07-04 06:18:20  No: 90797

vb6.0でassessDBにアクセスしてるのでが、表示された
DataGrid1が更新できません。
DataGrid1.AllowUpdate = true にしてるのですが?


Say  2005-07-04 08:34:16  No: 90798

それだけではなんともいえませんが、
とりあえず、
●ミドルウェアが更新可能かどうか
●クエリが更新可能かどうか
●ファイルが更新可能かどうか
あたりを調べてみては?


初心者  2005-07-05 06:52:35  No: 90799

入力自体も出来ません。どこか指定があるのでしょうか?


もげ  2005-07-05 18:03:01  No: 90800

とりあえず、試してみましたが、
http://support.microsoft.com/default.aspx?scid=kb;ja;224192
のコードにDataGrid1.AllowUpdate = Trueを追加するだけで、
Customerテーブルが更新可能でした。
なので、
書いたコードが正しくないか、連結しているクエリーが更新不可能なのでは?
としか言えないですね。
どんなテーブルに対してどういうコードを書いてるのか
が判れば、それに対してアドバイスが可能ですが。


初心者  2005-07-05 22:17:10  No: 90801

'** 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に入力も出来ません。


もげ  2005-07-06 00:41:33  No: 90802

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


初心者  2005-07-06 06:24:30  No: 90803

lock type がreadonly になってました。それは下記例を参照して
更新系に変えれましたが
レコードセットはOpenメソッドを使用して、http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdmthrstopen.asp
の例でAdodc1はどのように定義すればよいのでしょうか?


もげ  2005-07-07 00:59:37  No: 90804

>Adodc1はどのように定義すればよいのでしょうか?

フォームにADOデータコントロール(Microsoft ADO Data Control 6.0 (OLEDB) )
を貼り付けてください。

ADOデータコントロール無しでも、OpenしたRecordsetを直接、
  Set DataGrid1.DataSource = rs
としてもOKです。


初心者  2005-07-07 03:35:07  No: 90805

解ケツしました。ありがとうございました。


いな  2005-07-07 06:32:02  No: 90806

>←解決時は質問者本人がここをチェックしてください。

チェックしてください


初心者  2005-07-07 21:29:06  No: 90807

'** 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接続は使えないって事ですか?


もげ  2005-07-07 22:16:32  No: 90808

正確には、貴殿が示されたコードはどちらも「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接続は使えないって事ですか?

に関しては「いいえ」です。

更新出来ないのは、レコードセットのタイプの指定が適切でない等、
コードの書き方に問題があるものと推測します。


初心者  2005-07-08 00:22:40  No: 90809

Set cn = CreateObject("ADODB.Connection")

Set cn = new ADODB.Connection  としたら出来ました。
ありがとうございます。助かりました。今後ともご指導お願いします!。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加