• ベストアンサー

Access2000におけるテーブル追加について

テーブル1にテーブル2の内容をすべて追加しようと思います。 二つのテーブルのフィールド項目は同じにしました。(テストなのでとりあえず番号と名前) マクロを使ってやろうと思い、アクションを「SQLの実行」とし、SQLステートメント には「INSERT INTO <テーブル1> SELECT<社員番号>,<名前>FROM<テーブル2>」 としました。 しかし、マクロを実行してみると「INSERT INTO 構文エラー」となってしまいます。 なぜなんでしょうか?

  • yke
  • お礼率10% (1/10)

質問者が選んだベストアンサー

  • ベストアンサー
  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.3

SQLステートメントを使用してすべてのフィールドおよびレコードをテーブル2からテーブル1へ追加するのであれば、 INSERT INTO テーブル1 SELECT * FROM テーブル2; と書けば可能なはずです。 また、フィールドを指定する場合には INSERT INTO テーブル1 SELECT テーブル2.社員番号,テーブル2.名前 FROM テーブル2; か、 INSERT INTO テーブル1 (社員番号,名前) SELECT テーブル2.社員番号,テーブル2.名前 FROM テーブル2; と書けば可能なはずです。 宜しければ試してみてください。

その他の回答 (3)

  • Sarukan
  • ベストアンサー率55% (41/74)
回答No.4

フォームのボタンを押したらテーブル2のレコードをテーブル1に追加したい場合、ボタンのアクションを直接「クエリーの実行」にして、テーブル2を元にした追加クエリーを作成するのが一番早いです。マクロやVBAモジュールを使用する必要は特にありませんし、逆に動作が遅くなる事もあります。

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

素直に追加クエリーを書くほうが良いとは思いますが... 追加クエリーの作り方 1.クエリーを新規作成します。   この時選択するテーブルはテーブル2 2.クエリーの種類を"追加"に変更します。   メニューの「クエリー」-「追加」 3.追加先テーブルにテーブル1を指定します。 4.追加したいフィールドを選択します。 あとはこのクエリーを「!」で実行すれば追加可能です。 ただ、 insert into table1 select * from table2 または insert into table1 (col1,col2,...) select col1,col2,... from table2 のクエリーで追加は出来るはずです。

  • sydneyh
  • ベストアンサー率34% (664/1947)
回答No.1

同じ内容にしたいのなら、単にコピー&ペーストじゃダメなんでしょうか。 テーブルごとも出来ると思うし、フィールド選択でも出来ると思いますが。

yke
質問者

補足

フォームからコマンドボタンをクリックするとテーブルが追加されるというふうにしたいのです。 VBAで書こうと思ったのですが、初心者なのでわからないことが多すぎます。 だから、マクロやクエリでできないのかなと思ってやってみてます。 できることならVBAでやってはみたいのですが・・・。

関連するQ&A

  • ACCESSプロジェクトで追加

    AccessプロジェクトのSQL文を試しています。 次の内容を実行した時、 TEST02 のテーブルの 読込データ に AA という文字を入力しようとしています。 begin insert into TEST02 (読込データ), VALUES ('AA') end 保存しようとした時、ADOエラー:行~:","の近くに 無効な構文があります。 というメッセージが出てきます。 何がおかしいのでしょうか?

  • accessでテーブル作成時に出る型変換エラー 

    教えてください。 アクセスでテーブルを作成するとき、 (select 名前 from 名前テーブル into new名前 みたいな構文です)型変換エラーが出てしまっています。 (実際には名前とかではないです・・) おそらく数字のフィールドとかが混在しているからだとは思うのですが、 intoでテーブル作成するとき、型はどのように指定したらいいのでしょうか? 教えてください。

  • アクセスの追加クエリについて

    二つのテーブル間(AとB)を追加クエリを使い AからレコードをBに追加することは出来たんですが、 逆にBからAにレコードを追加しようと選択クエリを追加クエリに変更しようとしたんですが、ウィザードの追加先テーブル名にAのテーブル名が表れないですがその理由が全く分からないので分かる方教えていただけませんか? AとBのレコード内のフィールドは同じです。 AからBにレコードを移行する処理としてマクロを使いアクションとして ・クエリを開く(これは追加クエリです) ・SQLの実行(上と同じクエリを削除クエリに変更し、そのSQL文をSOLステートメントに貼り付けました) 上の処理は問題なく出来たので逆のBからAへレコード移行処理のマクロを作ろうとしたのですが、追加クエリの追加先テーブルにテーブルAの名前が出てこないので困っています。こういったAからB。BからAという処理は追加クエリで出来ないのでしょうか?

  • Access、SQLステートメントでの仮テーブルの作り方について

    AccessのSQLステートメントで仮テーブルを使ったSQLを作りたいのですが、構文の書き方がよくわかりません。 わからないなりに以下のようなSQL文を作ってみたのですが、 SELECT TBL.NO FROM [SELECT NO FROM ○○TBL WHERE △△="△△" GROUP BY NO HAVING (Mid(××,2,1)="K") ]. AS TBL; (本当はWHEREのあとにANDがたくさんあります) 実行すると、 「パラメータや別名が正しいこと、無効な文字や区切り記号が含まれていないこと、または名前が長すぎないことを確認してください。」 とメッセージが出ます。 仮テーブルに長いSELECT文をつかうことはできないのでしょうか? ちなみに環境はOS:Win2000+Access2000です。 どなたかアドバイスください。 よろしくお願いします。

  • accessの SQL文 INSERT命令

    次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

  • JDBC:ODBCでaccess db にデータをInsertするとき、構文エラーがでました

    insert into InMoneys(Source,Money) values('1',99) java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO ステートメントの構文エラーです。

    • ベストアンサー
    • Java
  • accessのSQL文で

    SELECT 科目Aテーブル.学生番号, 名簿テーブル.氏名, 科目Aテーブル.成績 INTO 科目Aテーブル2 FROM 名簿テーブル INNER JOIN 科目Aテーブル ON 名簿テーブル.学生番号 = 科目Aテーブル.学生番号; (これはテーブル作成クエリによるもの) と表示されたのですが SELECT ~ INTO ~ FROM ~ ON ~ ; のような構文はSQLにあるのでしょうか? ACCESS独自の拡張でしょうか? SELECT ~ INTO とSELECTにINTOがつく構文をインターネットで探したのですが見つかりません

  • INSERT INTO table(DATE) VALUES('20090101')ができません。

    初めましてご教授よろしくお願いします。 Accessにレコードを追加しようとしているのですがうまくいきません。 どうもDATEというフィールドにテキスト型の'20090101'を入れようとするのがいけないみたいです。 予約語だからDATEのフィールド名を変えた方がいいことはわかっているのですが、お客様がテーブルを作成しているので変更することができません。 お客様いわくテキスト型で入るというのですがどうすれば入るのでしょうか? ちなみにDATEフィールドはテキスト型です。 エラー内容は「INSERT INTO ステートメントの構文エラーです。」と表示されます。

  • Access にて DISTINCROW を使用した INSERT SELECT

    お世話様です。 Access2003 VBAにて、DoCmd.RunSQLを使用してSQL文を流す際、 普通のINSERT-SELECT文はOKですが、 そのSELECT文にDISTINCROW句を使用していると、 数百件程度のSELECT結果しかINSERTできません。 本当は数千件のSELECT結果をINSERTしたいのですが、 これを実行した場合、エラーにもならず、1レコードもINSERTされません。 ためしに、DINSTINCTROWではなく、SQL文を変更してDISTINCTにしてみたところ、 2000件以上でもINSERTできました。 DISTINCROW句を使用して数千件でもINSERTできる方法はあるでしょうか? ちなみにSELECT単体ですと、DISTINCTROWを使用していながら、 数千件でも結果を表示できます。 SQL例: str_SQL = " INSERT INTO 結果テーブル(フィールド1, フィールド2, フィールド3)  SELECT DISTINCTROW A.項目1, A.項目2, B.項目1  FROM テーブル1 A, テーブル2 B  (WHERE句はあってもなくても現象変わらず)  ORDER BY A.項目4 ASC, A.項目5 ASC " DoCmd.RunSQL (str_SQL) よろしくお願いいたします。

  • ACCESS テーブルのレコードを全て移動

    ACCESS VBA を使って処理を行っております。 原因が分からず困っております。 結果テーブル  フィールド名 monoID,monona,inkosuu,outkosuu,nowkosuu 取込テーブル  フィールド名 物ID,物名,現在個数 今までフォームに表示させて一件づつ手入力にて処理しておりましたが、複数人で作業できるように修正している所です。 ○各々がExcelに収集したデータをCSVにて「取込テーブル」にインポート   ↓ ○「取込テーブル」のレコードを集約しデータ整合(ここまでは出来ています)   ↓  ○「取込テーブル」の全レコードを「結果テーブル」にインポート DIM SQL001 AS String SQL001 = "INSERT INTO 結果テーブル (monoID,monona,nowkosuu) SELECT (取込テーブル.物ID,取込テーブル.物名,取込テーブル.現在個数) FROM 取込テーブル CurrentDb.Execute SQL001 これで動作させるとエラーになります。 ただ、実験で SQL001 = "INSERT INTO 結果テーブル (monoID) SELECT (取込テーブル.物ID) FROM 取込テーブル の様に一つのフィールドだけにすると全てのレコードをインポートすることが出来ます。 何か凡ミスの様な気もするのですが、取込テーブルをレコードセットとし1件ずつインポートする方法しか無いのでしょうか?