アクセスでクエリーを実行すると、上記の警告が発生しクエリーがとまってしまいます。
tmpファイルのことかな?と考え、ディスクのクリーンアップは行いましたが、状況はかわりません。
もともと正常に作動するアクセスのファイルをコピーしまして、そのなかのクエリーのひとつを少々変更して実行しているのですが、コピーをしなおしたりしても、上記の警告が必ず発生します。(コピー元やその他のファイルは正常に作動します)
原因がわからず困っております。宜しくお願い申し上げます。
当方W98 アクセス95、です。

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

A 回答 (8件)

じゃあそろそろ最後にしようかな。



基本的な話をしましょう。
検索条件になっている項目についてはインデックス(索引)があるかないかによって検索する件数が異なってきます。

5万件あるデータに関して現在のような検索をすると5万件全て検索します。

ですからインデックスを作成して等しいか(=)という判断条件にすることによって検索する件数を最小限にすることが出来ます。

但しインデックスをつけると追加や更新の速度が遅くなります。

またジョインは大きな表を作ることになりますのでその為メモリを大量に消費します。

このためメモリ消費を押さえる為、ジョインはできるだけ少なくするとか、事前に必要分だけワークテーブルに格納してからジョインするとかの対策をとります。
プログラムを作ってねと言う意味(VBAで良いですよ)

またWindwows98ですよね。メモリは64Mか128M程度かなと予測しますが、これでは非常に危険ですね。そもそもwindows98系はメモリの使い方が下手なので大量データを扱うには向いていないのです。

だから件数とファイルサイズを聞いたのです。2回目の回答の参考URLはご覧になりました?いや実際壊れたら目も当てられない状況になりたくないならバックアップ&まともなDBMSにすることをお勧めします。

それはさて置き
追加件数が125000ですよね。ベースになるテーブルは47000件ですので増加されていますよね。

125000件×31項目×20バイト(平均項目のバイト数)とすると77.5MB程度の作業領域が必要になりますね。実際にはこれより多かったりしますがいいのですかこんなに毎月増えて?
また経験から実メモリの2倍から3倍のスワップファイルサイズになるような場合は非常に不安定な状況になります。

ここから質問&回答タイム
ykkw_2001>確信はないですが、クエリ式がこれだけ長くなると、SQLサーバーに渡すときとかヤバくないかな?なんてね
ところでyukiko5さんSQLServeなんてお使いなのですか?
そういった記述はないのでDBはAccess95だと思っているのですが...

yukiko5>軽くする(という表現があっているかはわかりませんが)
あってますよ。

yukiko5>なんだか全部ちからワザ
いや1回きりのものならそういうのもありなのですが毎月使うようなものでかつデータ量が増えるような場合はやっぱり力技だけでなく技がいりますね。

yukiko5>問題は解決しましたが、すっきりしません。
ykkw_2001>M$の製品はそういうのが多いですね。
ykkw_2001> 「ゲイツ病」と言うそうです。
いやはや全くその通りですね。頭が痛いですね。いつものことだから諦めています。これもMs製品との付き合い方一つです。

お暇ならこのサイトで過去質問をみるのもいいでしょう。

最後に
ykkw_2001>手元にAccess97 しかないので確認取れませんが、以前のAccessでクエリ実行後、MDBに残りカスが蓄積されていったことがあります。

トランザクションログ周りですかねこれは削除/更新をすると作業中の内容を覚えておき、何かあったときに戻せるようにする仕組みが働くのでこの関係かな。Access2000では閉じる時に最適化が出来るようになりましたね。

それではMSのサイトや各種参考書を片手にがんばってよいものを作ってください。
    • good
    • 0
この回答へのお礼

>基本的な話をしましょう。
ありがとうございました。とても参考になりました。

>2回目の回答の参考URLはご覧になりました?
はい。ちょっと怖くなりました。
バックアップはこまめにとっております。

>いいのですかこんなに毎月増えて?
この請求明細にかんしてだけは、
月ごとのファイルを別々にしておりますので、大丈夫です。
(じゃナゼ請求月を検索しているのか?
 ムダに思えますが、私の前任者の趣味のようでして、
 ほとんどそういう方式をとっているようです。
 慎重といえば慎重なのですが。。。)


>ところでyukiko5さんSQLServeなんてお使いなのですか?
>DBはAccess95だと思っているのですが...
使ってません。意味もわかってませんでした。
アクセスは95です。
ちなみにVBAも未開の地です。今後開拓したいです。

>>軽くする(という表現があっているかはわかりませんが)
>あってますよ。
ありがとうございます。

>やっぱり力技だけでなく技がいりますね。
今回、皆様の指摘により痛感しました。
軽くする工夫から始めたいと思います。

>サイトや各種参考書を片手にがんばってよいものを作ってください。
長々とお付き合い頂きまして、本当にありがとうございました。

お礼日時:2001/12/14 10:58

あ、それから


入金済みのレコードを引き落とす(削除する)とか、請求月ごとに別テーブルにするとか
根本的な流れの対策もお忘れなく。
    • good
    • 0
この回答へのお礼

はい、わかりました。
ありがとうございました。

お礼日時:2001/12/14 11:09

おこんばんわ、ykkw_2001です。


#でも、yukiko5さんは、朝か・・・

>ykkw_2001さんのご意見も
 と言われるほどのものはないです。

>全部ちからワザで、えいやー!
で、できてしまうのが、Accessのいいとこで、悪いとこでもありますね。

>47000件です。
>最終的に125000件

 ぐえ。

 そらあんさん、「えいやー!」って、やり過ぎでっせ。

>ほかにもコレ級のファイルがちらほらありまして、、、
 Win98で!!
 おめでとう。レコード件数では、私の知る限り最高記録達成です。
勇者の称号と栄光を授けます。

んで。

要は、yanmaaさんのおっしゃるような対策ですな。

とりあえずローテクな私としては、
>事前に必要分だけワークテーブルに格納してから
てのが、おすすめです。

指針としては、
いっぱいJOINされている中心的なテーブルから、該当する請求月のレコードだけのテーブルを一時的に作成する。必要なフィールドだけね。
そのテーブルに各マスタから、何段階かに分けて、必要なフィールドをつけてゆく。
最後に請求明細に追加。かな。
できれば、別の一時的なMDBファイル上でやりたいです。

#SQL全部見てませんけど
相当遅くなると思いますが、「落ちる」よりはいいでしょう。

あとは、
>バックアップ
 ぜぇーったい、やりましょうね。
#やってなかったら、「勇者」から「挑戦者」に格上げします。

>まともなDBMSにする
 Oracleあたりでも、大丈夫なのかなぁ。

yanmaaさん江
>トランザクションログ周りですかね
 嗚呼、そーだったんかぁ。

>Access2000では閉じる時に最適化が出来るようになりましたね。
 おお、こいつぁいいことを教えてもらった。
ありがとうございます。

#回答欄にお礼を書いたんは初めてですわ。

でわ、健闘を祈ります。
    • good
    • 0
この回答へのお礼

>おこんばんわ、ykkw_2001です。
おはようございます。おっはー。

>そらあんさん、「えいやー!」って、やり過ぎでっせ。
自分の無謀さに初めて気が付きました。
皆さんのご指導を元に、今後はちゃんと工夫します。反省。。。

>バックアップ
#やってなかったら、「勇者」から「挑戦者」に格上げします。
なんかちょっと「おしかったな~」思っている自分にパンチ!
社内データですから挑戦しちゃいけないですよね。
もちろん、無謀な挑戦者なんて、いけないですよね。

>でわ、健闘を祈ります。
本当に長々とお付き合いいただきまして、ありがとうございました。

お礼日時:2001/12/14 11:08

これは大抵テンポラリファイルが大きくなりすぎた為でしょう。

ですからNo2は取り合えず気にしなくて結構です。

SQL文を見ると追加クエリのようですね。
「請求明細(西日本)」テーブルから各種マスタテーブルに各種情報を付加するクエリですね。
この結果を請求書明細データに追加しているようですね。

ここで問題になってくるのは「請求明細(西日本)」のテーブルに登録されている件数です。数件や1万件程度なら問題ないですが件数が多くなるとトランザクションログといわれるファイルが膨大になり処理時間も遅くなります。

またMDBのサイズが100MBという事はかなり大きなDBだと思います。参考URLも参考にして下さい。

最後にクエリのWHERE (((Left([請求日],6))=[【請求月】])) は条件ですが、Left関数を使っておりますので該当テーブルを全件検索しています
これもテンポラリファイルを増大させる要因です。
元のテーブルに請求年月というフィールドを追加し、インデックスをつけ(重複あり)このフィールドで条件にしましょう。
該当テーブルにデータ登録時は請求日と請求年月に同時に書き込み検索時は請求年月を検索する。

請求年月は請求日の左6桁とします。

旧のデータは更新クエリで請求年月=LEFT(請求日,6)で更新しておきましょう。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=146304
    • good
    • 0
この回答へのお礼

>SQL文を見ると
はい。そうです。

>「請求明細(西日本)」のテーブルに登録されている件数
47000件です。
追加される「請求明細データ」は最終的に125000件になります。
処理時間もPCが新しくなってからは30秒くらいで終わるので、
ファイルの大きさなどはまったく気にしておりませんでした。
ほかにもコレ級のファイルがちらほらありまして、、、
ちょっと件数をお伝えするのが恥ずかしかったです。

>WHERE (((Left([請求日],6))=[【請求月】])) は条件ですが
軽くする(という表現があっているかはわかりませんが)
工夫が必要なんですね。
こうして教えていただいて、自分の作成したクエリーを見直してみると、
なんだか全部ちからワザで、えいやー!とやっているようなのばかりみたいです。
今後の課題として精進していこうと思います。

No4に記入したように、ykkw_2001さんのご意見も聞いてみたく思います。
締め切りは絶対にしますので、少々お待ちいただければと思います。
(遅くても明日には締め切るようにいたします)

かなり面倒なことにもかかわらず、ご丁寧にご指導いただきまして、
本当にありがとうございました。

お礼日時:2001/12/13 16:53

>107506KBです。

完成するとその1.5倍くらいになります。

手元にAccess97 しかないので確認取れませんが、以前のAccessでクエリ実行後、MDBに残りカスが蓄積されていったことがあります。具体的には、データを増やしていないのに実行を重ねるとファイルサイズが大きくなっていきました。(最適化後で比較しました)
で、MDBが大きくなると、「クエリ式が適当でない」とか、「テーブルが不正だ」とかとんでもないイチャモンを付け出して、良く分からんまま、MDBを分割すると解決してしまいました。

サイズからして、分割を検討されたらいかがかなと思いました。

>>INSERT INTO 請求明細データ ・・・・

確信はないですが、クエリ式がこれだけ長くなると、SQLサーバーに渡すときとかヤバくないかな?なんてね。
私なら、アスタリスク(*)をうまく使うとか、何段階かのテーブル作成クエリに分割して途中経過のテンポラリテーブルを作るとか、あれこれやりたくなる状況です。

>問題は解決しましたが、すっきりしません。
M$の製品はそういうのが多いですね。
 「ゲイツ病」と言うそうです。

>上記の件だけで原因を特定するのは非常に難しいかと思いますが、
yanmaaさんのご意見を伺いたいとこですね。

ひとまず、解決をお慶び申し上げます。
    • good
    • 0
この回答へのお礼

>サイズからして、分割を検討されたらいかがかなと思いました。
完成したら200000KBになってしまいました。
多分もとのデータのテーブルが大きいだけだと思います。
クエリーやその他のテーブルは多くないのです。
分割するには少々頭をひねらなければ。。。。


>何段階かのテーブル作成クエリに分割して
確かに分割した方が、後々もわかりやすいですよね。
実はもうちょっとすっきりしたクエリーにしたく、
その前段階の変更をしてみたところ、この事態に陥りました。

>yanmaaさんのご意見を伺いたいとこですね。
yanmaaさんのご意見はいかがでしたでしょうか?
なにかykkw_2001さんからもあるかと思い、
締め切りしないでちょっと待ってみます。
よろしければ書込みお願い申し上げます。

>ひとまず、解決をお慶び申し上げます
ありがとうございました。

お礼日時:2001/12/13 16:40

No2の補足について


MS-DOSプロンプトを起動してSETと入力してEnterします。
そうすると環境変数の一覧が表示されるので
TEMP=なにがし
という行があります。
デフォルトなら
TEMP=C:\WINDOWS\TEMP
となっているかと思います。
これが環境変数の[TEMP]のことです。

ここまでが前置きで次に本題に入ります。

下記の質問に対して補足願います。
注意:作業はバックアップを取ってから行いましょう。

1.AccessのMDBファイルのサイズはどの位でしょうか?
2.MDBの最適化を行っても現象は変わらないでしょうか?
3.修正したと言うクエリーだけが該当メッセージを出すのでしょうか?
4.MDBの修復を行っても現象は変わらないでしょうか?
5.3で他のクエリー及び元のクエリーに戻した時は正常に動いたならば修正後のクエリーを提示してください。
テーブルの構成もお願いします。

まあこの程度かなまだあるような気もしますが

クエリーはデザインビューを開き[表示]-[SQLビュー]を選択して下さい。そこに表示されている内容をカット&ペーストして下さい。

この回答への補足

おはようございます。丁寧なご指導ありがとうございました。

ただ申し訳ないのですが、なんとか動くようになりました。
どうしてだかは不明です。

いろいろこちらでも試行錯誤を重ねているうちに、
「JOIN式が一致しない」というメッセージまで出てきてしまい、
やっとその意味がわかり訂正したところ、動きました。
テンポラリファイルじゃないの???
と、少々憤慨ですが、結果オーライとすることにしました。
お付き合い頂いておりました皆々様には大変申し訳ございません。

一応yanmaaさんの補足要求の結果をお知らせします。

>MS-DOSプロンプト

C:\WINDOWS>set
TMP=c:\windows\TEMP
TEMP=C:\windows\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
COMSPEC=C:\WINDOWS\COMMAND.COM
PATH=C:\WINDOWS;C:\WINDOWS;C:\WINDOWS\COMMAND;D:\SKYNEC
windir=C:\WINDOWS
BLASTER=A220 I5 D1 T4 P330

以上です。読取専用なのかどうかはわかりませんでした。

>1.AccessのMDBファイルのサイズはどの位でしょうか?
107506KBです。完成するとその1.5倍くらいになります。

2.MDBの最適化を行っても現象は変わらないでしょうか?
>変わりませんでした。

3.修正したと言うクエリーだけが該当メッセージを出すのでしょうか?
>データ元のみ違って、クエリーの型が同じものがあと2つあるのですが、
それらについては同じ結果でした。
違う型のクエリーは作動しました。

4.MDBの修復を行っても現象は変わらないでしょうか?
>変わりませんんでした。

5.3で他のクエリー及び元のクエリーに戻した時は正常に動いたならば修正後のクエリーを提示してください。テーブルの構成もお願いします

>INSERT INTO 請求明細データ ( 請求月, 部コード, 部名, 部門コード, 部門名, 営業担当者コード, 担当者名, 取引先コード, 得意先名, 現場コード, 現場名, 請求日, 行No., 日付, 品種コード, 品種名, 商品コード, 品名, 規格, 区分, 数量, 返却数, 日数, 単価, 金額, 摘要, 期間Pe, 期間T, 伝票No., 加算区分, 締日更新区分 )
SELECT DISTINCTROW Left([請求日],6) AS 請求月, 部マスタ.部コード, 部マスタ.部名, 得意先マスタ西日本.部門コード, 部マスタ.部門名, 得意先マスタ西日本.営業担当者コード, 担当者マスタ.担当者名, 請求明細(西日本).得意諠Rード, 得意先マスタ西日本.得意先名, 請求明細(西日本).現場コード, [Q:現場マスタ(西日本)].現場名, 請求明細(西日本).請求日, 請求明細(西日本).行No., 請求明細(西日本).日付, 商品マスタ.品種コード, 品種マスタ.品種名, 請求明細(西日本).商品コード, 商品マスタ.品名, 商品マスタ.規格, 請求明細(西日本).取引区分, 請求明細(西日本).数量, 請求明細(西日本).返却数, 請求明細(西日本).日数, 請求明細(西日本).単価, 請求明細(西日本).金額, 請求明細(西日本).摘要, 請求明細(西日本).期間FROM, 請求明細(西日本).期間TO, 請求明細(西日本).伝票No., 請求明細(西日本).加算区分, 請求明細(西日本).締日更新区分
FROM (((請求明細(西日本) LEFT JOIN 商品マスタ ON 請求明細(西日本).商品コード = 商品マスタ.商品コード) LEFT JOIN 品種マスタ ON 商品マスタ.品種コーh = 品種マスタ.品種コード) LEFT JOIN ((得意先マスタ西日本 LEFT JOIN 担当者マスタ ON 得意先マスタ西日本.営業担当者コード = 担当者マスタ.担当者コード) LEFT JOIN 部マスタ ON 得意先マスタ西日本.部門コード = 部マスタ.部門コード) ON 請求明細(西日本).得意先コード = 得意先マスタ西日本.取引先コード) LEFT JOIN [Q:現場マスタ(西日本)] ON (請求明細(西日本).現場コード = [Q:現場マスタ(西日本)].現場コード) AND (請求明細(西日本).得意先コード = [Q:現場マスタ(西日本)].得意先コード)
WHERE (((Left([請求日],6))=[【請求月z]))
ORDER BY 得意先マスタ西日本.部門コード, 得意先マスタ西日本.営業担当者コード, 請求明細(西日本).得意先コード, 請求明細(西日本).現場コード, 請求明細(西日本).行No.;

これでよろしいでしょうか?

問題は解決しましたが、すっきりしません。
上記の件だけで原因を特定するのは非常に難しいかと思いますが、
よろしければ何がしかのご指導をいただければ幸いです。
特にご連絡がないようでしたら、明日には〆切らさせていただきます。
ありがとうございました。

補足日時:2001/12/13 10:23
    • good
    • 0

>もともと正常に作動するアクセスのファイルをコピーしまして


コピーによって、正常に動作していた環境と変ってませんか?


>環境変数 TEMP で指定されているフォルダがあるドライブに、空き容量がありません。
>そのドライブのファイルを削除するか、環境変数 TEMP で別のドライブを指定します。
>環境変数 TEMP で指定されているドライブまたはフォルダが無効または読み取り専用になっています。
>環境変数 TEMP で有効なドライブを指定するか、現在指定されているドライブまたはフォルダの読み取り専用の制限を解除します。

だそうですが、

この回答への補足

>>もともと正常に作動するアクセスのファイルをコピーしまして
>コピーによって、正常に動作していた環境と変ってませんか?
単純なコピーのため、環境は変わっていないと思われます。

その下の長文に関しては、ほとんど意味がわかりませんでした。
Cドライブには空容量はあるようです。
「環境変数TEMP」がわかりませんでした。
C:\WINDOWS\TEMP は読み取り専用にはなっていないようです。

できましたらもうすこし詳しく教えていただければ幸いです。
宜しくお願い申し上げます。

補足日時:2001/12/12 15:55
    • good
    • 0

HDDの残容量ってどのくらい残ってますか?

この回答への補足

Cドライブの通常時の空容量は1Gくらいです。
問題のアクセスファイルを開くと残りが800Mくらい。
クエリーがとまってしまった時の残りが600Mくらいでした。
よろしくお願いします。

補足日時:2001/12/12 15:37
    • good
    • 0

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

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

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

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

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

Qテンポラリファイルの空き容量

このカテゴリで合っているか解りませんが、

アクセスでクエリを作成中、

「テンポラリファイル用の空き容量が不足しています」

っとメッセージが出るのです。

スキャンディスクもかけていますし、

デフラグのマメにやっています。

この「テンポラリファイルの空き容量」を増やすには

どうしたらいいでしょうか???

ヨロシクお願いします。

Aベストアンサー

>> インデックスを貼ってありますか?
> どのようにするのでしょうか?特別何もしていないのですが・・・
ということは、インデックス無しでしょうか?
テーブルのデザインビューで、表示>インデックスで確認できます。
列名が「~コード」などだと自動作成してくれてます。
むやみに貼っても駄目ですが、ある程度は必要なんですよ。
「結合」に登場する列が網羅されていればいいんですけどね。
610万レコードで「インデックス無しの結合」だと厳しそうですね。

インデックスについては以下が参考になりそうです。
http://www.officepro.jp/access/table/index11.html


> 前作成した時はファイル容量約1.5GBで作成することが出来ました。
ディスクそのものの空き容量があるなら、バックアップファイルを作成の上で、「データベースツール>最適化」してみますか?
オートナンバー型の列があると、マズい場合がありますので注意してください。

または、別に新規MDBを作成しておいて、クエリをインポートしてしまうか。
1)MDBを新規作成。(当然からっぽ)
2)オブジェクト[テーブル]で右クリックし、「テーブルのインポート」
3)インポート先に、「問題のクエリ」を持つMDBを指定。
4)インポートするのは「問題のクエリ」だけど、画面下のオプションをクリック。
5)「クエリ」の囲みに「テーブルとしてインポート」があるのでチェック。
6)実行(OKだったか?)

で、クエリをテーブル化できます。

元MDBもバックアップして、インデックス確認のうえでやってみてください。
そのサイズがどのくらいになるのか、すごく知りたいです。
MDBの上限は2Gバイト。レコードサイズが330バイト位あったら、610万レコードで2Gバイトに近いはず。

>> インデックスを貼ってありますか?
> どのようにするのでしょうか?特別何もしていないのですが・・・
ということは、インデックス無しでしょうか?
テーブルのデザインビューで、表示>インデックスで確認できます。
列名が「~コード」などだと自動作成してくれてます。
むやみに貼っても駄目ですが、ある程度は必要なんですよ。
「結合」に登場する列が網羅されていればいいんですけどね。
610万レコードで「インデックス無しの結合」だと厳しそうですね。

インデックスについては以下が参考にな...続きを読む

QAccessでクエリを完了できません。と出ます。

Access2007を使用しています。
OS:Windows7(64bit)
CPU:Core i7 870@2.93GHz 3.07GHz
実装メモリ(RAM):8.00GB

少しデータ量はあるものの、あるクエリをテーブルにしようとすると下記のエラーが出ます。
「クエリを完了できません。クエリ結果のサイズがデータベースの最大サイズ(2GB)より大きいか、
クエリ結果を一時的に保存するディスクの空き容量が不足しています。」
と表示され、テーブルが作成できません。

少しデータを減らして実行されるとテーブルは作成でき、Accessの容量は96,372KBとなります。
この減らしたデータが残り2GB弱とは思えないので、処理中に一時保存する空き容量が不足
しているのかなと思いました。
どうすれば先へ進むことができるでしょうか?

よろしくお願いします。

Aベストアンサー

これかも知れないですね。
[ACC2003] Access テーブルに対する処理の実行中にエラー メッセージ "ディスクの空き領域またはメモリが不足しています" が表示される
http://support.microsoft.com/kb/286153/ja

Acc2010 でもレジストリの値は9500でした。
上記リンク中の方法で解決するのでは?と思いますが、
最悪の場合でもテーブル作成クエリ→追加クエリと小分けして行けば
よいのでは?

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QODBCの接続に失敗しました(3146)について

どうにもならなくて困ってしまいメールいたします。
現在、ウインドウズ98、アクセス2000という環境で作業をしています。このアクセスでは、日に1回、本社とのデータのやりとりを行っていますが、ある日から「ODBCの呼び出しに失敗しました エラーメッセージ3146」と出てしまうようになってしまいました。何が原因かもさっぱり分かりません。どんなことでもいいので助言お願いします。

Aベストアンサー

ODBCのエラーは、簡単には原因がわからない場合が
ほとんどです。

通常はコントロールパネルのODBCデータソースアドミニ
ストレータの「トレース」タブの中に、「トレースの開始」
というボタンがありますから、適当なファイル名を指定
してからこれを押します。

それからエラーがでる処理をAccessでやってみます。

するとODBCの呼び出し、通信の内容がログに吐かれます
からこれが解決の手がかりになると思います。専門家に
直してもらうにしてもこの情報は必要ですよ。

おそらく3146ならば、MDACがらみかと推測しますけど、
自信はありません。WindowsUpdateとかIEを6にしたとか
サービスパックとか・・考えられる原因はいっぱいあり
すぎて・・

Q空き容量が十分あるのにメモリ不足とエラーが出ます

Wordファイルを保存しようとすると「ディスクの空き容量またはメモリが不足しています」と出ます
しかしそのファイルの保存先であるHDDは空き容量が2.54GB残っております
メモリは2GBで、Wordファイルは拡張子がdocの863kBのファイルです
また、関係してるかどうかは分かりませんがCドライブは40.8GB残っています
これらのことより冒頭のエラーが出る理由がよく分かりません

メモリもHDDの残り容量も十分にあるのに冒頭のエラーメッセージが出る理由として
何が考えられるでしょうか

ご回答くださいますようよろしくお願いします

<参考>
Wordのバージョン:2007(ファイルの保存形式はdoc形式)
OS:XP Professional version2002 servicepack3
CPU:Core2Dup(2.4GHz)

Aベストアンサー

>メモリの4倍程度は空き容量が必要という話は初めて知りました。
4倍程度あると機能低下などせずに快適に使えるぎりぎりの所と解釈して欲しいかな........

あと、HDDに保存されているファイルサイズ(問題ファイル以外)など
使い方によって機能低下する容量は変わっていきます。



30%について(大きいファイルなどが保存されている場合など)
HDDは丸い円盤に書き込んでしるので内周と外周では書き込みや読み込み速度が違います。
それを踏まえて、読み込み延滞や書き込みの延滞の時差がOS的に不具合なく補完できるぎりぎりの所と解釈すると良いと思います。

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 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします

Qアクセスのデータ型。数値型についてお聞きしたいのですが・・・

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少数点以下の数値が扱える)
(6)十進型(-10^28-1~10^28-1の範囲。小数点以下の数値が扱える)

と6種類決められますが、それぞれの「選び方の違い」と「その理由」を
教えてください。

たとえば、(1)~(3)くらいなら分かります。
扱える数値の桁数が違うということですよね?で、(1)~(3)を選ぶ時と(4)~(6)を
選ぶときで大きな違いというと、「小数点以下の数値が扱えるかどうか」
ですよね?そういう認識であっているか・・・ということと、上記の(1)~(6)を
「選び分ける必要がある場合」というのを教えてください。

なぜ、このような6種類に分かれているのか、人に説明しないとなりません。

よろしくお願い致します。m(_ _)m

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少...続きを読む

Aベストアンサー

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数で少数を表す場合、必ずしも10進数の少数と一対一に対応するわけではありません。2進数を10進数に直すのはnビットめの数字(0,1)*2のn乗の和ですが、少数の場合は-n乗になります。つまり1/2+1/4+1/8っていうような感じになります。0.75だったら、1/2+1/4で表現できますが、0.3とかになると1/4+1/32+・・・という感じできっちり表現しきれないので、0.299・・・という近似値になります。

それで問題があるようでしたら、十進型を使えば?ってことだと思います。

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数...続きを読む

Q「○○○.ldb」のAccess レコード ロック情報←このファイルが消えません

windows-nt、officeはAccess2003です。

Access97から2003に変換したファイルを、なんら問題なく、半年使っていました。
メンテナンスは「shift+enter」の排他モードで開き、度々行っていました。

ですが突然いつものように、メンテをして閉じたのですが、「Access レコード ロック情報」のファイルが消えません。
ファイルを全て閉じても、このファイルのユーザーが自分になったままになっています。
レコードロック情報のファイルを消したいのですが、どうしたらよいでしょうか??

もぅ、ギブアップです・・・

説明がうまくなくて、申し訳ありませんが、どなかた解決して頂けたらと思います。
宜しくお願い致します!!

Aベストアンサー

ldbファイルは共有データベースでロックされているレコードとロックしているユーザーを特定するために使用されます。最後のユーザーがデータベースを終了するとldbファイルは自動的に削除されますがmdbに損傷などある場合は残ってしまうことがあります。ldbファイルにはデータベースを開いているユーザーの一覧が含まれている程度なのでldb ファイルが存在する場合は対応するmdbファイルを閉じてから削除します。
削除が出来ない場合はPCを再起動してください。再起動して残っている場合。削除できるはずです。


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

人気Q&Aランキング

おすすめ情報