Access VBA質問箱 IV

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

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


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

【12572】クエリ内のテーブル名を取得する方法は? てふろん 14/7/7(月) 17:09 質問[未読]
【12575】Re:クエリ内のテーブル名を取得する方法は? かるびの 14/7/8(火) 1:29 回答[未読]
【12577】Re:クエリ内のテーブル名を取得する方法は? てふろん 14/7/9(水) 13:26 お礼[未読]

【12572】クエリ内のテーブル名を取得する方法は?
質問  てふろん  - 14/7/7(月) 17:09 -

引用なし
パスワード
   あるクエリ「Q_地域」は「T_全国」「T_青森」という二つのテーブルから作られています。
「T_青森」は動的に変化します。T_秋田とかT_熊本とか。
そこで、現在処理の対象になっているクエリ「Q_地域」が、どのテーブルを元にしてるか?そのテーブル名を取得する方法を、ご教示いただきたく、お願いいたします。

【12575】Re:クエリ内のテーブル名を取得する方法...
回答  かるびの  - 14/7/8(火) 1:29 -

引用なし
パスワード
   >そこで、現在処理の対象になっているクエリ「Q_地域」が、どのテーブルを元にしてるか?そのテー>ブル名を取得する方法を、ご教示いただきたく、お願いいたします。
 まず、Q_地域のSQL文を取得します。
 DAOのQueryDefオブジェクトのSQLプロパティを使います。

 SQL文でテーブル名を書くところは決まっています。
 「FROM」の後と、「INNER JOIN」やら「LEFT JOIN」やらの後です。
 また、SQL文では、FROM句でテーブル名を書いたら、
その次には半角スペースを入れることになっています。
 なので、これら目印にすれば、テーブル名を切り出せると思います。
 テーブル名を切り出すに際しては、InStr関数とMid関数を使います。

 取得したい文字列(テーブル名)が、どこの文字を基準として、
何文字目から何文字目までなのかを、何度もよく数えないと
関数を組み立てられないので、骨が折れます。


 それから、この処理をどういうタイミングで実行させるかということも
考えておく必要があります。
 つまり、コマンドボタンをクリックしたら、
使われたテーブル名がメッセージボックスに表示されるようにする
というようなことです。


 しかし、こんな面倒なことをしなくても、
>「T_青森」は動的に変化します。
とのことなので、動的に変化させるときに、クエリに使用するテーブル名を
取得すればいいだけのようにも思います。

【12577】Re:クエリ内のテーブル名を取得する方法...
お礼  てふろん  - 14/7/9(水) 13:26 -

引用なし
パスワード
   かるびのさん、出来ました!!
ありがとうございました!!

> まず、Q_地域のSQL文を取得します。
> DAOのQueryDefオブジェクトのSQLプロパティを使います。

↑ これを教えて頂いたおかげで、解決できました。
感謝、感謝です。
クエリの参照テーブルを示すお手軽な関数なり、プロパティがあるはず、
と思い込み、ずっと探していましたが、
やっぱりSQL文を直接調べるしかないのですね。

>使われたテーブル名がメッセージボックスに表示されるようにする
このご教示もたいへん、助かりました。

> テーブル名を切り出すに際しては、InStr関数とMid関数を使います。
これ、トライしてみましたが、途中でギブアップ。

結局、地域のテーブル名は決まっているので、
SQL文の中にその地域名があるかどうかを検索する方法にしました。
SQL文の中の地域名を特定し、
それをフォームから指定した地域名で置換するところまでやってます。

おかげさまで、以下が、快調に回っています。
ありがとうございました。
後から誰か見るかもしれないので、以下、貼っておきます。
シロート作ですが…。


Sub 対象地域を切替()

'クエリ内の参照テーブルを変更します
  
Dim Dbs     As DAO.Database
Dim Qdf     As DAO.QueryDef
Dim stSQL    As String
Dim FIND    As String
Dim REP    As String


Set Dbs = CurrentDb
Set Qdf = Dbs.QueryDefs("Q_地域")


'Q_地域クエリのSQL文を取得
stSQL = Qdf.SQL

'SQL分の中にどの地域があるかをチェックし、
'地域テーブルが見つかれば、置換の対象にセットする
'最終的には全都道府県分をチェック

  If InStr(stSQL, "T_青森") <> 0 Then
  REP = "T_青森"
  
  ElseIf InStr(stSQL, "T_秋田") <> 0 Then
  REP = "T_秋田"
  
  ElseIf InStr(stSQL, "T_岩手") <> 0 Then
  REP = "T_岩手"
  
  ElseIf InStr(stSQL, "T_宮城") <> 0 Then
  REP = "T_宮城"
  
  ElseIf InStr(stSQL, "T_福島") <> 0 Then
  REP = "T_福島"

  Else
  REP = "T_山形"
  End If
  
 
'フォーム「F_対象地域を切替」から切替え先地域を指定

  If Forms![F_対象地域を切替]![地域指定] = "青森" Then
  FIND = "T_青森"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "岩手" Then
  FIND = "T_岩手"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "秋田" Then
  FIND = "T_秋田"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "宮城" Then
  FIND = "T_宮城"
  
  ElseIf Forms![F_対象地域を切替]![地域指定] = "福島" Then
  FIND = "T_福島"

  Else
  FIND = "T_山形"
  End If


'地域切替えの地域テーブル名を表示

  MsgBox REP & "⇒切替えます⇒" & FIND

'SQL分の中の地域テーブル名を、使いたい地域テーブル名で書き換える。

Qdf.SQL = Replace(Expression:=Qdf.SQL _
        , FIND:=REP _
        , Replace:=FIND _
        , Compare:=vbTextCompare)
        

Set Qdf = Nothing
Set Dbs = Nothing

End Sub

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