ちょっと変わったマニアな作品が集結

Access2000、WinXPProです。
Accessの選択クエリの抽出条件に入力可能な最大文字数(バイト数)はどれくらいなんでしょうか?
また、その制限を広げることは可能なんでしょうか?

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

A 回答 (3件)

#2です。



もしももう一つクエリをかませてもいいのであれば・・

抽出条件の商品コードだけのテーブルを作成して
XXXXXXXX
AAAAAAAA
BBBBBBBB
というコードを入力しておいて、クエリで商品情報と連結させてから
顧客情報と、上記の商品を抽出したクエリを連結させては
いかがでしょうか。
100もあるコードをクエリの編集画面で入力されるよりは
後々のメンテナンスが楽だと思うのですが・・。
    • good
    • 0
この回答へのお礼

なるほど。
おっしゃるとおりです。
そのやり方でやってみます。
感謝です。

お礼日時:2007/03/08 09:11

こんにちは。



>文字数は足りているので条件項目数の問題なのかもしれません。
>そのあたりご存じないでしょうか?
>それともSQLで書けば解消するんでしょうかね?

と書かれていますが、どの様な問題が発生して
何を解消されたいのでしょう?

この回答への補足

ある顧客DBがあります。
その中には顧客個人情報のテーブル、顧客の会社情報のテーブル、商品情報のテーブルがあります。
それらの連結クエリがあります。
商品情報の中に商品コードがありまして、その商品コードを抽出条件のところに、
XXXXXXXX or AAAAAAAA or BBBBBBBB or ......という形で入力して出力しようとするとこの文字列が長くなると(例えばorでつないだ商品コードの数が100を超えると文字列が長くて編集できませんという表示が出ます。
これに関してみると単にこの抽出条件に入力できる文字列数の問題のようです。

また、同様にやっているつもりですが、「クエリデザイングリッドの制限1024文字を超えました」というような表示が出たこともあります。

で、SQLで書けばこのあたりの問題は解消されるのでしょうかということをお伺いしたかったのです。

わかり辛くて申し訳ありません。

補足日時:2007/03/07 17:12
    • good
    • 0

こんにちは。



 下記サイトをご参照ください。ヘルプにも出ているようです。
 SQL文字列の長さが64000文字のようです。
 制限は広げられないので、項目指定時にテーブル名称が何度も出てくるようなら、それを短くして対応するしかないですね。

では。

参考URL:http://hp.vector.co.jp/authors/VA014071/tips/spe …

この回答への補足

早速ありがとうございます。
文字数は足りているので条件項目数の問題なのかもしれません。
そのあたりご存じないでしょうか?
それともSQLで書けば解消するんでしょうかね?

補足日時:2007/03/07 16:51
    • good
    • 0

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

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

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

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

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

QAccessのエラーについてです。

どなたか教えてください!
クエリで簡単な抽出(住所で呼び出し)をして内容の書き換えをしていたんですが、1度にたくさん呼び出したかったのでデザインビューで行を挿入して50件位ずつ実行していました。その後更に行を10~20程増やして実行したところ1度目は普通に出来たんですが、2回目はデータシートビューには出たもののデザインビューに戻そうとするとエラーメッセージが出て戻りません。ちなみにエラーは『指定した式は、クエリのデザイングリッドの1024文字の制限を超えています。』というものです。
文字数が多いのかとも思い、データシートビューの内容を全部消去したのですが何も変わりません。
いかんせんAccess自体超初心者でこの質問の仕方で伝わるのか不安ではありますが・・・
どうぞ宜しくお願いします。不足情報があれば聞いてください。

Aベストアンサー

SQLスタートメントがいっぱい?になったのではと思うのですが。
クエリを一度削除して再度作り直せば大丈夫だと思いますが。

Qアクセスのクエリ 1文字以上を抽出

アクセスのクエリの抽出条件で、「1文字以上」とする方法を教えてください。

抽出条件をビルドで作ってみたのですが、
勝手にダブルコーテーションがついてしまいます。

1文字以上の値はあるのに何も抽出されません。

sql文は
SELECT [テーブル1].[フィールド1]
FROM テーブル1
WHERE ((Len([テーブル1]![フィールド1])>"1"));

となっています。
ご教授よろしくお願いします。

Aベストアンサー

【要旨】
「1文字以上」の場合、以下のSQLで取得できます:

Select [テーブル1].[フィールド1]
From テーブル1
Where (Len([テーブル1].[フィールド1])>=1);


【詳細】
念のためですが、「一文字以上」の場合は「>1」ではなく
「>=1」になります(汗)

それはともかく・・・
対象フィールドの文字数を抽出条件に使用する場合、
クエリのデザインビューでは、『フィールド』欄にフィールド
ではなく文字数評価式(Len関数)を、『抽出条件』に
文字数を、それぞれ記述します。


SQL文では以下の通りです:

<文字数表示が必要な場合>
Select [テーブル1].[フィールド1], Len([テーブル1].[フィールド1]) As 文字数
From テーブル1
Where (Len([テーブル1].[フィールド1])>=1);

<文字数表示が不要の場合>
Select [テーブル1].[フィールド1]
From テーブル1
Where (Len([テーブル1].[フィールド1])>=1);

または、Access上で「0以外」は「条件を満たしている」
と判断されることを利用して、

Select [テーブル1].[フィールド1]
From テーブル1
Where (Len([テーブル1].[フィールド1]));

と、「>=1」を省略してもOkです。


なお、「1文字以上」(=空ではない)という条件で、
文字数の表示も不要な場合は、以下のようにしても
ご希望の結果が得られますので、併せて参考まで:

Select [テーブル1].[フィールド1]
From テーブル1
Where (Nz([テーブル1].[フィールド1],"") <> "");

【要旨】
「1文字以上」の場合、以下のSQLで取得できます:

Select [テーブル1].[フィールド1]
From テーブル1
Where (Len([テーブル1].[フィールド1])>=1);


【詳細】
念のためですが、「一文字以上」の場合は「>1」ではなく
「>=1」になります(汗)

それはともかく・・・
対象フィールドの文字数を抽出条件に使用する場合、
クエリのデザインビューでは、『フィールド』欄にフィールド
ではなく文字数評価式(Len関数)を、『抽出条件』に
文字数を、それぞれ記述します。


SQL文では以下の通りです:

<文字数...続きを読む

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください

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のクエリー抽出条件にIIFを使用して

コンボボックスの値を抽出条件にしたクエリーを作成しています。
コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、
以下の式を入れたのですが全表示がされません。

IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])

Like "*" の部分がいけないのでしょうか?
(偽の場合は選択した値のレコードが抽出されます)

どなたか教えてください、よろしくお願いいたします。

Aベストアンサー

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にしてください。
(3)IIfを入力したフィールドの「抽出条件」に True と入力します。
 (Trueの囲い文字はいりません。)

どうでしょう?ちゃんと出ますよね・・・?
ただし、フィールドを作ったわけですから、
クエリのデータシートビューには必要のない、-1などが表示されたフィールドが表示されますよね。
これは、デザインビューに戻って、表示のチェックボックスをオフにすれば解決します。

IIFというのは、ExcelのIF関数とはちょっとイメージが違います。
以下解説↓

今回の条件式の部分には、[コンボ]="ALL"という評価式(←ポイント!)が入力されています。
Excelでは条件式というイメージが強いですが、
IIFは評価式という意味です。
つまり、この評価式自体がTrueとFalseを持つということです。
IIf([Forms]![テーブル名]![コンボボックス名]="ALL",・・・・)という式で、
条件をALLとしたら・・・
評価結果=True となります。
そして真の場合の処理にTrueを指定することで、IIFの戻り値がTrueになります。
条件にALL以外を入力すると・・・
評価結果=False となります。
そして偽の場合の処理の戻り値が、ALL以外の条件になります。
抽出条件にもTrueを入力したのは、無条件に全件が表示されるのを防ぐためです。

これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。
または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。
健闘を祈ります!

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にして...続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QACCESS 重複データを1つだけ表示したい(初心者です)

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

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

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

Aベストアンサー

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

Qアクセスの操作について

ワードで作成した文章をコピーして、アクセスのフィールドに貼り付けようとすると「文章が長すぎて編集できません」という表示が出て、貼り付けることができません。貼り付けようとしている文章は2行程度の短い文章です。
非常に初歩的な質問で申し訳ないのですが、解説書を見てもわかりません。解決方法を教えていただけると助かります。

Aベストアンサー

テーブルをデザインモードで開いてフィールドの型を確認してください。

テキスト型の場合、
Access97は半角で255文字まで、全角だと127文字
Access2000以降は半角、全角とも255文字まで
下のほうにフィールドの文字数を指定する場所があります。

メモ型の場合は上記の制約はありません。

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

Qアクセスのフォームのビューが表示されないのですが、

Accessでフォームを作っているのですが、クエリを元にウイザードで作成。デザインビューではちゃんと文字が出ているのに、データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけなんですが、何が原因なのでしょうか? 同じ作り方で出来る物もあるのですが、アクセスは初心者です。本を見てもわからないのですが、教えて下さい。よろしくお願い致します。
参考になるURLがあれば、それも教えて頂きたいです。

Aベストアンサー

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
表示を切り替えるコマンドボタンや、フォームの抽出条件を指定するテキストボックス等)
はフッタ/ヘッダに移動する、といった回避方法があります。

フォーム ヘッダ/フッタを表示するようにするには、フォームをデザインビューで開き、
メニューで「表示(V)→フォーム ヘッダ/フッタ(H)」を選択します。
ヘッダのみ、またはフッタのみ必要な場合は、不要な方の下端にマウスポインタを
合わせて、水平な線と上下矢印を組み合わせた形になったところで、マウスをクリック&
ドラッグして下さい。


※本来表示させるレコードがない状態で、詳細領域のコントロールを強引に表示させる
  には、フォームのプロパティシートの『データ』タブで、『レコードセット』の設定を
  「ダイナセット (矛盾を許す)」にするという手もあります。
  但し、変な形でレコード編集がされてしまう危険性が生じますので、お勧めはできません。


参考までに、以前の回答へのリンクも載せておきます:
http://oshiete1.goo.ne.jp/qa3371589.html
http://oshiete1.goo.ne.jp/qa3028994.html

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
...続きを読む


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

人気Q&Aランキング