• 締切済み

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;

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

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.3

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で解消されたバグだった)、 かもしれません。 あやふやな回答ですみません。

shinp
質問者

お礼

回答ありがとうございます。 確認したところ、バージョンはAccess2003 SP3となっていました。 SP3は適用されていると思われます。 また別のパソコンにAccess2003をインストールして試したところ、開けなかったクエリは問題なく開けました。 他に確認すべきことはありますでしょうか? もし何かありましたら教えてください。 よろしくお願いします。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> クエリに問題があるのでしょうか? それともパソコンに問題があるのでしょうか? 殆ど当たりをつける感じで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」を、主キーフィールド の名前に置き換えることが、ひとつの(最も労力の少ない)対処法になるかと思います。 但し、ご質問のクエリで使用しているテーブル群が手元にあるわけではないので、上記以外 のエラーが含まれる可能性も否定はできません(汗)

shinp
質問者

お礼

わざわざ検証していただきありがとうございます。 > SELECT 1 FROM ItemLog T2 ですが、これは別名をつけるための SELECT 1 FROM ItemLog AS T2 のつもりで書いていましたが、もしかするとこの部分が問題なのでしょうか? 2002では問題なく動いていたので気にしていませんでしたが。

noname#140971
noname#140971
回答No.1

全くの経験則ですが、クエリとPCの相性だと思います。 つまり、複雑なクエリはPC環境次第ではフリーズするであろうが私の考え。 ですから、私は、余りクエリを利用しないです。