追加クエリを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が見つからない時は、教えて!gooで質問しましょう!

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

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

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

Q追加クエリに選択クエリを組み合わせた場合の動作について

お世話になります。
以前のご回答、ありがとうございました。
また、新たな問題に直面しましたので、アドバイスをお願いいたします。

選択クエリをまず設定し、選択クエリで選択したデータを追加したいと考えています。
選択クエリはテキストボックスから値を取得して、任意の1つに絞っています。
同様に、追加クエリも任意の1つに絞っています。
個々の同様問題ないのですが、2つのクエリを合わせると、選択クエリでどうやらデータを取得できず、「パラメータの入力」が出てしまいます。
これはなぜでしょうか。
先に選択クエリを実行して、追加クエリを実行しても、「パラメータの入力」が出てしまいます。
この方法はダメなのでしょうか。

▼クエリの内容
・選択クエリ
SELECT
機材貸出履歴.患者番号,
機材貸出履歴.機材名,
機材貸出履歴.機材コード,
機材貸出履歴.整理コード,
機材貸出履歴.[シリアルNo]
FROM
機材貸出履歴
WHERE
(((機材貸出履歴.患者番号)=[Forms]![フォーム_機材貸出履歴]![患者番号のテキストボックス]));


・追加クエリ
INSERT INTO 患者履歴
(
患者番号,
患者名,
患者名フリガナ,
機材名,
機材コード,
整理コード,
シリアルNo,
貸出日,
返却日
)
SELECT
[Forms]![フォーム_機材貸出履歴]![患者番号のテキストボックス] AS 式1,
[Forms]![フォーム_機材貸出履歴]![患者氏名のテキストボックス] AS 式2,
[Forms]![フォーム_機材貸出履歴]![フリガナのテキストボックス] AS 式3,
[追加クエリ_中間クエリ_機材一覧]!機材名 AS 式6,
[追加クエリ_中間クエリ_機材一覧]!機材コード AS 式7,
[追加クエリ_中間クエリ_機材一覧]!整理コード AS 式8,
[追加クエリ_中間クエリ_機材一覧]![シリアルNo] AS 式9,
[Forms]![フォーム_機材貸出履歴]![貸出日のテキストボックス] AS 式4,
[Forms]![フォーム_機材貸出履歴]![返却日のテキストボックス] AS 式5;

お世話になります。
以前のご回答、ありがとうございました。
また、新たな問題に直面しましたので、アドバイスをお願いいたします。

選択クエリをまず設定し、選択クエリで選択したデータを追加したいと考えています。
選択クエリはテキストボックスから値を取得して、任意の1つに絞っています。
同様に、追加クエリも任意の1つに絞っています。
個々の同様問題ないのですが、2つのクエリを合わせると、選択クエリでどうやらデータを取得できず、「パラメータの入力」が出てしまいます。
これはなぜでし...続きを読む

Aベストアンサー

Access によりパラメーター値の入力が求められるのはなぜですか?
https://support.office.com/ja-jp/article/Access-%E3%81%AB%E3%82%88%E3%82%8A%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E5%80%A4%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%8C%E6%B1%82%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B-a7344543-e758-4785-8433-420eb0f0b48e

とりあえずこちらで原因を調べてみて下さい。

Qoracleで別のグローバルデータベースのテーブルからPL/SQLでデータをinsertする方法。

こんにちは。

別の場所に設置してあるoracleのデータベースからinsert文でデータを引っ張って来れないかと思っています。

ご存知の方いらっしゃれば宜しくお願い致します。

内容:
ここのoracleです。
グローバルデータベース名:testa.ok.com
(データベース名:testa)
スキーマ名:output
テーブル名:名称マスタ
項目内容:番号、名前
ユーザ名:tosi
password:tosi

あっちのoracleです。
グローバルデータベース名:testb.ok.com
(データベース名:testb)
スキーマ名:input
テーブル名:名称マスタ
項目内容:番号、名前
ユーザ名:tosi
password:tosi

PL/SQLで出来ないものでしょうか?
宜しくお願い致します。

Aベストアンサー

こんにちわ。

データベースリンクを使用すれば可能です。
まず、あっちのデータベース (testb.ok.com) に接続
するための接続文字列をtnsnames.ora に定義します。
→ sqlplus tosi/tosi@接続文字列 でtestb.ok.com
  に接続できる事を確認して下さい。

次にtesta.ok.com 側にデータベースリンクを作成します。
Create database link DBリンク名
 connect tosi identified by tosi using '接続文字列';
→ select ~ from input.名称マスタ@DBリンク名
  where ~
 で、データベースリンク経由でデータにアクセスできること
 を確認して下さい。

後は、SQL 文 (PL/SQL でも可) の中で
Insert into 名称マスタ select * from
 input.名称マスタ@DBリンク名 where ~;
とすれば、Ok です。

QACCESS クエリのデザインビューを開かせたくない。

管理者以外がクエリをデザインビューで開けないように設定したいのですが、セキュリティーの設定では、「構造の読み取り」にチェックを入れる必要があるので、クエリの抽出条件等が参照されてしまいます。(フォームを単票形式にしており、開いているフォームのページのID番号をクエリの抽出条件とし、レポートにその番号の内容のものだけが反映されるよう設定しています。また自分が作った関数の式を見られたくないのです。)クエリの条件がきちんとレポートに反映し、なおかつクエリをデザインビューで見れなくする方法はありますか。(「隠しオブジェクト」にするのは、なしです。ただ、隠しオブジェクトにしてもユーザーは「隠しオブジェクト」の設定ができないのであればありです。)
 プログラムを組むしかないのでしょうか?そうであればどんな感じで組めばいいのか教えてください。

Aベストアンサー

> クエリの条件がきちんとレポートに反映し、

クエリとして保存せずに、レポートのレコードソースでSQL文を使ってやるとか。

レコードソースプロパティで右側の ... をクリックすれば、クエリビルダが
起動しますので。

QAccessのクロス集計クエリから、追加クエリをvbaで記述したいが記述が分からない。

Windows7のAccess2007を使っています。
Accessのクロス集計クエリから、追加クエリをvbaで記述したいが記述
が分からない。

vbaを使わなければ、データベースウインドウで最初にクロス集計のク
エリを作って、そのクエリを使って追加クエリを作れば終わりですが。
これと同じ事をvbaで記述をしたいのですが。

出来るのでしょうか。

例として、収穫テーブルとサイズテーブルのクロス集計を作ると仮定し
て下記の構造で作る物とします。
収穫テーブルは下記の構造です。
1. idと言う名前でオートナンバーの型
2. サイズと言う名前で数値の型

サイズテーブルは下記の構造とします。
1. idと言う名前でオートナンバーの型
2. 名前と言うフィールドの名前でテキストの型

収穫のテーブルは下記のデータが入っています。
ID サイズ
1 1
2 2
3 2
4 2
5 1
6 2
7 3

サイズのテーブルは下記のデータが入っています。
ID 名前
1 大
2 中
3 小

リレーションシップは、一側のテーブルがサイズのテーブルで、idを主
キーとします。多側のテーブルは、収穫のテーブルで多側のキーはサイ
ズです。

ここで、クエリ1の名前で
TRANSFORM Count(収穫.ID) AS IDのカウント
SELECT 収穫.ID
FROM サイズ INNER JOIN 収穫 ON サイズ.ID = 収穫.サイズ
GROUP BY 収穫.ID
PIVOT サイズ.名前;

を実行すると、下記が得られます。
ID 小 大 中
1 1
2 1
3 1
4 1
5 1
6 1
7 1

ここで、クエリ1を使って下記のクエリ2を作ります。
INSERT INTO table1
SELECT クエリ1.*
FROM クエリ1;

上記の操作でクエリ1のクロス集計クエリを使って
クエリ2の追加クエリと言う二つの手段で
クロス集計からデータを作る事が出来ます。

この操作をvbaの手法で作る方法は無いのでしょうか。
この例でのコードの記述を宜しくお願いします。

Windows7のAccess2007を使っています。
Accessのクロス集計クエリから、追加クエリをvbaで記述したいが記述
が分からない。

vbaを使わなければ、データベースウインドウで最初にクロス集計のク
エリを作って、そのクエリを使って追加クエリを作れば終わりですが。
これと同じ事をvbaで記述をしたいのですが。

出来るのでしょうか。

例として、収穫テーブルとサイズテーブルのクロス集計を作ると仮定し
て下記の構造で作る物とします。
収穫テーブルは下記の構造です。
1. idと言う名前でオートナ...続きを読む

Aベストアンサー

こちらが参考になるでしょう。
http://www.accessclub.jp/bbs6/0008/das1904.html


おまけ、上記を参考にした
一応動作するコード。

Dim strSQL As String
strSQL = "INSERT INTO table1 " & _
   "SELECT Q.* " & _
   "FROM [" & _
   "TRANSFORM Count(収穫.ID) AS IDのカウント " & _
   "SELECT 収穫.ID " & _
   "FROM サイズ INNER JOIN 収穫 ON サイズ.ID=収穫.サイズ " & _
   "GROUP BY 収穫.ID " & _
   "PIVOT サイズ.名前 " & _
   "IN ('大','中','小')" & _
   "]. As Q"
Debug.Print strSQL
CurrentDb.Execute strSQL

Q昔長い黒髪が美人の条件であった理由は?

昔の日本では、艶のある長い黒髪が美人の条件だったそうです。
どうしてそうなったのでしょうか?
髪などは二の次でやっぱり顔でしょう。
日本独自のものですか、それとも中国の影響があるのでしょうか?
よろしくお願いします。

Aベストアンサー

そもそも顔が見えないからこその髪です。
特に平安時代の女性は下女でもない限りは扇で顔を隠して父親以外の男性には顔を見せませんでした。
美人かどうかを判断するのに使われたのが几帳や御簾から覗く黒髪です。

QAccess VBA 抽出したレコードをフィールドを増やして別テーブルに追加する方法

2つのクエリーで抽出したレコードを結合し、そのレコードにID番号をつけて別のテーブルに追加することはできないでしょうか?

1枚のガラスの値段表を作りたいと考えています。

使用するテーブルは、1つ目がサイズ表でサイズ番号と2つの辺の長さの3つのフィールドからできています。2つ目はガラスの種類表で種類番号と種類名の2つのフィールドでできています。3つ目は値段表で上の2つの表の5つのフィールドにID番号と値段の2つのフィールドがあり全部で7つのフィールドです。

いま、フォームにサイズ表と種類表のサブフォームをつくり、それぞれ結合したいレコードを表示させています。そこからフォームに値段を入力し登録ボタンをクリックすると値段表に新しいレコードを追加するような登録ボタンを作りたいです。

簡単な例でも構いません。
VBAがわかる方、教えてください。

Aベストアンサー

ウーン!チクッと無駄で複雑な仕組みを作り上げようとしています。
例えば、

<Table1>

ID  Data1
1   A
2   B

<table2>

ID  Table1_ID Table3_ID  Data1
1   1     1      XX
2   1     1      YY

<Table3>

ID  Price
1   \1,000
2   \2,000

という設計であれば、ノープログラミングで目的を達成できます。

<クエリ1>

ID  Table1.Data1  Table2.Data1  Price
1   A        XX      \1,000
2   A        YY      \1,000

SELECT Table2.ID, Table1.Data1, Table2.Data1, Table3.Price
FROM Table1 RIGHT JOIN (Table2 LEFT JOIN Table3 ON Table2.Table3_ID = Table3.ID)
ON Table1.ID = Table2.Table1_ID;

正に、この<クエリ1>が「1枚のガラスの値段表」です。

****************************************************************

なお、質問に即答すれば、

Private Sub コマンド0_Click()
  Dim strInsertSQL As String

  strInsertSQL = "INSERT INTO Table3 (ID,Price) Values (3,3000)"
  CnnExecute(strInsertSQL)
End Sub

と、SQLのINSERT文を作成し実行すれば可能です。

CnnExecute()については、要求があれば示します。

ウーン!チクッと無駄で複雑な仕組みを作り上げようとしています。
例えば、

<Table1>

ID  Data1
1   A
2   B

<table2>

ID  Table1_ID Table3_ID  Data1
1   1     1      XX
2   1     1      YY

<Table3>

ID  Price
1   \1,000
2   \2,000

という設計であれば、ノープログラミングで目的を達成できます。

<クエリ1>

ID  Table1.Data1  Table2.Data1  Price
1   A        XX      \1,000
2   A...続きを読む

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

QSQLローダーで複数のCSVファイルのデータを一つのテーブルにInsertしたい

お世話になります、
以下のようにデータをSQLLDRでインサートしようと思っているのですが、複数のCSVファイルのデータを一つのテーブルにInsertしたい場合にどのようにすればいいか教えてください。

--バッチファイル
sqlldr userid=fmwuser/fmwuser@fmw001 control=ctl/AUTHORITY.CTL log=section1.log data=csv/AUTHORITY.csv

--CTLファイル
LOAD DATA
TRUNCATE
INTO TABLE AUTHORITY
FIELDS TERMINATED BY ','
( AUTHORITYCODE ,AUTHORITYNAME,EXECUTIVE)

CTLファイルでTRUNCATEを付けるとテーブルを初期化してからインサートするからむりですよね...
TRUNCATEをはずすと、データが入っているテーブルに対してSQLLDRは使用できないと怒られるし...

CSVファイルを一つにまとめるしかないのでしょうか?

お世話になります、
以下のようにデータをSQLLDRでインサートしようと思っているのですが、複数のCSVファイルのデータを一つのテーブルにInsertしたい場合にどのようにすればいいか教えてください。

--バッチファイル
sqlldr userid=fmwuser/fmwuser@fmw001 control=ctl/AUTHORITY.CTL log=section1.log data=csv/AUTHORITY.csv

--CTLファイル
LOAD DATA
TRUNCATE
INTO TABLE AUTHORITY
FIELDS TERMINATED BY ','
( AUTHORITYCODE ,AUTHORITYNAME,EXECUTIVE)

CTLファイルでTRUNCATEを付けると...続きを読む

Aベストアンサー

No.1のyujiさんが述べているとうりですが、もう少しヒントをあげます。

・コントロールファイルで、"truncate"ではなく"append"を使うこと。
・コントロールファイルに、"infile"で読み込み対象のファイルを指定。
 "infile"は1コントロールファイルに複数記述できます。

あとは、Oracleのマニュアルをよく読むこと!
マニュアルをよく読めば、この程度のことは全て説明が記載されています。

Qアクセス削除クエリ「複雑すぎてできません」のエラー

テーブルA(フィールド40個)があります。
削除クエリで、From *Aテーブル(すべて)
フィールド30個 について Where  0 (数字ゼロ)
の条件を入れます。
これを実行すると「クエリが複雑すぎてできません」が
でてきます。
フィールド30個についてすべて0のレコードを削除したいのです。
どういう条件を入れればいいでしょうか?

Aベストアンサー

こちらで、とりあえずフィールド31個のテーブルを作成し、30フィールドに「0」のWhere条件を指定した削除クエリを実行してみましたが、問題なく削除されました。

ですので、とりあえず、今あるテーブル(データを含む)とクエリを新規mdbファイルにコピーした上で、Where条件を指定するフィールドを10個にしたクエリを3つ作り(→1つ目のクエリでフィールド1~10個目、2つ目はフィールド11~20個目、3つ目はフィールド21~30個目、というように)、この3つのクエリをそれぞれ実行してみて下さい。
(但し、実際には「○件のレコードが削除されます」のメッセージが出たら「いいえ」を選択して削除を回避)

これで同じエラーが出るクエリがあったら、そのクエリで指定している条件に間違いがあると推測できます。
その場合は、そのクエリをデザインビューで開き、メニューで「表示(V)」→「SQLビュー(Q)」をクリックしてSQL文を表示させ、それをここに貼り付けて、どこが間違っているかを聞かれるのがよいと思います。
(もちろん、わかる範囲でしたら私もお答えします)

それと、全てで数字の0を指定されているとのことですが、テーブルでの各フィールドのデータ型の設定は数値型になっているのでしょうか?(テキスト型の場合、条件式には「0」ではなく「"0"」と指定)
(もっともここが違う場合は、「データ型が違います」という今回の質問とは違うエラーメッセージになるはずとは思いますが)

こちらで、とりあえずフィールド31個のテーブルを作成し、30フィールドに「0」のWhere条件を指定した削除クエリを実行してみましたが、問題なく削除されました。

ですので、とりあえず、今あるテーブル(データを含む)とクエリを新規mdbファイルにコピーした上で、Where条件を指定するフィールドを10個にしたクエリを3つ作り(→1つ目のクエリでフィールド1~10個目、2つ目はフィールド11~20個目、3つ目はフィールド21~30個目、というように)、この3つのクエリをそれぞれ実行してみて下さい。
(但し、実際には...続きを読む

QAccessの追加クエリで既存のテーブルに上書き追加をしたい

追加クエリを使用して既存テーブル(マスタテーブルとして使用)に「情報追加+変更箇所上書き」の作業をしたいと思うのですが、型変換エラー(キー違反)となってしまします。解決方法をご存知の方がおられましたら、ご教示願えればと思います。

Aベストアンサー

既存のキーをレコードの追加はできません。
存在する部分は、更新クエリーで処理します。
存在しない場合は、追加クエリーで追加します。
追加クエリーの対象は、不一致クエリーで対象を把握できます。


人気Q&Aランキング

おすすめ情報