2

再び!そのため、現在、ボタンが押された後にプログラムでテーブル (Table2) を更新しようとしています。Table2 を別のテーブル (Table1) とまったく同じにしたいと考えています。Access では二重の関係が許可されておらず、二重の関係を作成する必要があるため、この作業を行っています。したがって、すべての連絡先情報を含む 2 つのテーブルを作成します。

Table2 を削除してから、Table1 の別のコピーを作成して Table2 として保存しようとしました。リレーションシップを確立したテーブルを削除しているため、Microsoft Access がエラーをスローしなかった場合、これはうまくいきます。そこで、プログラムで削除してから、適切な関係を作成しようとしました。ただし、これは面倒な作業であることがわかります。私の好みには少し退屈です。

次に考えたのは、2 つのテーブルの違いを自動的に検索し、それに応じて Table2 を更新する追加クエリを作成することです。問題は、そのような追加クエリの SQL ステートメントをどのように構成するかがわかりません。また、私が見逃している VBA を使用してこれを行う簡単な方法はありますか? よろしくお願いします。

4

2 に答える 2

3

このすべての問題に取り組む必要はありません。MSAccessでは二重の関係を持つことができます。リレーションシップデザインウィンドウに必要な回数だけテーブルを追加するだけで、Table1、Table1_1、Table1_2などが表示されますが、これらはすべてTable1の単なるエイリアスです。これで、自己結合と必要な数の関係を追加できます。

そのようです:

*People*
PersonID        *People_1*
ManagerID -- >   PersonID
于 2012-07-31T09:01:28.180 に答える
1

関係に反することなくfrom からTable1toを追加できるようです。Table2そうであれば、 を空にしてTable2、 からすべての行を追加できますTable1

Dim cn As Object
Set cn = CurrentProject.Connection
cn.Execute "DELETE FROM Table2"

Table2 に autonumber フィールドが含まれている場合は、そのシード値をリセットします。

cn.Execute "ALTER TABLE Table2" & vbCrLf & _
"ALTER COLUMN autonum_fld COUNTER(1, 1)"

次に、追加を行います...

cn.Execute _
"INSERT INTO Table2 (autonum_fld, text_field, long_int_field)" & vbCrLf & _
"SELECT autonum_fld, text_field, long_int_field" & vbCrLf & _
"FROM Table1;"

... または、2 つのテーブル構造が同一の場合は、フィールド名をリストする必要さえありません ...

cn.Execute "INSERT INTO Table2" & vbCrLf & _ 
"SELECT *" & vbCrLf & _
"FROM Table1;"

そして最後に ...

Set cn = Nothing

AFAICT、それはうまくいくかもしれません。ただし、「アクセスでは二重の関係が許可されていません」など、質問の背景の詳細​​がわかりません。だから私は完全に的外れかもしれません。

于 2012-07-31T04:34:06.543 に答える