ADOとSQLで並べ替え(ソート)

解決


NOTHING  2003-04-09 09:52:03  No: 106617

すいません。先ほどのNOTHINGですが、もう1つ質問があります。

ADOとSQLを使って、IDの並べ替えをしたいのですが、ピクリとも

反応しません。何がいけないのでしょうか?どうか何方か教えて下さい。

本当に2度もすみません。^v^;

Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public dbFile, dbTable, strSQL As String
Const CONNECT_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source = "
Const SQL_STRING = "SELECT * FROM"
'-----------------------------------------------
Private Sub ID並替ボタン_Click()
 
   dbFile = CONNECT_STRING & App.Path & "\ID表.mdb" & ";" & _
    "Jet OLEDB:Database Password=???;" & "Mode=Read"
    cn.ConnectionString = dbFile
    cn.Open
    
    strSQL = "Select ID, 役職部門名, 名字 , パスワード " _
              & "  From IDTABLE " & " Order By ID Desc"

    Set rs = cn.Execute(strSQL)
    
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

End sub

・対象データベースファイル名:ID表.mdb
・テーブル名:IDTABLE
・フィールド名:ID(001などの3桁),役職部門名,名字,パスワード

*インデックスは作成したくないのですが、駄目でしょうか?


nanashi  2003-04-09 19:03:01  No: 106618

selectはデータを取得するために使うものなので これをDBにExecuteしても意味ないです。
もちろん、このSQL文で取得したRecordSetはちゃんとソートされてますが。

このmdb上のデータを並べ替えることにどれほどの意味があるのか分かりませんが、
普通IDというものはキーになってる必要があると思います。
そしてキーを設定しておけば普通はキー順にソートされると思いますが。


NOTHING  2003-04-10 00:59:13  No: 106619

nanashiさん、回答ありがとうございました。
キー設定でMDBファイルのソートは上手くいきました。
ただ実を申しますと、この後にこのデータをテーブル(MS FlexGrid)に展開
しているのですが、こちらの方は全く変わりません。
なぜ?でしょう?悪いところがあれば教えて下さい。m__m

Public cn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public dbFile, dbTable, strSQL As String
Const CONNECT_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source = "
Const SQL_STRING = "SELECT * FROM"
'-----------------------------------------------
Sub 更新()
   dbFile = CONNECT_STRING & App.Path & "\ID表.mdb" & ";" & _
    "Jet OLEDB:Database Password=???;"
    cn.ConnectionString = dbFile
    cn.Open

    dbTable = "SELECT * FROM " & "IDTABLE"
    rs.Open dbTable, dbFile, adOpenStatic, adLockReadOnly
    rsStr = rs.GetString(adClipString, rs.RecordCount)

        With IDウインドウ.IDグリッド
            .FixedCols = 0
            .Cols = rs.Fields.Count
            .Rows = rs.RecordCount + 1
'列名の表示
            For i = 0 To rs.Fields.Count - 1
                .TextMatrix(0, i) = rs.Fields(i).Name
                .ColAlignment(i) = 4
            Next            
'データの表示
            .col = 0
            .Row = 1
            .ColSel = .Cols - 1
            .RowSel = .Rows - 1
            .Clip = rsStr
'選択範囲の解除
            .RowSel = .Row
            .ColSel = .col
        End With

        rs.Close
        cn.Close
        Set rs = Nothing
        Set cn = Nothing
End Sub

フォーム名:IDウインドウ  ,  MSFlexGrid名:IDグリッド

(キー設定はしましたが、インデックスはなしのままです)


nanashi  2003-04-10 01:30:48  No: 106620

うーん、よく分かりませんが(^^;
とりあえずRecordSet取得時に order by を使ってみては?


NOTHING  2003-04-10 08:21:56  No: 106621

ほっ、できました。(*^u^*)

さすが、nanashiさん。アドバイスのお陰で下記のように「Order By」

の↓に書き込んだらできました。

    strSQL = "Select ID, 役職部門名, 名字 , パスワード " _
    & "  From IDTABLE " & " Order By ID Desc"

    Set rs = cn.Execute(strSQL)
    
N = 1

With rs
    .MoveFirst
    
Do While Not .EOF

With IDウインドウ.IDグリッド
        .TextMatrix(N, 0) = rs![ID]
        .TextMatrix(N, 1) = rs![役職部門名]
        .TextMatrix(N, 2) = rs![名字]
        .TextMatrix(N, 3) = rs![パスワード]
End With

N = N + 1
    .MoveNext
Loop

End With

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

'-----------------------------

結局、キー設定と更新の書き方がマズカッタみたいです。

nanashiさん、今後ともよろしくお願いします。m_ _m

ありがとうございました。


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

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






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