お忙しいところ恐れ入りますが
どなたかお教えください。
mdbで作成したdbにADO経由で接続しています。
カレントレコードを連結フォームに表示させています。
表示させる順番を変更したいのですが
ソート順が連結フォームに反映しません。
Private Sub Form_Load()
Dim mysql As String
Dim rs As New ADODB.Recordset
'データソースの文字列取得
dbname = GetDataSource()
'データベースへ接続&オープン
cn.ConnectionString = "provider = microsoft.jet.oledb.4.0;" _
& "Data Source =" & dbname
cn.Open
'表示させる順番を変更したいのでレコードセットをソートしてみる
myusql = "SELECT * From tblkaiin ORDER BY フラグ,通常番号 DESC"
'レコードセットをオープン (フォームに表示させる。)
rs.Open mysql, cn, adOpenKeyset, adLockOptimistic
(略)
レコードセットは並び替えできても
カレントレコードのカーソル位置も変更されるわけでは
ないのでしょうか?
このソースは、実際のソースをコピーしたものでしょうか?
だとすると、単にコーディングの誤りかも・・・
myusql = "SELECT * From tblkaiin ORDER BY フラグ,通常番号 DESC"
ここでSQL文を代入している変数は
myusql
となっていますが、実際に定義されているのは
mysql
ですので、mysqlには(私の想像ですが)書き換える前の
mysql = "SELECT * From tblkaiin"
が入ってるとか・・・
オープンしたときにカレントレコードは1レコード目になってるはずなので
並べ替えが正しくできていればちゃんと反映されるはずなんですけど。
minamiさん
ありがとうございます。
変数名ですが、記述ミスです。
実際のコーディングでは、mysqlで統一しています。
やはり、レコードセットの並び替えはできているのですが
カレントレコードのカーソル位置には反映していないようなのですが
本来は反映するものなのでしょうか?
カレントレコードの位置はオープンした直後、何もしなければ1レコード目になってるんですが。。。
ろうろうさんのソースをそのままコピーして処理してみました。
'レコードセットをオープン (フォームに表示させる。)
rs.Open mysql, cn, adOpenKeyset, adLockOptimistic
MsgBox rs.Fields("通常番号").Value ’←1レコード目の通常番号の内容を表示
ORDER BY句が無いときと、あるときで1レコード目の通常番号は変わったので、問題ないと思うのですが・・・
カレントレコードのカーソル位置が変わらないっていうのは、
並べ替えをしなかった場合の1レコード目が、並べ替え後1レコード目以外になっているのに、そのレコードがカレントになってるってことかしら?
(考えられないけど)
何か問題があるとすれば、フォームに表示させる処理ですかねえ。
rsオブジェクトの1レコード目をフォームに書き出すような処理をしてるんですよね?
ツイート | ![]() |