Access SQLを使ったソートがずれる
Access2003で以下のfunctionを組みました。
*************************************
Dim SQL As String
Dim strList As String
SQL = ""
strList = ""
'サブテーブルの削除
SQL = "DELETE * FROM SUB_T"
CurrentProject.Connection.Execute SQL
SQL = "INSERT INTO SUB_T SELECT Master_T.* FROM Master_T WHERE "
With Forms!SEARCH!
'検索条件がnullの場合
If IsNull(.CODE_SRH) Then
SQL = "INSERT INTO SUB_T SELECT Master_T.* FROM Master_T"
End If
'コードの条件
If .CODE_SRH <> "" Then
strList = "Master_T.CODE Like '" & .CODE_SRH & "%'"
End If
End With
SQL = SQL & strList & " ORDER BY (val(CODE))"
CurrentProject.Connection.Execute SQL
*************************************
Master_T テーブルの CODE は テキスト型
内容は以下のとおり
"001","あいうえお",....
"003","さしすせそ",....
"002","かきくけこ",....
"013","GHI",....
"011","ABC",....
検索条件Nullの場合SUB_T テーブルには
"001","あいうえお",....
"002","かきくけこ",....
"003","さしすせそ",....
"011","ABC",....
"013","GHI",....
とインサートされるはずですが、何回か実行すると・・・・
"003","さしすせそ",....
"011","ABC",....
"013","GHI",....
"001","あいうえお",....
"002","かきくけこ",....
こんなだったり
"011","ABC",....
"013","GHI",....
"001","あいうえお",....
"002","かきくけこ",....
"003","さしすせそ",....
このような感じに並びます。
試しに、明示的に"ORDER BY (val(CODE)) ASC"にしても
また降順ではどうかと思い、"ORDER BY (val(CODE)) DESC"にしても
同じ現象が出ます。
コードの条件を入れても同様な現象が出ます。
何が原因なのかさっぱり分かりません。
Accessのどこかを確認すべきか、VBAを見直すべきなのか
ご教授いただきたいです。
お礼
ありがとうございました。 該当するレコードは、複数件数があるので、無理ということですね。 25万件は・・・LOOPの中で検索する件数(T_売上明細)です。 とりあえず、”=”で1件ができるテーブルを全てOPENTABLEとし、SEEKで行った結果、処理がかなり早くなりましたので、それで対応しました。 ありがとうございました。 本来、行いたかった事は、 (1)T_請求該当テーブルから、 画面上で指定した「締切日」と一致するデータを W_請求該当テーブルにセット。 (2)W_請求該当のテーブルをLOOPさせ、 【今回のご質問の内容】 T_請求残高から「得CODE」が共通し、 「請求対象日2」が画面テキストボックスの「締切日」よりも以前 のレコードで一番直近のレコードを抽出しつつ、 (3) さらに(2)をLOOPして、25万件あるT_売上テーブルの「得code」と 「納品日」がT_請求残高の「請求対象日2」以後「締切日」までのデータを抽出しつつ、 (4) T_売上明細テーブルの「管理NO」とT_売上テーブルの「管理NO」との一致するデータの中から 「商品名」で”材料”という商品名文字がつくものは除外しT_売上データをW_請求書売上にセットする ということをしています。 ※この前後に更に処理がありますが・・・ この処理の中で、【T_】とつくテーブルは、全てリンク。【W_】がワークテーブルとして使っています。 1.請求書を発行する際に、まず、月末締めの得意先を出す。 2.得意先の過去の請求履歴から前回の請求残高と最終請求済み日を確認する。 3.納品書の納品日が今回の請求する期間の対象の売上データを出す。 4.その詳細データの品名から、「材料」は別請求書を発行するため、その額は今回の請求の対象外としたい。 という内容です。 その後の処理は、請求対象期間にその得意先が入金されていれば、その入金額の合計をセットし、前回請求、入金額、繰越額、今回請求額 を親レポートに、商品名等の詳細を子レポートとして、請求書に印刷します。 おおよそ、得意先件数が160件、子となる詳細データが800件程です。