mdbで”行が見つからなかっため、更新できません。〜”エラーを出さずに更新するには?


Cappuccino  2006-10-14 05:42:07  No: 133707

毎々お世話になっております。早速ですが質問させていただきます。
環境は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の後で調べましたが、変わっていませ
んでした。他に原因となるようなことがあるのでしょうか?
どなたかご教示いただけませんでしょうか。よろしくお願い致します。


魔界の仮面弁士  2006-10-14 08:39:41  No: 133708

> 定義されているフィールドが多すぎます。
思い出すのは、このあたり…。
http://www7.big.or.jp/~pinball/discus/vb/59047.html

あとは今回の問題とは別件で、ここも見ておいた方が良いかと。
http://www.canalian.com/workshop/access/JetCache.html

> カーソルタイプがプロパティで設定しているものと途中のOpen後の後で変わってしまっているため
その点は大丈夫だと思いますよ。
何しろ、指定しているのがクライアント静的カーソルになっていますし。


Cappuccino  2006-10-14 12:30:16  No: 133709

魔界の仮面弁士さん、いつもありがとうございます。
一通りリンク先を読ませていただきました。
フィールドを255個フルに使ってしまっている時点でNGということですかね…。


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

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






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