ADOでrecordset.MovenextやMovepreviousでレコードを移動しながら処理
しようとしているのですが、ソート前の元アドレス(Bookmarkプロパティ)
に基づいて動くようなのです。
ソート後の順に動くようにするにはどうしたら良いのでしょうか?
ACCESSです。プログラムの初めにソートかけると順番は良いようなので
すが、データ書込みコマンド(update)時「クエリーが複雑すぎます。」
となってしまいます。
よく内容が解らないのですが・・・
要は、SELECT文で必要なデータをテーブルから抽出する際に
どこかのフィールド情報でソーティングした結果を取得した
いと言うことだと思いますが。
では、ORDER BY 句 で、ソートしたいフィールドを指定し
て抽出した結果を取得するようにしたらOKじゃないですか?
ご確認下さい。
それから、UPDATEで、SQL文が複雑すぎる・・・とのエラー
が発生しているとのことですが、WHERE節で、右辺・左辺の値の
参照設定部分や、条件のネストで、ACCESSは確か3回層までは
許されていたと思いますが、それ以上の条件ネストを行ってし
まっているのでしょうか?
実際のプログラムや、SQL文を掲載して頂かないとなんとも
コメントのしようがありませんが・・・
以上。
岡田殿、ありがとうございます。
本当に初心者なため、理解不能の部分もあります。
とりあえず、処理については条件式とループを組み合わせる方法もあり
解決できそうです。
以下は、今回エラーとなった現実のソースです。
DAOまでは考えてなかた為うまくいかないのでしょう。
public sub コマンド0_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
:
Set cn = CurrentProject.Connection
rs.CursorLocation=adUseClient
rs.Open "基テーブル",cn,adOpenkeyset,adLockOptimistic
rs.Sort="IDNO ASC,KEYRECNO ASC,SGNO ASC,INO ASC"
'4つのフィールドIDNOからINOを優先順位でソート
rs.MoveFirst
:
:
until rs.EOF
:
rs.Update "XXX",YYY
'あるエリアに認識用IDの書込み、固定データ書く他パターンも有る
rs.Movenext
:
loop
:
rs.Close:Set rs=Nothing
cn.Close:Set cn=Nothing
End Sub
ツイート | ![]() |