私は、adodbレコードセットとMicrosoft Access 2007データベースファイルを使用するVB6プログラムを持っています。私は、テーブル内の各レコードを取るコードをアプリケーションに追加しました。テーブルのほとんどのレコードでは、1つのフィールドを取り、そのフィールドの値に基づいて新しい値を計算し、その値を同じレコードの別のフィールドに格納します。私はこれをテストし、それを生産に入れました。多数のラップトップでエラーが報告されずに実行されています。adodb updateBatch不正な情報を格納する
今日はエラーが報告されました。私が知る限りでは、レコードセットのupdateBatchメソッドは、私がそこに置いた値とは少し異なる値を格納しています。私はそれをデバッガに入れて、新しい値が私が望むものであることを確認しました。私は、基本値と新しい値をファイルに書き込むステートメントを入れて、それらが私が望むものであることを確認しましたが、異なる値がデータベースに入ります。ここで
は、関連するループです:
sqlStr = "Select key_citation, long_citeIndex from citation"
Set rs = m_dbh.runSQLReturnRS_RW(sqlStr)
While Not rs.EOF
citationNumber = rs.Fields("key_citation").value
If Left$(citationNumber, 1) <> "W" Then
newIndex = Citation.calculateCiteIndex(citationNumber)
Open "c:\CitationIndexDebug.txt" For Append As #4
Write #4, citationNumber, newIndex
Close #4
rs.Fields("long_citeIndex").value = newIndex
End If
rs.MoveNext
Wend
rs.UpdateBatch
rs.Close
Set rs = Nothing
RUNSQLなどadOpenDynamic、adLockBatchOptimistic
でレコードセットを開き、私は、各レコードの中でrs.Updateを入れて試してみたが、それはいないようですまったく働く。私は、アプリケーションの残りの部分はupdateBatchを使用しているため、runSQL文はバッチ更新を前提としたレコードセットを開くことを前提としています。
誰かがこれが間違っていると思われる理由がありますが、間違っているのはごくわずかです。私が言っているように、それは私がスコア/何百ものマシンで知ることができるくらい近くで正しく動作しており、この特定のデータベースにエラーがあります。
問題を開発環境で一貫して再現できますか?もしそうなら、私はADODBによってどのSQLコマンドが生成されているかを見るために、更新中のデータベース上でSQLプロファイラを実行することをお勧めします。 –
はい、問題は繰り返し発生する可能性があります。私はSQLプロファイラに慣れていません。私にそれをどのように実行するか教えてくれる何かを教えてもらえますか?これは厳密にデスクトップのMS Accessデータベースです。私はMS Accessを持っていますが、SQL Serverはまったく動作していません。ありがとう! – arcy
おっと、申し訳ありません!私はあなたがアクセスを入れているのを見ましたが、何らかの理由で私はSQLサーバーを想定しました。私のコメントはあまり役に立たない。あなたのために働くかもしれない何かのためのこの質問/答えを見てみましょう:http://stackoverflow.com/questions/2735412/access-mdb-is-it-possible-to-monitor-and-log-actual-質問に対して作られた質問 –