Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


99 / 2272 ツリー ←次へ | 前へ→

【13026】クエリの抽出条件に別テーブルのデータを使用したい えるす 16/6/2(木) 11:31 質問[未読]
【13028】Re:クエリの抽出条件に別テーブルのデータ... かるびの 16/6/2(木) 23:33 回答[未読]
【13031】Re:クエリの抽出条件に別テーブルのデータ... えるす 16/6/3(金) 13:17 お礼[未読]

【13026】クエリの抽出条件に別テーブルのデータを...
質問  えるす  - 16/6/2(木) 11:31 -

引用なし
パスワード
   初心者で申し訳ありません。
いろいろとサイトを巡って見たのですが、解決策が見当たらないため質問させて下さい。よろしくお願い致します。

現在、ODBCのリンクテーブルと通常のテーブルがあります。
OBDCには商品番号が羅列されています。
@@@@@@-*** という形で番号が並んでいて@@@@@@の部分は
ジャンルで番号が統一されています。

もう一つのテーブルはジャンル毎の@@@@@@が羅列されています。
@@@@@@(-***)@より後の部分は記載されていません。

このOBDCのデータを別テーブルに記載されているデータと
「先頭一致」したものだけを抽出したいのですが、
クエリの抽出条件に IN ( SELECT .... 等を考えたのですが、
先頭一致の部分で引っかかってしまいます。


OBDC
<商品番号>
000000-***
000000-***
001234-***
001324-***
001555-***
.
.
.
.

検索
<HC>
000000
001234
.
.
.
.
.

【13028】Re:クエリの抽出条件に別テーブルのデー...
回答  かるびの  - 16/6/2(木) 23:33 -

引用なし
パスワード
    真っ先に思ったのが、
ODBCテーブルの商品番号フィールドを二つに分けて、
つまり、ハイフンの左と右に分けてそれぞれ別フィールドにすれば良かったのに、
ということです。

 そうすれば、ODBCテーブルと「検索」テーブルとを簡単に結合できますね。


 可能であれば、今からでも、ODBCテーブルのテーブル構成をそのように直すべきです。
 アクセスでは、計算方法や処理方法に合わせて、テーブルを構成する必要があるからです。

 この点、エクセルでは、まずワークシートの構成を決めてしまい、決めてしまったら、ワークシート構成を変えることはまずありません。
 その後、ああいう計算をしたいとかこういう処理をしたいという要望が出てきたら、
豊富な関数をうまく組み合わせて、それら計算や処理をできるようにします。

 これに対し、アクセスは、計算方法や処理方法はエクセルに比べると少ないです。
 そのため、アクセスでは、限られた計算方法や処理方法に合わせて、テーブルを構成しなければなりません。


 なので、ODBCテーブルのテーブル構成を直すのが、ベスト・チョイスです。


 なお、アクセスにおいて、不適当なテーブル構成でも、
VBAを駆使すれば、やりたい計算や処理を実現することは不可能ではありません。
 しかし、それらの計算や処理自体が無駄に複雑になります。
また、その後、さらなる機能を盛り込もうとした場合、きちんとしたテーブル構成をしている場合よりも、十数倍の手間がかかることになります。
その上、掲示板などで質問したとしても、「テーブル構成を直せ」というアドヴァイスしかもらえないことが多いです。
 そうすると、全くの独力で、無駄に複雑な処理を組み立てることになります。
 その覚悟があるのであれば、不適当なテーブル構成でもいいと思います。


 次にセカンド・チョイスの話です。
 ODBCテーブルのテーブル構成を直せないならば、その商品番号フィールドを二つに分ける、
つまり、その値のうち、「001234」部分と「***」部分とに分けたクエリを作ればいいと思います。
 Left 関数、Instr 関数、Mid 関数あたりを研究してみてください。


 最後に、サード・チョイスです。

>「先頭一致」したものだけを抽出したいのですが、

とのことですが、
OBDCテーブルの商品番号フィールドの値に Left 関数などを使うと、
ハイフンの右側、例えば、000000が取り出せるわけですから、
抽出条件は、この関数の結果と、検索テーブルのHCフィールドとを比較するようにすれば、いいです。

 この抽出条件は、
  Left(ODBC.商品番号,ごにょごにょ) = 検索.HC
というものになります。
 クエリをSQLビューで作るなら、この抽出条件をそのまま WHERE 句に入れるだけですが、
クエリ・デザイナで作るなら、この抽出条件は左辺に関数が使われているので、
このままでは使えません。
 クエリ・デザイナで作るなら、一工夫が必要となります。

【13031】Re:クエリの抽出条件に別テーブルのデー...
お礼  えるす  - 16/6/3(金) 13:17 -

引用なし
パスワード
   長文で教えて下さり感謝します。
方針を理解しましたので、なんとか組み立てを行いたいと思います。

99 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078186
(SS)C-BOARD v3.8 is Free