• 締切済み
  • すぐに回答を!

テーブル内のレコードを別のテーブルに移す良い方法を教えてください

SQLサーバー7.0(ADO)とAccess97のVBAでアプリケーションの開発を行っております。SQLサーバー7.0(サーバー側)にあるテーブルの中身(レコード全件)をAccess97(ローカル)にあるテーブル(テーブル名とその中のフィールド名は全く同じだが中身はからっぽ)にまとめて移しかえる良い方法があれば教えてください。いま私はフォームオープンイベントでフィールドとレコードをループでまわして移しかえているのですが、テーブル数も多いため記述も長くなりますし、何よりもパフォーマンスが良くありません。テーブル単位で中身を別のテーブルに移す方法などがあれば是非教えてください。 (例) SQLサーバー(ホスト側)---テーブル名「T_社員マスター」フィールド数100項目、レコード数500件 ↓ ↓ フォームオープン時にそのまま移しかえたい ↓ ↓ Access97(端末側)-------テーブル名「T_社員マスター」フィールド数100項目、レコード数0件 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数735
  • ありがとう数4

みんなの回答

  • 回答No.3

私も同じ環境で逆のパターンをしています。(SQLServer→Access)その際使うのがSQLServerにあるDTS(データ変換サービス)です。高速にデータを変換してくれる上、パッケージ化しておけば、再度使いまわしができ、重宝しています。SQLServer→Accessの変換もできると思いますの1回試してみられたらどうでしょうか。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • ACCESSの既存テーブルに、EXCELデータをレコードとして追加する事は可能ですか?

    ACCESSの既存テーブルに、EXCELのデータをレコードとして追加する方法はありますか? 又は方法を説明しているサイト等ありましたら教えて下さい。 EXCELのデータは、シートの1行目に各項目名、2行目以降に各データが順次入力されている状態です。 尚、EXCELの項目名と、ACCESSのフィールド名は一致していない状態です。 例えば、 EXCELの項目名:「予約ID」、「予約名」、「予約日」 ACCESSのフィールド名:「rsv_id」、「rsv_name」、「rsv_date」 のような感じです。 ACCESSのフィールド「rsv_id」には、EXCELの「予約ID」項目のデータを入れなければいけません。 こういうことは出来るのでしょうか? ※マクロは使わないようにしたいです。 いったんACCESS上で、EXCELのデータを元に新規テーブルを作成してから、 その新規テーブルからデータを抽出して、既存テーブルにレコード追加するような、SQLを書けばできるでしょうか?

  • AXXESSでフォームに表示されているレコードを更新する方法

    いつもありがとうございます。 今回もACCESSの質問です。 顧客マスタを作成し、フォームからフィルターで抽出したレコードが画面に表示されています。 コマンドボタンを押す事でこのレコードの特定のフィールドを更新したいと考えています。 ADOでレコードセットをOPENし、FindしてUpdateする方法だとレコードの競合が発生してしまいます。 簡単にできる方法があるような気がしますが思いつきません。 どなたかお助けをお願いします。

  • 回答No.2
  • arata
  • ベストアンサー率49% (139/279)

SQLサーバーを良く知らないので、はずしているかもしれませんが、SQLでインサートしてはだめなのでしょうか? 通常、下記のようなSQLで、テーブルから抜いたデータを他のテーブルに追加することができます。 INSERT INTO 追加先のテーブル名 ( カラム名1,カラム名2,....) SELECT カラム名1,カラム名2,... FROM 追加元のテーブル名 WHERE 抜き出し条件 ACCESSで言うと追加クエリーですね。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • mnabe
  • ベストアンサー率33% (427/1283)

 残念ながらその方法しかありません。  バッチ方式でよければ、いくらか方法はあるのですが...ね。  そもそもなんで、SQLのデータをAccessにコピーするのか解りません。アタッチでは、パフォーマンスが悪いから駄目なのでしょうか?  バッチなら、SQLで常に決まった場所にCSV形式でデータを書出して、Access君はこのCSVを読込む用にすればいくらかは早くなります(多分)。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 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件ずつインポートする方法しか無いのでしょうか?

  • あるテーブルをそっくり別のテーブルに追加

    あるテーブルのレコードをそっくり別のテーブルに追加するSQLを教えていただけないでしょうか。 #フィールド名等はまったく同じです。 windows2000 access2000 です。

  • レコード更新時にデータ値を自動入力したい

    たびたびすみません。また詰まってしまったので教えていただけませんでしょうか。 Accessでレコード更新時にある項目に自動的に値を代入したいです。 前提としてテーブルは消費者マスターと単価マスターがあります。 単価マスターはフィールドとして単価ランク(主キー)と単価(通貨型)があります。 消費者マスターのレコードをフォームを使って編集する際に単価ランクをキーに 単価マスターから単価を引っ張ってきて 料金 というフィールドに代入して画面に表示し、 必要に応じて 料金 を画面から変更する形にしたいと考えてます。 どのように指定すればよいでしょうか? それからこれは別の質問にした方がいいかもしれませんが、差し支えなければ 教えて下さい。 レコードの更新の際に 更新日 というフィールドに当日日付を自動的に代入したいのですが どうすればいいでしょうか?

  • フォームで1レコード削除したのに表示は残ったまま更新されない

    Accessフォーム(表形式)に[削除]ボタンをつけました。 VBAで削除ボタン_Click()を書きました。 ADO接続 SQL発行し、該当レコード削除 (Delete from 予約 where 予約ID= me.予約ID ) というコードです。 削除後も、フォームにはレコードが見えたままなのですが、表示を更新するにはどうしたら良いのでしょうか? ----------------------------------- Set rs = Me.Recordset.Clone '' 予約テーブルからレコード削除処理 ... Me.Requery ----------------------------------- というやり方は、DAOだそうですね。 ADOではフォームのレコードソースを指定できないと参考書にありました。 しかし、DAOでは Delete SQL 発行の仕方がわからないので、できればADOで実現したいのです。 無理でしょうか?

  • 本テーブルに変更内容を反映する方法

    【Access 2013 VBA】 今、Workテーブルメイン、Workテーブルサブがあり、それをレコードソースにしたメインフォームとそのサブフォームがあります。 この画面で、サブの帳票のレコードを編集し、また、新規入力したものから 本になるテーブルのメインとサブに更新をする処理を作っています。 その更新先のレコードセットのSQLは以下のとおりです。 SQL = "SELECT " SQL = SQL & "[SubTable].*, " SQL = SQL & "[MainTable].* " SQL = SQL & "FROM [SubTable] " SQL = SQL & "LEFT JOIN [MainTable] ON " SQL = SQL & "[SubTable].[ID] = [MainTable].[ID]" この時、Recのフィールドの値を行進する時はいいのですが、 SubTableに新規レコードを追加する場合、 どのようにすれば良いのかわかりません。 普通にRec.AddNewとすると 上のMainTableにも新規レコードができるのでしょうか? よろしくお願いします。

  • ワークテーブル(ローカル)からDBサーバーへの更新について

    Access2003+PostgreSQLにて販売管理システムを構築しています。 レコードを見る・更新する時はサーバーのレコードを ワークテーブル(ローカルのmdbファイル内のテーブル)にコピーし 値を変更後、ローカルからサーバーにデータを戻す、といった処理をしたいと考えています。 サーバーからレコードをコピーする際は、ODBC接続&ADOにて サーバーのレコードを一旦レコードセットに格納し 「CurrentProject.Connection.Execute SQL文」で ワークテーブルにINSERTしています。 ここで質問なのが、ワークテーブルからサーバーにレコードを戻す際は ワークテーブル・サーバーへはそれぞれどの方法で接続すればいいでしょうか。 例えばサーバーへODBC&ADOで接続した場合、ワークテーブルの取扱方法(接続方法)が分かりません。 サーバー:ADO、ワーク:DAO、みたいな事するのでしょうか。 スマートな方法がお分かりの方は教えて下さい。 宜しくお願い申し上げます。

  • access・複数のテーブル・重複除外したデータ

    accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。 フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを 重複しないレコードとして抽出したいと思っています。 テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。

  • テーブルAにテーブルBのレコードをすべて追加

    いつもお世話になっております。 現在、テーブルAとテーブルB(エクセルのリンクテーブル)の2つのテーブルがあり、テーブルBのレコードをすべてテーブルAに追加するという追加クエリを作りました。 が、「0件が追加されました。」とメッセージが出てしまい、実際に追加することができません。 フィールド:国番号 テーブル:テーブルB 並べ替え: レコードの追加:テーブルA.国 抽出条件: 条件は以上のようなものを、各カラムについて書きました。 テーブルAとテーブルBが逆かな?と思い逆にもしてみましたが、同じ結果となりました。 そもそも追加クエリというのは、このような目的で使うものではないのでしょうか? どなたかご教授願います。 以上、よろしくお願いいたします。

  • 1テーブル内レコードの各フィールド値の差分チェック

    お世話になります。 現在、1テーブル内をログテーブル用として利用しています。 JSPでフォームを作成して各フィールド値を、 Webサイト画面上から変更可能なつくりにしており、 複数あるいずれかのフィールドの値を1つ以上変更してから、 [保存]ボタンを押下した際に、   ↓ その変更前のレコード1件と、 変更後のレコード1件を、 同じログ用テーブル内へフラグ(変更前:0、変更後:2)を それぞれ変えて、 INSERT INTOでレコードを計2件追加しています。 (あわせて、追加時のタイムスタンプをセットするフィールドもあるので、  どんどんレコードを追加可能な仕様です) そこでご質問なのですが、 この2つのレコードのみを比較して、 値が異なるフィールド名のみを、 (ときには複数フィールドにおいて値が異なるケースも有ります) SELECTなどで表示させるようなSQL文の 作り方をご存じの方がいらっしゃいましたら、 ぜひ教えてください。 なぜこのようなご質問をさせていただいたかと申しますと、 ログテーブル内の上記した2件のレコードを比較して、 どこのフィールドの値が変更されたか? を確認する際に利用したい為です。 (確認時には、phpMyAdminツールなどで直接SQL文をたたいて実行予定です) 以上、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブルからレコードを(在れば)検索し、更新する

    テーブルから、指定したレコードを検索し、(存在すれば)フォーム表示し、変更・更新できるようにしたい。存在しない場合は、その旨メッセージを表示し、処理を終える。 レコードの指定は、一意の正数値が入っているnoフィールドを用います。 スタンダードな質問で、初歩的かもしれませんが、悪戦苦闘しています。 Accessだけでは無理でしょうか? VBAでやれるでしょうか? 単体のAccessでは何がやれないのかが、よく分かっていないのです。だれか、HELP!