• 締切済み

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;

  • shinp
  • お礼率33% (54/163)

みんなの回答

  • 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環境次第ではフリーズするであろうが私の考え。 ですから、私は、余りクエリを利用しないです。

関連するQ&A

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • Accessのマクロ、クエリについて

    OS Win2000、Access2000を使用しています。 「一覧」というテーブルから「条件」というフォームに検索条件を入力して「結果」というフォームで検索結果を表示させたいのですが、検索の項目数が多すぎて(文字数が多すぎるとメッセージがでました。)マクロのデザイン画面の「Where条件式」の欄に入りきらないのです。 ヘルプを見るとVBAだともっと入るというようなことが書いてありましたが、VBAの組み方がさっぱりわかりません。 クエリでやってみようとも思いましたが、「条件」「結果」のフォームをどう使っていいのかわからず、まいっています。 「条件」「結果」のフォームをいかして検索できる方法をお分かりの方がいましたら、教えてください。 ちなみに、「Where条件式」の欄に入力しようとした条件式が、 [txt_01] Like '*' & [Forms]![条件]![t_01] & '*' And [txt_02] Like '*' & [Forms]![条件]![t_02] & '*' And [txt_03] Like '*' & [Forms]![条件]![t_03] & '*' And ・・・・・・ と、なり最終的に[txt_13]までになります。 Access初心者のため説明がわかりづらいと思いますが、よろしくお願いします。

  • ACCESSでのクエリ抽出条件について

    ACCESS超初心者です。 自分なりに調べたのですが、知識不足によりお手上げ状態です。 クエリの抽出条件について、どなたかご教授いただけますでしょうか? OS:XP ACCESS:2000 ・フォーム上に自由に入力できるテキストを3つ用意します。 ・入力された3つのテキストが1つのフィールドに含まれるものをクエリで抽出したい。 ・3つのテキストが空欄の場合は全てのデータを抽出したい。 ■フォーム上のテキスト  テキスト1:テキスト10  テキスト2:テスト11  テキスト3:テスト12 ■テーブル  フィールド1:問合せ内容(1) ■クエリ内の抽出条件 Like "*" & [Forms]![F_検索テスト]![テキスト10] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト11] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト12] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • アクセスのクエリ抽出ができない。

    アクセスのクエリで、フォーム上のチェックのオンオフで抽出データの抽出条件を変更しようと思っています。 条件は、データの作成日付(yyyy/mm/dd形式)で、抽出の条件式は IIf([Forms]![F_送付状]![チェック40]=False,>=DateAdd("m",-1,Date()),>"0") です。チェック40がフォーム上のチェック(コントロールソースなし)で、オフの場合は、1ヶ月前までのデータを抽出、オンの場合は全件を抽出したいと思っています。 上記の式でうまく抽出できない(データが抽出できない)のですが、アドバイスをお願いします。

  • ACCESSでクエリーを使った検索

    VBAを使えば簡単にできるのですが、事情があり、クエリーのみで行わなければいけません。 フォームに入力された情報を元に検索できるクエリを作成しました。 通常でしたらクエリのフィールド名の下の抽出条件に Forms![F_検索]![検索条件1] とすればいいのですが、これが複数の条件を設定した場合はすべての条件を入力しないと、検索結果が出ないことから 以下のように変更しました。 フィールド名の抽出条件には何も書かず、別に式として IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=[Forms!]![F_検索]![検索条件1])) と入力しそこの抽出条件に「True」と入力しました。 これで何も入力されてない場合は全件が表示されるようになりました。 通常の検索はこれでいいのですが疑問点が2点あります。 1.期間を抽出する場合はどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Between [Forms!]![F_検索]![検索条件1] and [Forms!]![F_検索]![検索条件2])) とかしてみましたがダメでした。 2.あいまい検索をするにはどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Like [Forms!]![F_検索]![検索条件1])) なんてしてみましたがだめでした。 ご回答よろしくお願いします。

  • 【Access】クエリをソースに移植する方法

    下記のクエリをフォームのVisual Basicに移植したいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【クエリ(Q_FORM)】 INSERT INTO W_TBL SELECT T_TBL.* FROM T_TBL WHERE (((T_TBL.key) Like '*' & Forms!F_FORM!txt_key & '*') And ((T_TBL.flag) Like '*' & Forms!F_FORM!txt_flag & '*')); 【テーブル(T_TBL)】 id| key|flag 1|1234|1 2| 12|0 3| 12|1 【テーブル(W_TBL)】 id| key|flag 【フォーム(F_FORM)】 テキストボックス:txt_key テキストボックス:txt_flag コマンドボタン:cmd_insert 【フォームのVisual Basic】 Option Compare Database Option Explicit Private Sub cmd_insert_Click() DoCmd.OpenQuery "Q_FORM" End Sub それと、現在のクエリではtxt_keyが部分一致(txt_keyが12の場合、1234もヒットしてしまいます)すればヒットするようになっていますが、これを完全一致にする方法をご存知の方がいらっしゃいましたら、ご教示の程よろしくお願いします。 単純に完全一致させたいのであれば、txt_key前後のLikeや*を除けば良いのではと思うのですが、txt_keyが未入力の場合は全件ヒットさせたいと思っており、整合性を取る方法が分かりませんでした。 以上、よろしくお願いします。

  • access2007更新クエリの値をフォームから

    任意の値で抽出して、出したいのですが・・・。 SQL文 UPDATE T教育課程表登録詳細のコピー1 SET T教育課程表登録詳細のコピー1.課程ID = Replace([課程ID],"12","13") WHERE (((T教育課程表登録詳細のコピー1.課程ID) Like [Forms]![F_年度繰越処理]![テキスト旧_課程ID])); 抽出は出来ているのですが、この"12","13"をフォームから任意の値を入れたいのです。 12に "[Forms]![F_年度繰越処理]![テキスト旧_課程ID]" (フォーム上の値は12*) 12に "[Forms]![F_年度繰越処理]![テキスト旧2_課程ID]" (フォーム上の値は12) 13に "[Forms]![F_年度繰越処理]![テキスト新_課程ID]" (フォーム上の値は13) などと入れてみるのですが、変化なしです。 課程IDは12-11-1000のように10桁で、先頭の2文字を変換したいのです。 どうしたら出来るのでしょうか。 accessかじりかけなので、自分ではお手上げです。よろしくお願いいたします。

  • AccessのFormat関数について

    Access2002を利用しています。 ある問題集を解いているのですが、売上データのT-売上マスターの売上日のフィールドをyyyy年mm月という書式で表示するという問題なのですが、解答をみると、 Format$(フィールド名,書式)となっているんです。 Format(フィールド名,書式)というのは分かるのですが、 Format関数の後に$マークがついている意味合いが分かりません。 Format関数の引数の前に$マークがついているのはなぜでしょうか?

  • Access2007で同月同日を抽出

    ある(*.accdb)のクエリーで日付の所に Like"*/"&Format(date(),"mm/dd") と書いて本日と同じ同月同日を抽出していますが本日ではなく任意の yyyy/mm/ddをあるレコード欄に入力したらその日付の同月同日を抽出するにはクエリーにどの様に書けばよいのか教えてください。

  • accessのnot検索

    access2000で テーブル[日付](yyyy/mm/ddで入力されています)   [内容](なんでも。空白の場合もあります) フォーム  「日付」(yyyy/mm/ddのみ入力可能にしています)  「NGword」(どんな文字でも入力できます) という項目を作成し・・・ 1、クエリでフォームの「日付」に入力したものかつ 2、フォームの「NGWord」を含まないレコードのみを抽出したいのですがうまくいきません。 「日付」「NGword」が空白の場合は入力された条件のみ適用させたいです。 (「日付」・「NGWord」が両方空の場合は全レコード抽出したいです) クエリを作成して・・・ [日付]の抽出条件を like "*" & forms![フォーム名]![日付] & "*" で [内容]の抽出条件を (not like "*" & forms![フォーム名]![NGword] & "*") or (is null) で設定したのですがうまくいきませんでした・・・泣 宜しくお願いします。