毎々お世話になっております。早速ですが質問させていただきます。
環境はVB6.0(SP5)でDataEnvironmentを使用しております。
デザイナ上で作成した接続DataEnvironmentのプロパティで、プロバイダを
Microsoft Jet 4.0 OLE DB Providerに設定しました。
その接続に対し、コマンドを2つ追加(コマンド名PInfoおよびSInfo)
しました。コマンドのプロパティはオブジェクト名以外は2つとも同じで、
下記の通りです。
[全般]
データベースオブジェクト:テーブル
オブジェクト名:各対応テーブル名(それぞれPInfoTableとSInfoTable)
[詳細設定]
カーソルの種類:3 - 静的
ロックの種類:3 - オプティミスティック
カーソルの位置:3 - クライアント側カーソルを使用
で、その他はデフォルトのままです。
各テーブルはPInfoTable、SInfoTableともに255フィールドを使用して
います。
この環境で、For〜Nextループで255回ループして、全フィールドに対し
Dim intUpdateCount As Integer
Dim intRCount As Integer
With DataEnvironment.rst_PInfo
.Source = "SELECT * FROM PInfoTable WHERE I002 = '0001'"
.Open
If .RecordCount > 0 Then
.Delete
.Update
End If
.AddNew
.Fields("I002").Value = "0001"
For intRCount = 2 To 255
strFieldName = "I" & Format(intRCount - 1, "000")
.Fields(strFieldName).Value = "値をセット"
If intRCount = intUpdateCount + 90 Then
.Update ----- ①
intUpdateCount = intRCount
End If
Next intRCount
.Update ----- ②
.Close
End With
With DataEnvironment.rst_SInfo
.Source = "SELECT * FROM SInfoTable WHERE I002 = '0001'"
.Open
If .RecordCount > 0 Then
.Delete
.Update
End If
.AddNew
.Fields("I002").Value = "0001"
For intRCount = 2 To 255
strFieldName = "I" & Format(intRCount - 1, "000")
.Fields(strFieldName).Value = "値をセット"
If intRCount = intUpdateCount + 90 Then
.Update ----- ③
intUpdateCount = intRCount
End If
Next intRCount
.Update ----- ④
.Close
End With
と言う処理を行ったとき、①と②、および1回目の③ではエラーが発生
しませんが、2回目の③で”行が見つからなかっため、更新できません。
列の値は最後に読み込まれた後で変更された可能性があります。”という
エラーと、④で”定義されているフィールドが多すぎます。”というエラー
が発生してしまいます。
過去ログ、他の掲示板等調べましたところ、”カーソルタイプがプロパティ
で設定しているものと途中のOpen後の後で変わってしまっているため”と
いうような記述を見たので、各.Openの後で調べましたが、変わっていませ
んでした。他に原因となるようなことがあるのでしょうか?
どなたかご教示いただけませんでしょうか。よろしくお願い致します。
> 定義されているフィールドが多すぎます。
思い出すのは、このあたり…。
http://www7.big.or.jp/~pinball/discus/vb/59047.html
あとは今回の問題とは別件で、ここも見ておいた方が良いかと。
http://www.canalian.com/workshop/access/JetCache.html
> カーソルタイプがプロパティで設定しているものと途中のOpen後の後で変わってしまっているため
その点は大丈夫だと思いますよ。
何しろ、指定しているのがクライアント静的カーソルになっていますし。
魔界の仮面弁士さん、いつもありがとうございます。
一通りリンク先を読ませていただきました。
フィールドを255個フルに使ってしまっている時点でNGということですかね…。
ツイート | ![]() |