0

VB6 の SQLServer バックエンドに対して、ADO レコードセットに次の SQL を使用しています。

select c.name, taxid=
   case when exists(select 1 from sometable where fld='abc') 
   then c.SSN else null end

レコードセット内の行にある taxid フィールドをローカルで更新しようとすると、ADO から「複数ステップの操作でエラーが発生しました。各ステータス値を確認してください」というエラーが表示されます。Taxid フィールドが生のテーブル列ではなく計算フィールドから来ているという事実に悩まされていると思います。私の目的のために、これらの変更をデータベースに永続化するつもりはないので、ローカルでデータを変更できるように、変更を永続化する意図がないことを ADO に伝える方法を探しています。

4

1 に答える 1

1

@HK1の提案は良いものだと思いますが、更新しようとしている列が計算されているかどうかに関係なく、レコードセット内の値を変更する能力がどうなるかわかりません。従来の ADO で遊んでから長い時間が経ちましたが、レコードセットが切断されると、その時点で読み取り専用になる可能性があります。

しかし、レコードセットを使用して更新を実行することに関心がなく、値をローカルで変更する必要がある場合は、最初に結果をローカル配列に格納することを検討する必要があります。これにより、たとえば、レコードセットのロック オプションとカーソル オプションを最小限に抑え、すぐにレコードセットを閉じてそれらのリソースを解放することができます。

rs.Open cmd, conn, adOpenForwardOnly, adLockReadOnly

Dim MyArray
MyArray = rs.GetRows()

rs.Close: set rs = nothing

これで、好きなように操作できMyArrayます...

于 2012-04-24T03:21:08.413 に答える