追加クエリをVBA上のSQLで作成しています。

A.MDBとB.MDBに同名のTable_Aがあり、フィールドも同じです。。

これを重複をチェックするためにField_Aでジョインさせていますが、
テーブル名もフィールド名も同じなために区別ができません。

どのようにして区別するとよいのでしょうか?

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

A 回答 (3件)

#1です。

リンクを張って

INSERT INTO Table_A1
SELECT Table_A.*
FROM Table_A LEFT JOIN Table_A1 ON [Table_A].[ID]=[Table_A1].[ID]
WHERE ((([Table_A1].[ID]) Is Null));

みたいなSQL文でいかがでしょう
    • good
    • 0
この回答へのお礼

リンクテーブルでいけました。

データの有無チェックはやっぱり、同MDBでないと
無理なんでしょうねぇ。。(リンクにしない場合)

リンクしなくてもJoinって可能なんでしょうか?

お礼日時:2005/04/07 12:41

>リンクしなくてもJoinって可能なんでしょうか?



ちょっと考えて下さい。リンクしないでJoinすることを要求されたら、データベース(エンジン)はどこを探しに行けば良いでしょうか?
いくつものデータベースに同じ名前のテーブルがあったり、ネットワークが広範囲に拡がっていたり。全部丸なげでデータベースに面倒を見てくれってのは無理です。

この回答への補足

アクションクエリで外部DBに書き出す場合、IN句を
使いますが、そんなのができないかなぁ。と思った
次第です。

今回はリンクでいけたので助かりました。

ありがとうございました。

補足日時:2005/04/07 15:58
    • good
    • 0

質問が明快でないため回答がないように見受けました。


VBAということなのでAccessの中での話でしょうか。

A.MDBからB.MDBのTable_Aにリンクを張れば、Accessは自動的に Table_A1 として名前を付け替え、SQL文は

例:SELECT DownLoadLog.TgtURLID, Table_A1.TgtURLID
FROM DownLoadLog INNER JOIN Table_A1 ON DownLoadLog.LogID = Table_A1.LogID;

のように、二つの名前で出来ると考えます。
問題点を具体的に、場合によってはソースを提示するなどして補足されてはいかがでしょう。

この回答への補足

VBA+MDBファイルということなのでAccessでもExcelでもWordでも何
でもかまいません。

Table_Aに伝票IDが存在したとして、A.MDBからB.MDBに伝票IDが
存在しないものだけをアクションクエリでExportできないかと思
います。


リンクテーブルにする方法はやっていなかったので試
してみたいとおもます。

補足日時:2005/04/07 12:01
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す

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

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

QAccessクエリの本でおすすめなものは?

Accessを仕事で使い勉強中です。
いままで、
魔法使いの開発工房シリーズの本で勉強しました。
簡単なものなら自分でいろいろ作れるようになってきましたが、仕事場でクエリを作りたいときに参考になるようなクエリ集を探しています。

そこで、Amazonを見て、
●ACCESSクエリの達人ガイド <集計&データ整理の極意>[2000/2002/2003/2007対応]谷尻 かおり
●Accessクエリ逆引き便利帖 (単行本) プロジェクトA (著)
●Accessクエリ逆引き大全500の極意 日野間 佐登子

あたりが良いかなと思っているのですが、実際に購入された方、どの本が使い勝手がおすすめでしょうか。

家では、2007で、仕事場では2003を使用しています。

どうぞよろしくお願いいたします。

Aベストアンサー

ACCESSのデザインビューでクエリの勉強をしたいのでしょうか?
検討違いかもしれませんが、ゆくゆくはSQL自体の勉強も必要だと思うので「改訂新版 SQLポケットリファレンス」を一冊購入をお勧めします。会社勤めなら会社にあるかも知れませんが、とても勉強になります。

参考URL:http://gihyo.jp/book/2003/4-7741-1755-2

Q2つのmdb内にある同名テーブルのフィールド比較

同じ名前のmdbが2つ存在しておりまして、A.mdbのテーブル内のAテーブルと
B.mdb内にあるAテーブルが、同じかどうかを判断するために、フィールドの比較を行いたいのですが、何かよい方法を御存じの方いらっしゃいますか?

Aベストアンサー

まず、異なるMDBファイルに保存されているA・Bのテーブルを比較するための環境を作ります。
これは、C.mdbとでも名づけて新たに作成しましょう。

(以下はC.mdb内での処理記述となります。)

A・Bそれぞれに存在する、同名のテーブルへリンクを行い、
C.mdb内で比較すべき2つのテーブルを扱えるようにします。

後は、下記参考ページの説明に従って作業を進めることができます。

やってみると、それほど難しいものではありませんので、頑張ってください。

QアクセスのGUIとはクエリのことでしょうか?

こんばんは。
GUIについてちょっと頭の中を整理したいのですが
アクセスで言うと「GUI」とはクエリのことになるのでしょうか?

Aベストアンサー

Googleで「GUI」で照会してよく読むこと。この質問はびっくりする質問。
ソフトの一部の機能を捉えてGUIかどうかを余り議論しないと思う。Access全体が、むしろOfficeソフト全体が、GUIを体現している(そういう設計思想である)。
ーー
対するCUIですが、まだCUIベースのものがあるようです。
データベース関連でも
http://mysqlweb.net/category/4062977-1.html
の>しかしMySQLは基本的にコマンドプロンプトからCUI(Character User Interface)による操作になります。・・
など。

Qfield3で特定の値が入っている項目のfield2の値を抽出する方法について

下記のテーブルがあったとし、field3に「2」と「4」が入っているfield2の値を抽出したいと思いました。
下記の場合ですと、その条件を満たすのは11のみの為、「11」と表示したいと思います。

【T_Mテーブル】
―――――――――――――
|field1|field2|field3|
―――――――――――――
|1  |11  |1   |
|2  |11  |2   |
|3  |11  |3   |
|4  |11  |4   |
|5  |12  |2   |
|6  |12  |3   |
|7  |13  |3   |
|8  |13  |4   |
―――――――――――――

その為、下記のようなSQLを発行しましたが、1件もヒットしませんでした。

SELECT T_M.field2
FROM T_M
WHERE T_M.field3=2 And T_M.field3=4
GROUP BY T_M.field2;

WHERE T_M.field3=2 And T_M.field3=4に問題があると思うのですが、
And の代わりに or を使用すると、「11」「12」「13」がヒットしてしまい、
「11」だけをヒットさせることが出来ませんでした。

その為、上記のテーブル内容で「11」が返ってくるSQLの書き方についてご教示いただければと思います。

下記のテーブルがあったとし、field3に「2」と「4」が入っているfield2の値を抽出したいと思いました。
下記の場合ですと、その条件を満たすのは11のみの為、「11」と表示したいと思います。

【T_Mテーブル】
―――――――――――――
|field1|field2|field3|
―――――――――――――
|1  |11  |1   |
|2  |11  |2   |
|3  |11  |3   |
|4  |11  |4   |
|5  |12  |2   |
|6  |12  |3   |
|7  |13  |3   |
|8  |13  |4   ...続きを読む

Aベストアンサー

その他データベースに投稿される場合、使っているデータベースを書かれた方がよいと思います。
DBMS特有の関数や構文を示すことができませんので。。
考え方は以下の通りです。
・データのField2が「Field3=2であるField2」と「Field3=4であるField2」の両方を満たす
SELECT field2
FROM T_M
WHERE field2 IN (SELECT field2 FROM T_M WHERE Field3=2)
And field2 IN (SELECT field2 FROM T_M WHERE Field3=4)
GROUP BY field2
・データを集計したときにfield2=2のデータとfield2=4のデータをそれぞれ1件以上含む
SELECT field2
FROM T_M
GROUP BY field2
Having SUM(CASE WHEN field3=2 Then 1 Else 0 End)>0
Or SUM(CASE WHEN field3=4 Then 1 Else 0 End)>0

しかし、後者で使われているCASE式はたとえばAccessでは使えませんのでIIFなどを使う必要があります。

その他データベースに投稿される場合、使っているデータベースを書かれた方がよいと思います。
DBMS特有の関数や構文を示すことができませんので。。
考え方は以下の通りです。
・データのField2が「Field3=2であるField2」と「Field3=4であるField2」の両方を満たす
SELECT field2
FROM T_M
WHERE field2 IN (SELECT field2 FROM T_M WHERE Field3=2)
And field2 IN (SELECT field2 FROM T_M WHERE Field3=4)
GROUP BY field2
・データを集計したときにfield2=2のデータとfield2=4のデータをそれぞれ1...続きを読む

QAccess ファイルの整理

集計内容が複雑で色々な結果を出さないといけないデータベースを扱っています。
これをAccessで作ることになったのですが、クエリからでた計算結果の二重計算、
三重計算などをするので、ファイル数が膨大になっていきます。特にクエリの量が多いです。
種類ごとのフォルダ整理が出来れば便利なのですが、
その様な機能はないようなので、ファイル名で区別するしかありません。

皆様はどの様な仕分けをしていますか?
参考までに教えていただけると助かります。

Aベストアンサー

補足:

システム構築の要領ですが、テーブル定義書とクエリ定義書とをメモ帳等で作成する段階を最優先するというのも考え方の一つです。
この場合、この二つの定義書が完成するまではAccessを起動しての作業には着手する必要はほとんどないかも知れません。
更に、システムをバックエンドとフロントエンドに分割するとします。
当然のことながら、バックエンドは、テーブル定義書に基づいて一気に作成します。
こうすれば、dbの設計書を残すことが容易です。
クエリは、フォーム及びレポートの起動時に外部ファイルから読み込んでも瞬時のことです。
クエリとして表に出す数を少なくするには有効な手法だと思います。

' ------------------------------------------------------------
'
' QueryForForms.txt: Last update 2008/02/02 By XXXXXX
'
' ------------------------------------------------------------

[form name1]

Select * from tab1;

[form name2]

Select * from tab2;

それぞれのフォームでは、次のように仕掛けます。

Private Sub Form_Load()
Me.RecordSource = ReadeMyQuery(Currentpriject.Path & "\Query\QueryForForms.txt", Me.Caption)
End Sub

レポート関連のクエリも同様です。

このような仕組みですとフロントエンドはクエリ定義書と共に配布することも可能です。
フロントエンドはMDE形式で配布して高速処理を実現すると良いと思います。
この場合、フォームやレポートの設計書も残すことになり一石二鳥です。

少し、説明不足でしたので補足しておきます。

補足:

システム構築の要領ですが、テーブル定義書とクエリ定義書とをメモ帳等で作成する段階を最優先するというのも考え方の一つです。
この場合、この二つの定義書が完成するまではAccessを起動しての作業には着手する必要はほとんどないかも知れません。
更に、システムをバックエンドとフロントエンドに分割するとします。
当然のことながら、バックエンドは、テーブル定義書に基づいて一気に作成します。
こうすれば、dbの設計書を残すことが容易です。
クエリは、フォーム及びレポートの起動時に...続きを読む

Qmdb:2つのフィールドの内容が重複しているものをdistinctするには?

はじめまして、
次の様なテーブルがあったとします。
----------------------------------------
ID 都道府県 区    性別 選択
0001 東京   港区   男  A
0002 大阪   北区   女  B
0003 東京   港区   女  C
0004 大阪   北区   男  D
----------------------------------------
この中から「都道府県と区が同じ」レコードは重複としたものとみなして

----------------------------------------
ID 都道府県 区    性別 選択
0001 東京   港区   
0002 大阪   北区
----------------------------------------
のレコードを抽出したい様な時、はどのようなクエリを書けばよいのでしょうか?
Mircrosoft Accessを使用していますので、できればこれにも使用できる構文で教えていただければ助かります。

はじめまして、
次の様なテーブルがあったとします。
----------------------------------------
ID 都道府県 区    性別 選択
0001 東京   港区   男  A
0002 大阪   北区   女  B
0003 東京   港区   女  C
0004 大阪   北区   男  D
----------------------------------------
この中から「都道府県と区が同じ」レコードは重複としたものとみなして

----------------------------------------
ID 都道府県 区    性別 選択
0001 東...続きを読む

Aベストアンサー

----------------------------------------
ID 都道府県 区    性別 選択
0001 東京   港区   
0002 大阪   北区
----------------------------------------

のIDですが、0001 は
0001 東京   港区
0003 東京   港区
の小さい方ということでよいでしょうか?
また、「性別」、「選択」は不要ということでよいのでしょうか?
ということであれば、選択クエリーでメニューの「表示」→「集計」にチェック

フィールド:ID:都道府県 :区
集計   :最小:グループ化:グループ化

とし、プロパティの「固有の値」を「はい」にすればできると思います。

Qクロス集計クエリの結果を一時テーブルに保存する 

タイトルのような操作を求め下記のようなやり方を発見したのですが、なぜこのような2種類のクエリを作成しなければならないのかがわかりません。
2つのクエリの意味・役割をご存知の方がいらっしゃったら教えて下さい。
宜しくお願いします。

Q あるテーブルからクロス集計クエリを作成し、そのままそのクエリをテーブル作成クエリにしたところ、クロス集計が解除されてしまいます。クロス集計の結果をテーブルに保存することはできないのでしょうか

A クロス集計クエリを作成して、そのままそのクエリをテーブル作成クエリにすることはできないようです。
その場合は、クエリを2つ作成し2段階でテーブルを作成するようにします。
1つめのクエリではテーブルなどを基にしてクロス集計を行います。
2つめのクエリでは1つめのクエリを「テーブルの表示」一覧から「クエリ」タブに切り替えて選択してテーブル作成クエリとします。


参照:http://www.nbcom.co.jp/PC-Support/FAQ/acc/ht/acc092004ht001.shtml

タイトルのような操作を求め下記のようなやり方を発見したのですが、なぜこのような2種類のクエリを作成しなければならないのかがわかりません。
2つのクエリの意味・役割をご存知の方がいらっしゃったら教えて下さい。
宜しくお願いします。

Q あるテーブルからクロス集計クエリを作成し、そのままそのクエリをテーブル作成クエリにしたところ、クロス集計が解除されてしまいます。クロス集計の結果をテーブルに保存することはできないのでしょうか

A クロス集計クエリを作成して、そのままそのクエ...続きを読む

Aベストアンサー

下記のテーブルはマイクロソフトのサンプルDB「NorthWindow」をつかっています。

理由はSQL でクエリの内容を確認すればわかります。

クエリのデザインを開き たとえば「売上テーブル」を新たなテーブル(QTBL)に作成するためにテーブル作成クエリをデザインしたとしましょう。

SQLの結果は 

 SELECT 売上テーブル.* INTO QTBL
FROM 売上テーブル;

になります。

見てのとおり テーブルを作成するばあいは FROM のテーブルがすでに存在するテーブルあるいはクエリでないとエラーになります。

次にピボットテーブルですが

TRANSFORM Sum(売上テーブル.販売コード) AS 販売コードの合計
SELECT 売上テーブル.支店, 売上テーブル.販売日, 売上テーブル.個数, Sum(売上テーブル.販売コード) AS [合計 販売コード]
FROM 売上テーブル
GROUP BY 売上テーブル.支店, 売上テーブル.販売日, 売上テーブル.個数
PIVOT 売上テーブル.商品;

のような SQL が作成されます 。

テーブル作成クエリとピボット作成のクエリでは まったく別物なのです。

二つの処理に分けないと テーブル作成クエリはできません。

下記のテーブルはマイクロソフトのサンプルDB「NorthWindow」をつかっています。

理由はSQL でクエリの内容を確認すればわかります。

クエリのデザインを開き たとえば「売上テーブル」を新たなテーブル(QTBL)に作成するためにテーブル作成クエリをデザインしたとしましょう。

SQLの結果は 

 SELECT 売上テーブル.* INTO QTBL
FROM 売上テーブル;

になります。

見てのとおり テーブルを作成するばあいは FROM のテーブルがすでに存在するテーブルあるいはクエリでないとエラーに...続きを読む

QAccess MDB の フィールド プロパティー取得

テーブル(Access2000)のフィールドサイズ、フィールドタイプ等、フィールドの設計情報を取得したいのですが、どのようにすれば取得できるのでしょうか?

フィールド名は取得できるのですが、他のが取れませんでした。

Access2000のモジュール、若しくはVB6で回答して頂けるとうれしいです。

よろしくお願いします。

Aベストアンサー

 
> テーブル(Access2000)のフィールドサイズ、フィールドタイプ等、フィールドの設計情報を
> 取得したいのですが、どのようにすれば取得できるのでしょうか?
>
> フィールド名は取得できるのですが、他のが取れませんでした。

DAOのTableDefオブジェクトの以下の各プロパティを取得すればOKです。

 ・ Name
 ・ Type
 ・ Size
 ・ Attributes
 ・ Description

# ADOXを使う方法は調べていませんので、あしからず。


注意点としては、

(1) Descriptionプロパティ(Access のテーブルデザインで表示される「説明」部分に該当)は
  拡張(オプション)プロパティであり、設定されていない場合もある。
  設定されていない場合、プロパティにアクセスするとエラーになるので、エラー処理が必要。

(2) Typeプロパティは定数値を返すので、適切な語句に「翻訳」する必要がある。
  (下記を参照)


Public Function GetFieldTypeName(ByVal lngType As Long, ByVal lngAttr As Long) As String
'FieldオブジェクトのTypeプロパティを日本語表示に変換。
Select Case lngType
Case dbLong
GetFieldTypeName = "長整数型"
If lngAttr = dbAutoIncrField Then GetFieldTypeName = "オートナンバー型"
Case dbInteger
GetFieldTypeName = "整数型"
Case dbDate
GetFieldTypeName = "日付/時刻型"
Case dbText
GetFieldTypeName = "テキスト型"
Case dbCurrency
GetFieldTypeName = "通貨型"
Case dbBoolean
GetFieldTypeName = "Yes/No型"
Case dbSingle
GetFieldTypeName = "単精度浮動小数点型"
Case dbDouble
GetFieldTypeName = "倍精度浮動小数点型"
Case dbByte
GetFieldTypeName = "バイト型"
Case dbMemo
GetFieldTypeName = "メモ型"
If lngAttr = dbHyperlinkField Then GetFieldTypeName = "ハイパーリンク型"
Case dbLongBinary
GetFieldTypeName = "OLEオブジェクト型"
Case dbBinary
GetFieldTypeName = "バイナリ型"
Case dbGUID
GetFieldTypeName = "レプリケーションID型"
End Select
End Function
 

 
> テーブル(Access2000)のフィールドサイズ、フィールドタイプ等、フィールドの設計情報を
> 取得したいのですが、どのようにすれば取得できるのでしょうか?
>
> フィールド名は取得できるのですが、他のが取れませんでした。

DAOのTableDefオブジェクトの以下の各プロパティを取得すればOKです。

 ・ Name
 ・ Type
 ・ Size
 ・ Attributes
 ・ Description

# ADOXを使う方法は調べていませんので、あしからず。


注意点としては、

(1) Descriptionプロパティ(Access のテ...続きを読む

QAccessのクエリ実行について

すみません。ご存知でしたら、教えてください。
まず一点、基本(?)を確認させてください。

下記のように数個のテーブルとそれらを使用した数個のクエリがあったとします。
下記の場合に、もしどれかのテーブルを更新したとします。

その場合、アクセスを立ち上げて、クエリ3を実行するだけで、結果には反映されているのでしょうか?それとも、アクセスを立ち上げて、
クエリ1を実行し閉じ、クエリ2を実行し閉じ、最後にクエリ3を実行しないと、反映されていないのでしょうか?
---------------------------------------------------------
テーブルリンクA 、テーブルリンクB、テーブルリンクC、テーブルリンクD

↓↓

テーブルAとテーブルBでクエリ1(マッチング)を作成
テーブルCとテーブルDでクエリ2(マッチング)を作成

↓↓
クエリ1とクエリ2でクエリ3(マッチング)を作成
-------------------------------------------------

続いて、もし上記でいちいち途中のクエリを実行しないと、
最後のクエリに反映されない場合、すべてをACCESSを立ち上げたと同時に自動実行し、自動で最後のクエリ(この場合、クエリ3)をエクスポートしたいと考えています。可能でしょうか?

素人な質問ですみません。
何卒よろしくお願いいたします。

すみません。ご存知でしたら、教えてください。
まず一点、基本(?)を確認させてください。

下記のように数個のテーブルとそれらを使用した数個のクエリがあったとします。
下記の場合に、もしどれかのテーブルを更新したとします。

その場合、アクセスを立ち上げて、クエリ3を実行するだけで、結果には反映されているのでしょうか?それとも、アクセスを立ち上げて、
クエリ1を実行し閉じ、クエリ2を実行し閉じ、最後にクエリ3を実行しないと、反映されていないのでしょうか?
------------------...続きを読む

Aベストアンサー

クエリと言うのはテーブルから値をとってくる方法が書かれているだけのものです
クエリと言うデータセットがあるわけではありません

走らせるたびにその時のテーブルから値を取ってきます
テーブルを更新後走らせれば更新は反映されます

クエリを元にクエリを作った場合、もとのクエリを走らせなくても
最終段のクエリを走らせれば元になったクエリは裏で走ることになります

Q更新クエリでフィールドの値をコピーしたい

同一クエリの中に

ID 名 調子 コメント
1 山田 4  がんばろう
2 前岳 2  調子いいね
3 青木 2  いまいち

というレコードがあります。
山田の「調子」「コメント」を青木にコピーする
ボタンを作りたいとしたらどうやったらいいの
でしょうか?コピー&ペーストではなく・・・。

コピーするパターンは自由自在に
山田 -> 青木 以外にも任意でユーザが選べる
ようにしてあります。

なので、
前岳 -> 山田 というケースも考えられます。

○○ -> △△ という風に○○、△△は
クリックで選択できるようにしています。

いまはVBAとマクロのフィルタの実行を使い、

現在(○○)のレコードから値を抽出

マクロのフィルタを実行し、
△△を表示

VBAで該当フィールドに抽出した値を代入

という方法はできましたが、フィールドの数が
多く複雑になりそうなため、更新クエリでできない
ものかと考えました。

更新クエリでやるとしても○○のフィールドを
特定させ、△△のフィールドへSETすることが
どうやるべきか?です。

わかりにくい質問ではありますが、ご不明な点があれば
補足しますのでよろしくお願いします。

同一クエリの中に

ID 名 調子 コメント
1 山田 4  がんばろう
2 前岳 2  調子いいね
3 青木 2  いまいち

というレコードがあります。
山田の「調子」「コメント」を青木にコピーする
ボタンを作りたいとしたらどうやったらいいの
でしょうか?コピー&ペーストではなく・・・。

コピーするパターンは自由自在に
山田 -> 青木 以外にも任意でユーザが選べる
ようにしてあります。

なので、
前岳 -> 山田 というケースも考えられます。

○○ -> △△ という風に○○、△△...続きを読む

Aベストアンサー

>WHERE (((基本情報クエリ.ID)=[Forms]![基本情報フォーム]![kensaku_box1].[ListIndex]));
>検索ボックスを置きました。kensakubox1とkensakubox2です
リストボックスかコンボボックスか不明ですが
=[Forms]![基本情報フォーム]![kensaku_box1]
でそのボックスの連結列の値を参照することができます。
なのでkensakubox1の表示が例えばID・名前と表示している場合でプロパティの連結列が1に設定してあればクリックしたIDの値を持っていますので(1がIDで2が名前)
([基本情報クエリ].ID)=[Forms]![基本情報フォーム]![kensaku_box1]
で抽出できます。
なのでボックスの連結列がIDに対応するフィールドであれば
WHERE (((基本情報クエリ.ID)=[Forms]![基本情報フォーム]![kensaku_box1]));
で抽出できます。


人気Q&Aランキング

おすすめ情報