• ベストアンサー

AccessVBA SQL テキスト型は大小判定できない?

こんにちわ。 AccessVBA業務暦1ヶ月の新米です。 テーブルからテキスト型のフィールドを抽出するとき、抽出条件として「A~B」とか「Aより大きいもの」 という条件で抽出しているのですがうまくいきません。フィールド自体はテキスト型でとっているのですが、中身のデータは「00001、000023・・・」とか数字で入っています。フィールドを数値型にしたらうまくいくのに、テキスト型にするとうまく抽出できません。解決方法はあるでしょうか?他のシステムとの連携があるので、できればAccess側はテキスト型でとっておきたいです。説明不足かもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • uzukichi
  • ベストアンサー率53% (8/15)
回答No.2

No.1さんの補足ですが テキスト型も大小の判定はします。ただテキストの大小は  11 100 この2つの数字が入っていたとすると11の方が大きいと判断されます。 文字ですから、11(十一ではなくいちいち) 100(百ではなくいちぜろぜろ)という文字と認識されます。 11 100と左詰にしてくらべるとわかりやすいかと思います。 その為、00001と000023を数字として条件と比較する(フィールドの設定はテキスト型のまま)には 比べるときだけ数字に変換をするようにします。 ********************************************* Tテストファイル[テーブル名]の テキストコード[テキスト型のフィールド]に対する条件にすれば select テキストコード from Tテストファイル where Ccur(テキストコード) > 25 とすれば 000026や00035は取得できますが 0022や0008は除外できますよ

mttk1238
質問者

お礼

お返事ありがとうございます。 細かい解説をしていただき、一気に疑問が晴れたような感じです。またよろしくお願いします!!!

その他の回答 (1)

  • tonmaji
  • ベストアンサー率7% (1/14)
回答No.1

そのテキスト型のフィールドに CLng等をかませればいいのでは。 参考までに。。。。 CInt(整数型に変換) Clng(長整数型に変換) CCur(通貨型に変換) そうすれば、取得時に数値としてみなされますので、 ちゃんと大小判定されます。 ■使用例 カラムAより大きいカラムBを持つデータをとってくる場合 select * from テーブル名 where CLng(カラムB) > CLng(カラムA) DBの型自体はテキスト型のそのままで、 取得するSQLで型変換すればよいです

mttk1238
質問者

お礼

お返事ありがとうございます。 なるほどなるほど・・・。そういえばそのような関数があったような記憶が・・・・ちょっとチャレンジしてみます。ありがとうございました!!

関連するQ&A

  • AccessVBA SQLのWHERE句について

    こんにちは! テーブルAのBフィールドの中に以下のデータがあるとき(昇順です) 1,2,5,6,12.... 3という数値を得たいです。 3,4がフィールドに含まれる場合は、7です。 数字がバラバラなので、データを新規追加した時に穴埋めをしていきたいのです。 データの登録した順番は関係ないものとして、どのように実現できますでしょうか? ORDERでデータを取ってきて、ループするしかないのでしょうか・・・? 特殊な例ですみませんが、宜しくお願い致します。

  • テキストボックスにクエリ結果を表示させたい

    フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2   A   |  10   B   |  20   C   |  30   D   |  40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • クエリーで全部のデータを抽出する方法

    アクセスのクエリーでデータを抽出する時、具体的にはフォームでデータを入力し抽出するのですが、たとえばフォームのテキストボックスに数字を入れないとそのクエリーのフィールドは抽出がかからないようにしたいのです。(抽出フィールドが1つなら数字をいれなければクエリーのデータすべてが表示される) ----------------------------------- フィールド   A      B     c テーブル   テーブル1 テーブル1 テーブル1 抽出条件    []    [] または    ---------------------------------- 上はクエリーのデザインですがクエリーをひらくと抽出条件をきいてきますがA列は何も入力しないでB列では1と入力するとBの列に1の入ってるレコードを表示させたいのです。(もし空欄が無理ならAの列の時何かある文字を入力すると全部表示になる、でもいいです。) まわりくどくなりましたが、アクセス超入門者です。よろしくおねがいします。

  • ACCESSのクエリ:抽出条件で型が一致しません

    ACCESSでクエリを作ったのですが 実行すると、 「抽出条件で型が一致しません」のエラーが出ます 問題となっているヶ所は テーブルのフィールド定義がバイナリーになっています そして、クエリで   フィールド   テーブル   並べ替え   表示   抽出条件   または となっていますが、 この抽出条件に、1、を入れました テキスト型なら、"1" 数値系型なら、1、でいいのか、と思ったのですが バイナリ型は別の表現があるのでしょうか よろしくお願いします

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

    またまた、お世話になります。 クエリでの抽出を行う方法についてアドバイスをお願いします。 以下、状況を説明します。 抽出条件をつけようとしているフィールドはテキスト型で、通常は、"001""010""101"など3桁の数字が入ってます。稀に"011A"というふうに、数字3桁+アルファベット1文字が入ることもあります。(ちなみに入る数字は001~200までです。) このフィールドに対し、3桁の数字部分をそのまま数値と見なして、例えば"010以上"で抽出したいのです。 単に">=010"なんてやってもダメですよね。(←注:これはやってみた訳ではなく、私の想像です) どのようにすれば良いでしょうか。よろしくお願いいたします。

  • AccessVBAでサポートお願いします。

    こんばんわ。AccessVBA初心者です。 下記のような処理を作りたいのですがわかりません・・。 もしお分かりになる方がいらっしゃいましたらサポートをお願い致します。 「テーブルA」「テーブルB」があり、それぞれのテーブルに連結した「フォームA」「フォームB」(両方とも帳票フォーム)があります。 テーブルには幾つかのフィールドがあり、その中にチェックボックスに連結したフィールドがあります。 まず、「フォームA」を開き、任意のレコードのチェックボックスにチェックを入れ(複数選択あり)、あるコマンドボタンをクリックするとチェックの入ったレコードのみを「テーブルA」から「テーブルB」へ移動させる処理を作成したいのですがどうもうまく作れません。 「テーブルB」へ移動後は「テーブルA」から該当のレコードが削除されている必要があります。 また、テーブルBには随時データが蓄積されていく必要があります。 どなたかお分かりになる方がいらっしゃいましたらご教授願います。 その際、VBAのソースを記述頂けますと助かります。 どうぞ宜しくお願い致します。

  • ACCESS2000のSQLについて

    ACCESS2000のSQL文について質問です。 K情報テーブル:(支店(テキスト型),所属(テキスト),氏名(テキスト),ログ(テキスト),抽出件数(数値),処理日(日付型)) 支店 所属 氏名 ログ 抽出件数 処理日 ----------------------------------------- 関東 埼玉 太郎 A   50    2009/02/25 関西 大阪 次郎 B   15    2009/04/01 関東 埼玉 太郎 A   10    2009/03/05 関西 大阪 次郎 B   5    2009/04/06 東北 青森 三郎 C   2    2000/01/02 東北 青森 三郎 A   2    2000/01/02 ・ ・ ・ ----------------------------------------- 以上のテーブル情報を、SQL文にて抽出したいのですが、抽出条件が私には難解で解決の見通しが立ちません。ご教授をお願いします。 ***条件*** [ログ] = "A" のみ抽出。 現在日から過去3ヶ月前までのデータのみ抽出。 [氏名]ごと[ログ]の総合計。 [氏名]ごとの[抽出件数]の総合計。 [ログ]の総合計の上位30件を降順で。 順位にNo.をふる。 上記の条件で抽出したデータをを下記の作業テーブルに出力したと思っております。 作業テーブル:順位,所属,氏名,ログ件数,抽出件数 宜しくお願いします。

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

  • accessのクエリで入力が不可能…

    【テーブルA】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔テキスト型〕 フィールド4〔数値型〕 【テーブルB】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔数値型〕 フィールド4〔テキスト型〕 となっています。 両方のテーブルを使い、クエリを作成しました。 リレーションが、テーブルAのフィールド1と、テーブルBのフィールド3に設定してあります。 このようにして作成したクエリでデータの入力ができません。 なぜでしょうか? Access2000です。

専門家に質問してみよう