アクセスでクエリーを実行すると、上記の警告が発生しクエリーがとまってしまいます。
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単位 μg/l と mg/m3 について

水中のクロロフィル濃度を示す単位でμg/l と mg/m3 の両方が使われていますが、
10μg/l と 10mg/m3 は同じ濃度と考えていいのでしょうか?
後者は気体中の濃度を示す単位のようですが...

どなたかお分かりの方、ご教授、よろしくお願い致します。

Aベストアンサー

同じ濃度です。

L(リットル)もm3(立方メートル)も体積を表す単位なので、
それが水でも空気(気体)でも使えます。


10μg/L=10×10^(-6)g/1×10^(-3)m3=1×10^(-2)g/m3

10mg/m3=10×10^(-3)g/m3=1×10^(-2)g/m3

Qアクセス・クエリーのビルドについて

《クエリー》 ビルドの式構築について
論理判断により式が違う場合、式の構築は可能でしょうか?

 もし A=12 
    B=B+1
 でなければ
    B=13

 こんな場合のビルドはどうしたらよいのか?

Aベストアンサー

もしA=12ならばB=B+1
でなければB=13として記述します。

IIF関数を使用します。
ExcelのIF関数と使い方は全く同じです。
IIFのヘルプも確認されるといいかと思います。

IIF(A=12,B=B+1,B=13)となります。

おそらくAやBはフィールド名を入れたいのでは
ないかと思いますが、
フィールドBに計算結果を入れたい場合は、
"B="は書かなくても大丈夫だったと思います。

的を外していたらごめんなさい。

Q2000lは何m3?

2000lは2m3ですか?

Aベストアンサー

はい。

厳密には、気圧や温度により水の体積は変わりますが、、、
一般的な良識では、2立方メートルです。

Qアクセスの削除クエリーについて

アクセス2000の削除クエリーを実行すると、「削除できません」の表示がでます。テーブルを2つ(AとB)追加して、顧客CDでリレーションを組みます。テーブルAからはアスタリスクマークをドラッグしてますので、FROMがでます。テーブルBの顧客CDをドラッグするとWHEREがでます。つまり、テーブルBにある顧客CDを全部テーブルAから削除したいのですが、データウィンドウは表示されますが、削除を実行すると、「削除できません」の表示がでます。アクセス2.0では可能だったのですが、アクセス2000ではなぜできないのでしょうか??

Aベストアンサー

テーブルBの顧客CDに主キーを設定します。
(テーブルBのデザインで顧客CDで主キーのボタンを押します。)
テーブルAの顧客CDにもし主キーが設定されていたら解除します。
クエリーのデザインでテーブルAとテーブルBを追加して、顧客CDで結合します。
テーブルAのアスタリスクを、下のフィールドにドラッグします。(FROMがでます)
クエリーの種類を「削除」に変更します。
(テーブルBはドラッグしなくていいです)
クエリーを実行すると、テーブルBと結合しているテーブルAのレコードだけ削除されます。

理由は、Access2000では結合したテーブルではどちらかに主キーが設定されていなければなりません。
しかも、主キーを設定されているテーブルを削除することができません。削除できるのは主キーがないほうです。
したがって、削除したいテーブルAに主キーを設定せず、逆にテーブルAと結合するテーブルBに主キーを設定して、削除を実行すれば、できます。
このとき、テーブルBはフィールドに追加しなくてもいいです。結合されているレコードだけ削除されますので。

テーブルBの顧客CDに主キーを設定します。
(テーブルBのデザインで顧客CDで主キーのボタンを押します。)
テーブルAの顧客CDにもし主キーが設定されていたら解除します。
クエリーのデザインでテーブルAとテーブルBを追加して、顧客CDで結合します。
テーブルAのアスタリスクを、下のフィールドにドラッグします。(FROMがでます)
クエリーの種類を「削除」に変更します。
(テーブルBはドラッグしなくていいです)
クエリーを実行すると、テーブルBと結合しているテーブルAのレコードだけ削除されます。...続きを読む

Qmg/lからμg/m3に換算できません

初めて質問させてもらいます。

空気中の硫酸イオンをサンプリングし、イオンクロマトで測定した結果(mg/l)を
μg/m3に換算したいのですが、上手く換算できません。

吸引量は100リットルなのですが、どう計算すれば良いでしょうか?

どなたかお力をお貸しください。
よろしくお願いします。

Aベストアンサー

(1) 空気100リットルに含まれる硫酸イオンを捕集する。
(2) 捕集した硫酸イオンを水に溶かして V リットルの試験液を調製する。
(3) 試験液をイオンクロマトで分析して、試験液の硫酸イオン濃度を求める。←いまここ
(4) 試験液の硫酸イオン濃度から、捕集された硫酸イオンの質量を計算する。
(5) 捕集された硫酸イオンの質量から、空気1000リットルに含まれる硫酸イオンの質量を計算する。

それぞれの単位の定義を知っているかどうかだけでは、だめです。
捕集した硫酸イオンを何リットルの水に溶かしたかが、必要です。

Qアクセスのクエリーのことで教えてください

 テーブル1とテーブル2があってクエリーでリレーションシップを組むときに
 結合プロパティを「テーブル1の全レコードと、テーブル2の同じ結合フィールドのレコードだけを含める。」にして表を作ろうとしたのですが、テーブル2に
レコードが無い場合、テーブル1,2を使って作ったクエリー1で表を作り、
ビルドでクエリー1の項目を貼り付けて、計算させると、テーブル2にレコードが無いと空欄になっているためか、計算がうまく行きません。この問題を解決するにはどのような方法をとればよいですか?
ほんとにこまったちゃんになっているので教えてください。 

Aベストアンサー

空欄と書かれてますが Null のことですね。
Null をたぶん 0 として計算すると思いますんで、計算式でテーブル2の
フィールド名を使っているところを、
Nz(テーブル2のフィールド名, 0)
とすれば大丈夫だと思います。

Q1molは何m3

0度、1アトムの標準状態における気体の体積は22.4L=1molと思うのですが、1mol=22.4Nm3の意味が分かりません。1m3って1000Lだから1mol=0.0224Nm3?変な質問ですみません。なぜ1mol=22.4Nm3なのでしょうか?

Aベストアンサー

誤植か(誰かの)読み間違いでしょうね.
1 kmol = 22.4 Nm3 です.

ちなみに Nm3 はノーマル立米というのでしょうか,標準状態換算の体積の特定業界用語的単位です.m3(STP) とかと同じです.

QAccessVBA  SetFocusとGoToControlが正常に作動しない

重複番号をチェックする機能を作っています。
重複番号が入力されると、エラーメッセージが出て、
OKを押すと番号を入れるテキストボックスにカーソルが移動し、空白にする、
という機能をつけましたが、
何度試してもカーソルが、隣のテキストボックスに移動してしまいます。
(エラーメッセージが出て、空白にするという動作は正常に行われます)

SetFocusとGoToControlで試したのですが、
どちらも駄目でした。
原因が分かりません。
どなたかお分かりになりましたら、教えてください。
コードは下記のとおりです。

Private Sub AMコード_AfterUpdate()
If DCount("AMコード", "Q_AM担当者登録チェック") >= 1 Then
MsgBox ("すでに存在する番号です。別の番号を振りなおしてください。"), vbCritical, "番号重複"
AMコード.SetFocus
AMコード = ""
End If
End Sub

Aベストアンサー

入力チェックはAfterUpdateではなくBeforeUpdateで行います。

Private Sub AMコード_BeforeUpdate(Cancel As Integer)
  If DCount("AMコード", "AM担当者テーブル", "AMコード = '" & AMコード & "'") > 0 Then
    MsgBox ("すでに存在する番号です。別の番号を振りなおしてください。"), vbCritical, "番号重複"
    Cancel = True
    Me.Undo
  End If
End Sub

上記の例ではクエリで判定せず、直接、元のテーブルに対して直接判定を行っています。

なお、BeforeUpdateの中でヘタにSetFocusを使ったり値の代入を行うと、不測のエラーが出たり無限ループに陥るので、やってはいけません。

また、既存レコードを書き替えようとした場合「Cancel = True」で変更を無効にして元の値に戻しても、レコードは「変更あり」の状態なので、重複エラーの表示後にフォーカスの移動を行おうとすると、自分自身が「重複」として判定されて何も出来なくなってしまうので「Me.Undo」で、レコードの変更を取り消す必要があります。

入力チェックはAfterUpdateではなくBeforeUpdateで行います。

Private Sub AMコード_BeforeUpdate(Cancel As Integer)
  If DCount("AMコード", "AM担当者テーブル", "AMコード = '" & AMコード & "'") > 0 Then
    MsgBox ("すでに存在する番号です。別の番号を振りなおしてください。"), vbCritical, "番号重複"
    Cancel = True
    Me.Undo
  End If
End Sub

上記の例ではクエリで判定せず、直接、元のテーブルに対して直接判定を行っています。

なお、BeforeUpdateの中で...続きを読む

QM3さくらで使用可能なMicro SDHCカードについて

所有するアニメのDVDを変換し、ニンテンドーDS用ソフトのM3さくらを使い、電車通勤中に視聴するという用途で使っています。
M3さくらの記憶媒体は、現在sanDiskの8GBのmicro SDHCカードを使っているのですが、DVDボックスのアニメを入れると2~3本で容量が一杯になってしまいます。
小まめにカードを出し入れするのが面倒なので、そこで容量の大きい16GBのmicro SDHCカードの購入を考えています。
ただ、相性問題が心配なので、M3さくらを使っている方で、16GBのmicro SDHCカード使ってる方がいましたら、どこのメーカーのものなのか参考に教えていただけますでしょうか?
宜しくお願いします。

Aベストアンサー

最大で8GBとなっているので16GBは使えないのでは?
http://www.m3sakura.jp/
上の方の大容量micro SDHCの所を見てください。

QAccessで、コード実行中に、フォームのテキストボックスの値をデータソースとしたクエリーフィールドの値を取得したい

Accessにおいて、frmMENUというフォームを作成し、txtYearというテキストボックスを配置しました。"式1: [Forms]![frmMENU]![txtYear]"というフィールドを含むクエリーを作成しました。
フォームを起動し、txtYearに値を入れた後、そのクエリーを開くと、"式1"には正しく値が入っているのですが、コードの実行中(例えばボタンクリック処理の間など)にクエリを開くと何も入っていません。このとき、クエリーに対するSQL(select 式1 from クエリ1)を実行しようとすると「パラメータが少なすぎます。1を指定してください。」というエラーが発生してしまいます。コード実行中にクエリーから"式1"の値を取得することはできないのでしょうか?

Aベストアンサー

補足に対してアドバイスします。

>テキストボックスの値を一旦テーブルに書き込む処理を入れ、そのテーブルを参照するクエリーを作成して対処しようかと思い始めています。

テーブルに書きこまなくてもクエリの定義を直接変更することが出来ます。
CurrentDb.QueryDefs("クエリ名称").SQL プロパティーに直接SQLを設定してみてください。


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

人気Q&Aランキング

おすすめ情報