ACCESS2000
ACCESS クエリーでソートの不具合
Xテーブル
品コード 明細番号
昇順   昇順

作成したテーブルを見ると一部
111 01
111 02
111 03
222 01
333 01
111 04 <=分かれて表示されている。

データは3000件程あるのですが、アクセスの不具合?
データはグループでは集計されるのでヌルが入っていたりはしません。
体験のある方いらしゃいますか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

ご質問の内容が不明瞭ですので、ある仮定に基づいて回答してみます。



テーブル [商品マスタ] から select into でワークテーブル [workDB] を
作成した。テーブル [workDB] を直接開くと、select into に指定した
order by の順にレコードが表示されないが、なぜか?

上記の仮定が正しくなければ、以下の回答はスルーしてください。

上記の仮定が正しければ、それは不具合ではありません。
Access(に限らず多くの RDB)ではごくふつうの現象です。
データの入力順と格納順は必ずしも一致しません。それが利点なのです。
入力した順(この場合は select into に指定した order by の順)と関係
なく、データは空きブロックに配置されていきます。だからこそ、Access は
ディスクを効率的に使用できるのです(Access にはありませんが、サーバ
製品によっては何かの理由で物理ディスク上に順番に格納したい場合のため
にそれ用のオプションが用意されている場合があります。逆に言うと、
ふつうは特別にオプション指定でもしない限り、入力順に物理格納されたり
はしません。効率が悪いからです)。
ソートが重要なら、(入力時ではなく)参照時にクエリで order by 指定
しましょう。テーブルの格納順をあてにすべきではありませんし、テーブル
を直接開いて順番がどうなっているのか気にすべきでもありません(もし
それが気になるなら、RDB ではなく Excel のような表計算ソフトを使った
ほうが、たぶん精神衛生上は よいでしょう)。

ちなみに Access の場合は、主キーが設定されているテーブルであれば、
一応 主キーの順番に表示されることにはなっています。select into で
作成されるテーブルに主キーはありませんから、その場合の表示順は不定
です。
もし主キーがないのに入力順(追加順)にレコードが表示されたとしたら、
運よく連続する空き領域を確保できた場合、ということになります。この
ラッキー(?)は、入力(追加)するデータが多ければ多いほど、そして
ディスクの断片化が進んでいれば進んでいるほど、起こりにくくなります。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。出力側のレコードがソート順にならばないのですね。
今後、注意します。

お礼日時:2009/06/03 13:58

テーブルを単にデータシートビューで開いてもコードの昇順に表示


されるとは限りません。「テーブルを作る時のSELECT INTOでORDER BY
したじゃないか」というのは人間の都合で、ORDER BY されたのは元に
なるテーブルが一時的に並べ替えられただけです。
データシートビューにはテーブル毎に独自の書式(列幅、並び順)が
記録されます。掲題の例では品コード、明細番号の2列を選択し、
メニューバーから「レコード→並べ替え→昇順」と設定します。
ビューを閉じる時には変更を記録するかどうか問合せがあります。
但し、SELECT INTO を再実行すると、テーブルは削除→作成となる
ため、同じテーブル名でも表示形式はリセットされます。
希望の並び順になるようなクエリを作成し、そちらを開く方が話が
簡単です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
出力ファイルも並び変えるということですね。

お礼日時:2009/06/03 14:04

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



>SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB
>FROM 商品マスタ
>ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号;
>データの型はテキストです。

この内容を拝見する限り、問題の状態になる要素はないと思いますので
解決策が解りかねます。
テキスト型の場合、半角全角が混ざっていても ACCESSの場合
逆に同一視されて識別できない事が よく問題なります。
お書きになったSQLからは、別れて並んでしまう点が不明です。
お力になれず、申し訳ありません。
    • good
    • 0

数字が全角文字で入力されているということはありませんか?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
データを111を選択して表示すると4件でてくるので同じデータです。

お礼日時:2009/05/28 08:40

そのクエリーを SQLビューで表示したテキストで


補足してください。
プラス、品コードと明細番号のデータの型を。

この回答への補足

SELECT 商品マスタ.品コード, 商品マスタ.明細番号 INTO workDB
FROM 商品マスタ
ORDER BY 商品マスタ.品コード, 商品マスタ.明細番号;

データの型はテキストです。
遅くなりました。
ご回答ありがとうございます。

補足日時:2009/05/29 11:42
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess 昇順・降順で並び替えできない

はじめまして。お伺いします。

Accessのデータシートビューです。特定の列だけ、昇順・降順の並び替えが出来なくなりました。

列を選択し、右クリックをすると、他の列では昇順・降順で並び替えのところが出る(アクティブになる)のですが、特定の一列だけ、右クリックメニューの並び替えのところがアクティブになりません。
上のメニュー内からレコードを選択しても同じです。

2,3日前に作業をしたときには出来ていて、今日開いたら出来なくなっていました。
設定のどの部分を見ればよいのか、ご示唆いただければ幸いです。

ご一読ありがとうございました。
それでは

Aベストアンサー

これだけの情報で原因を特定するのは辛いです(^^;

1.この2,3日でテーブルのフィールド属性を変更していないか?
   たとえばフィールド属性がメモ型に変わると並び変わらなくなります

2.最適化/修復はやってみたか?

取り敢えず思いつくのはこの程度です。

QAccess 2007 で、「並べ替え」がうまくいきません。

Access 2007 で、「並べ替え」がうまくいきません。
お世話になります。
職場のパソコンが新しくなり、Access 2002→2007にバージョン変更しました。
すると、「クエリ」での「並べ替え」がうまくいかなくなりました。

たとえば・・・
 
書物の種類番号 タイトル 発行年月日 

というデータの並べ替えで、優先順位は、(1)書物の種類番号(昇順) (2)発行年月日(降順)としたいのですが、
(2)の発行年月日がぐちゃぐちゃになります。
2002の時はうまくいっていたのですが・・・。

なお、私はこのシステム作成者でなく、ただの入力者で、アクセス初心者です。
できましたら、初心者にもわかりやすく教えていただければ幸いです。

Aベストアンサー

「Access 2002→2007」はどのようにコピーされましたか

もしAccess2007でAccess2002形式のファイルを開かれたのであれば

Access2007で空のファイルを作成し、これにAccess2002形式の
ファイルをインポートしてみてください

下記手順で[ ]内はクリック「 」内はキーボード入力です。

インポート手順
1.空のAccess2007ファイルの作成
[Access2007立ち上げ]―[空のデータベース新規作成]―「ファイル名」―[作成]

2.Access2002形式のファイルをインポート
[外部データ]―[Access]―[参照]―[ファイル名(事前にフォルダを調べておく)]
―[開く]―[ok]―[ok]―[テーブル]―[すべて選択]―[クエリ]―[すべて選択]
―[フォーム]―[すべて選択]―[レポート]―[すべて選択]―[テーブル]―[すべて選択]
―[マクロ]―[すべて選択]―[モジュール]―[すべて選択]―[OK]―[閉じる]

これでコピー完了です。一旦ファイルを閉じて、再度開いて下さい。

QACCESSのテーブルで、昇順並び替え後、連番フィールドを作成したい

表題の通りなのですが、
今現在ACCESS2000を使ってデータベースを作成しています。
その際、
----------------------
連番  項目
00001  りんご
00002  ばなな
00003  みかん
00004  もも
----------------------
というようなテーブルで[項目]を昇順で並び替え後、
連番が自動的に振られるようなクエリ(無理そうならその他の方法でも)を作成したいと思っています。

今現在はクエリで以下のように昇順で並び替えられたものを、
----------------------
連番  項目
00002  ばなな
00003  みかん
00004  もも
00001  りんご
----------------------
一旦エクセルにエクスポートして、オートフィルで[連番]を書き換え後、再度ACCESSにインポートし以下のような完成形にもっていっています。
----------------------
連番  項目
00001  ばなな
00002  みかん
00003  もも
00004  りんご
----------------------

しかし、頻繁に[項目]書き換え・追加のあるデータベースなので、結構な時間を費やしてしまい、とても効率が良いとはいえない状態です。

どうにかACCESS内で完結できる方法はないものでしょうか?

ご享受の程よろしくお願いいたします。

表題の通りなのですが、
今現在ACCESS2000を使ってデータベースを作成しています。
その際、
----------------------
連番  項目
00001  りんご
00002  ばなな
00003  みかん
00004  もも
----------------------
というようなテーブルで[項目]を昇順で並び替え後、
連番が自動的に振られるようなクエリ(無理そうならその他の方法でも)を作成したいと思っています。

今現在はクエリで以下のように昇順で並び替えられたものを、
----------------------
連番  項目
00002  ばなな
...続きを読む

Aベストアンサー

連番は他のテーブルと関連付けられていないのですよね。
今一つ、連番の使い道がわからないのですが・・・

連番は数値型で、書式が 00000 になっているものと仮定します。
テーブル名が「Table_A」と仮定します。
また、項目に重複するものがないものとします。

クエリのSQLビューで以下を記述してみてください。

UPDATE Table_A SET 連番 = DCount("項目","Table_A","項目<='" & 項目 & "'");

そして、必要に応じてこの更新クエリを実行します。


連番がテキスト型なら、DCount 部分を Format を使って桁を揃えてみてください。

Qカレントレコードが無い事を判定させる方法

SQLを使ってmdb内のレコードセットを取得し、
無かったらエラーを返す、という処理を作成
する場合、カレントレコードが無い事を
判定するにはどうすれば良いでしょうか?
イメージは下記のような感じです。

レコードセット as DAO.Recordset

'レコードセット取得
 Set レコードセット = db.OpenRecordset(作成したSQL文)

'判定
If カレントレコード無 Then
MsgBox "エラーメッセージ"
Exit Sub
End If

Aベストアンサー

カレントレコード無は"レコードセット.RecordCount = 0"
で行けませんか?

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qエクセルのデータをアクセスへ自動インポート(エクスポート)したい。

いつも大変お世話になっております。m(_ _)m
質問させてください。

エクセルに存在するデータベースのデータを、アクセスにインポートしたいのですが、アクセス側の「取り込み」みたいなボタンを押せば、ある程度自動的にするような仕組みを作りたいです。
「ある程度」というのは、「ボタン1つですべて実行されるように」というところまで自動化されなくても大丈夫です。
参照先、インポート先のテーブル名などのマウス操作は入っても大丈夫です。

そのようなことができますでしょうか?

できるだけ具体的に教えていただけると助かります。
よろしくお願いします。

Aベストアンサー

こんにちは。

VBAで、DoCmdオブジェクトのTransferSpreadsheetメソッドでよいのではありませんか?

 DoCmd.TransferSpreadsheet acImport,
      [シートのタイプ],
      [テープル名],
      [ファイル名],
      [Excel側のフィールドを使うかどうか],
      [Excelの範囲]

実際のコード
 DoCmd.TransferSpreadsheet acImport, , "TestTable", "D:\Test.xls", True, "Sheet1!A1:D20"


"Sheet1!A1:D20"
これはなくてもよいです。

QAccessの画面更新を一時的に停止する方法。

こんにちは。
Accessの画面更新を一時的に停止する方法を捜しています。
ExcelのScreenUpdatingと同様な機能です。

VBAでの更新処理時に画面がチラチラと動くのを防止したいと思っています。
(Ver:Access2000)
ご存知の方宜しくお願い致します。

Aベストアンサー

Application.Echo False '画面の描画を止める

・・・処理を実行する・・・

Application.Echo True '画面の描画を行う

QACCESSでクエリで選択した行番号をつけたい

選択結果に1~順に番号をつけたいのですが、過去ログを見ると 番号: DCount("*","データ","[NO]<=" & [NO])とすればいいと書かれてありました。これはNOが昇順になっている場合にしか1~順になりません。
NOはユニークですが、他のフィールドで昇順にしたい場合はどうすればいいのですか?
例)
NO フリガナ
312 タナカ
322 イトウ
333 マツダ
・・・・
番号 フリガナ(昇順)
2 イトウ
1 タナカ
3 マツダ
となってしまうのです。
ACCESS2002

どうぞよろしくお願いします。

Aベストアンサー

 ん~多分、

番号: DCount("*","テーブル名","[フリガナ]&[NO]<='" & [フリガナ] & [NO] & "'")

でいけると思いますが、だめだったら、

番号: DCount("*","テーブル名","[フリガナ]<'" & [フリガナ] & "' OR ([フリガナ]='" & [フリガナ] & "' AND [NO] <= " & [NO] & ")")

かな?

QAccess VBAでクエリーのレコード件数を取得したいのですが

Access2003のVBAで次のような構文を用いてクエリーの該当レコード数を取得したいのですがうまく出来ません。
構文又は手法が間違っているのでしょうか。

Dim db As Database
Dim rs As Recordset
Dim cnt As Long

Set db = CurrentDb
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable)
cnt = rs.RecordCount

※OpenRecordsetの行で「実行時エラー'3219'無効な処理です」と出てしまいます。
又、”該当顧客リストクエリ”では特定の抽出条件を設定して、”顧客リストテーブル”の一部を抽出するようにしています。

Aベストアンサー

Set db = CurrentDb
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenTable)
cnt = 0
If Not rs.EOF Then
  rs.MoveLast
  cnt = rs.RecordCount
  rs.MoveFirst
End If

このようにしたほうが、良いですよ
DAOのレコードセットは展開したときには、正確なレコード件数を返しません
一旦、MoveLastメソッドで最終ポイントまで行けば正確な件数が得られます
(ただし、パフォーマンスが落ちますorz)

面倒でも、「select count(*) as RecordCount from "テーブル名"」で取得したほうがいいですよ

ちなみに、別件はこれで良いんじゃないですかね?
Set rs = db.OpenRecordset("該当顧客リストクエリ", dbOpenSnapShot)

QVBとアクセスでSQL文に変数を使いたいのですが

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報