- 締切済み
access2003でクエリが開かない
windows2000、access2002でデータベースを作成し、特に問題も無く使用していました。 このmdbをwindows2000、access2003のパソコンにコピーし使用しようとしたところ、いくつかのクエリが開けませんでした。開こうとすると固まります。デザインで開こうとしても固まります。コピー元のmdbからインポートしようとしても固まります。 一度accessを削除してインストールし直しましたが症状は変わりませんでした。 クエリに問題があるのでしょうか? それともパソコンに問題があるのでしょうか? よろしくお願いします。 以下は開けないクエリのひとつです。 SELECT T_Receive.ShopCode, T_Receive.ShopName, T_Receive.DeliveryDate, Sum(T1.CostUnitPrice*T_ReceiveDetail.ItemCount) AS CostPrice, Format$([DeliveryDate],"yyyy/mm") AS YM FROM (T_Receive INNER JOIN T_ReceiveDetail ON T_Receive.No=T_ReceiveDetail.No) INNER JOIN ItemLog AS T1 ON T_ReceiveDetail.ItemCode=T1.ItemCode WHERE (((T_ReceiveDetail.DeleteFlg)=False) AND ((T_Receive.DeliveryNo) Like "01*" Or (T_Receive.DeliveryNo) Like "02*" Or (T_Receive.DeliveryNo) Like "03*" Or (T_Receive.DeliveryNo) Like "04*" Or (T_Receive.DeliveryNo) Like "05*" Or (T_Receive.DeliveryNo)="101" Or (T_Receive.DeliveryNo) Like "06*") AND ((T_Receive.DeliveryPrintFlg)=True) AND ((T1.CostUnitPriceDate)<=[DeliveryDate]) AND ((Exists (SELECT 1 FROM ItemLog T2 WHERE T1.ItemCode = T2.ItemCode AND T2.CostUnitPriceDate<=[DeliveryDate] AND T1.EntryDate < T2.EntryDate ))=False)) OR (((T_ReceiveDetail.DeleteFlg)=False) AND ((T_Receive.DeliveryNo) Like "01*" Or (T_Receive.DeliveryNo) Like "02*" Or (T_Receive.DeliveryNo) Like "03*" Or (T_Receive.DeliveryNo) Like "04*" Or (T_Receive.DeliveryNo) Like "05*" Or (T_Receive.DeliveryNo)="101" Or (T_Receive.DeliveryNo) Like "06*") AND ((T_Receive.DeliveryPrintFlg)=False) AND ((T1.CostUnitPriceDate)<=[DeliveryDate]) AND ((Exists (SELECT 1 FROM ItemLog T2 WHERE T1.ItemCode = T2.ItemCode AND T2.CostUnitPriceDate<=[DeliveryDate] AND T1.EntryDate < T2.EntryDate ))=False) AND ((T_ReceiveDetail.EntryOperator)="000000")) OR (((T_ReceiveDetail.DeleteFlg)=False) AND ((T_Receive.DeliveryNo) Like "01*" Or (T_Receive.DeliveryNo) Like "02*" Or (T_Receive.DeliveryNo) Like "03*" Or (T_Receive.DeliveryNo) Like "04*" Or (T_Receive.DeliveryNo) Like "05*" Or (T_Receive.DeliveryNo)="101" Or (T_Receive.DeliveryNo) Like "06*") AND ((T_Receive.DeliveryPrintFlg)=False) AND ((T1.CostUnitPriceDate)<=[DeliveryDate]) AND ((Exists (SELECT 1 FROM ItemLog T2 WHERE T1.ItemCode = T2.ItemCode AND T2.CostUnitPriceDate<=[DeliveryDate] AND T1.EntryDate < T2.EntryDate ))=False) AND ((T_ReceiveDetail.ReviseOperator)="000000")) GROUP BY T_Receive.ShopCode, T_Receive.ShopName, T_Receive.DeliveryDate, Format$([DeliveryDate],"yyyy/mm") HAVING (((T_Receive.ShopCode)=Forms!F_ShopCost!Shop) And ((Format$([DeliveryDate],"yyyy/mm"))=Forms!F_ShopCost!YM)) Or (((T_Receive.ShopCode)=Forms!F_ShopCost!Shop) And ((Format$([DeliveryDate],"yyyy/mm"))=Forms!F_ShopCost!YM)) Or (((T_Receive.ShopCode)=Forms!F_ShopCost!Shop) And ((Format$([DeliveryDate],"yyyy/mm"))=Forms!F_ShopCost!YM)) ORDER BY T_Receive.ShopCode, T_Receive.DeliveryDate;
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
No.2,3です。 自宅PCにて、改めてバージョン及び動作の確認を行ったところ・・・ 自宅PCもAcc2003 SP3、かつ、「Select 1 From テーブル1;」での エラーも再現しませんでした(汗) ・・・というか、「.mdb」ファイルを開く既定のアプリケーションがAcc97に なってしまっていたりするなど、ちょっとこちらのPCの動作が怪しげに(汗) かえって混乱を招きかねない回答となってしまい、申し訳ありません。 > 他に確認すべきことはありますでしょうか? 他のPCで問題なく開けたとのことからすると、ファイル自体の問題では なく、当該PCにインストールされたAccessに何らかの不具合が発生して いると推測されますので、コントロールパネルの『アプリケーションの追加と 削除』から、「アプリケーションの修復」か「再インストール」を行ってみて、 状況が変わるかを確認する・・・程度しか、私からできるアドバイスは ありません(汗) 『「Select 1 From ○○」の部分に問題あり』との誤認から、アプリケーション 側の不具合にまで思い至らなかったこと、お詫びします。 大変失礼致しました。
- DexMachina
- ベストアンサー率73% (1287/1744)
No.2です。 > SELECT 1 FROM ItemLog AS T2 > のつもりで書いていましたが、もしかするとこの部分が問題なのでしょうか? 職場のPC(Access2003)で確認したところ、「As」なしでも動作しました。 ・・・さらに「Select 1 From テーブル1;」でも問題が発生しませんでした(汗) (ちなみに、自宅での検証時の状況をより詳細に説明すると、Acc97では 「As」なしから直接データシートビューに切り替えるとエラーになるものの デザインビューを経由するとSQL文に「As」が自動追加されたのに対し、 Acc2003ではどちらでもエラーになっていた・・・ように記憶(汗)) 自宅PCと職場PCはともにWinXP Pro・Access2003という環境ですが、 自宅AccessはOffice 2003 SP2までの適用なのに対し、 職場PCは同SP3まで適用済になっています。 ですので、もしかしたらクエリ内部をいじらなくても、SP3の適用で 解決できる(=「As」も「定数+From」もSP3で解消されたバグだった)、 かもしれません。 あやふやな回答ですみません。
- DexMachina
- ベストアンサー率73% (1287/1744)
> クエリに問題があるのでしょうか? それともパソコンに問題があるのでしょうか? 殆ど当たりをつける感じでAccess97とAccess2003で検証したところ、 > SELECT 1 FROM ItemLog T2 の構文について、前者と後者で結果に違いが生じることを確認しました。 (なお、テーブル名に半角スペースが入っているようですが、これはAcc97/2003の どちらでもエラーとなりますので、スペースはないものとしてテストしました: もしも実際のテーブルでもスペースを使用されているとすると、テーブル名全体を 角括弧([ ])で囲む(=[ItemLog T2])必要があります) 従って、少なくとも「クエリの問題を含む」ということは言えるかと思います。 Access97: 「Select 1 From ItemLogT2;」というクエリを単独で開くと、フィールド名「Expr1000」と して「1」のデータが羅列される。 →同テーブルに「1」という名のフィールドがあるかどうかにかかわらず、レコードが 存在すれば定数「1」を表示する、というクエリとして扱われる。 (フィールド名に数字のみを使用した場合、SQL上でフィールドと認識させるには、 上記のスペースと同様、角括弧([ ])で囲む必要があります) Access2003: 「Select 1 From ItemLogT2;」というクエリを開こうとすると「クエリ式'1 Form テーブル1' の構文エラー:演算子がありません。」というエラーが発生し、表示できない。 「Select 1;」というクエリであれば、フィールド名「expr1000」に、「1」のレコード(?)が1件 のみ表示される。 →数値(定数)のみの場合、From句と併用すると定数として認識できない。 (「Select 1, フィールド1 From ItemLogT2;」のように、フィールドと併用した場合は、定数 として認識されました) ※これは、ある意味、Access2003のバグといえるかもしれません※ ・・・ということですので、「Exists(Select 1 From ItemLogT2~)」の「1」を、主キーフィールド の名前に置き換えることが、ひとつの(最も労力の少ない)対処法になるかと思います。 但し、ご質問のクエリで使用しているテーブル群が手元にあるわけではないので、上記以外 のエラーが含まれる可能性も否定はできません(汗)
お礼
わざわざ検証していただきありがとうございます。 > SELECT 1 FROM ItemLog T2 ですが、これは別名をつけるための SELECT 1 FROM ItemLog AS T2 のつもりで書いていましたが、もしかするとこの部分が問題なのでしょうか? 2002では問題なく動いていたので気にしていませんでしたが。
全くの経験則ですが、クエリとPCの相性だと思います。 つまり、複雑なクエリはPC環境次第ではフリーズするであろうが私の考え。 ですから、私は、余りクエリを利用しないです。
お礼
回答ありがとうございます。 確認したところ、バージョンはAccess2003 SP3となっていました。 SP3は適用されていると思われます。 また別のパソコンにAccess2003をインストールして試したところ、開けなかったクエリは問題なく開けました。 他に確認すべきことはありますでしょうか? もし何かありましたら教えてください。 よろしくお願いします。