• 締切済み

レコードセットの値を一気にDBに

access2007で開発しています。 レコードセットのデータをDBのテーブルに一気にいれる方法はないのでしょうか? 調べたところレコードセットをMOVENEXTで一件ずつ読込み、インサート文をなげている例はあったのですが、一気にいれる方法は見当たりませんでした。 さらにいうと元々はSQLで insert into テーブル1(・・・) select ・・・from テーブル2 としたかったのですが、executeすると´3065´選択クエリを実行できません´のエラーとなってしまいました。 すいませんが、ご教唆ねがいます。

みんなの回答

回答No.2

残念ながらパススルークエリを投げたことはありません。 別途質問を立ち上げてみてください。 (カテゴリは、その他データベース辺りが適当かと思います) 少しGoogleってみて、 パススルークエリができているとしてクエリ名が、『PQ』だったとしたら sSql="INSERT INTO テーブル1 ( フィールド1, フィールド2 )" _ & " SELECT フィールド1, フィールド2" _ & " FROM テーブル;" を sSql="INSERT INTO テーブル1 ( フィールド1, フィールド2 )" _ & " SELECT * FROM PQ;" で出来そうな気がしますが果たして? レコードセットは DAOだと↓で取得できる模様 http://ubuntuexpert.blogspot.jp/2011/10/access.html

sho-birdie18
質問者

お礼

お礼がおそくなり、申し訳ありません。ご回答頂きありがとうございました。 一応、現在の結果をお伝えすると、 いろいろ試しましたがパススルーでサーバーから取得した値をローカルテーブルに一回のSQLで入れることはできませんでした。 一度レコードセットに入れてからローカルテーブルに入れますが、それもいっきにする方法はなく、一行ずつINSERTをなげる方法で解決しました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

追加クエリで行うには考慮すべき点が幾つか。 テーブル1と2は同じデザインか ・フィールドの並び順 ・データ型 オートナンバー型のフィールドがあるか インデックスに、はい(重複なし)のフィールドがあるか (テーブル1と2で重複しないのなら考慮の必要はありません) 2→1に追加するフィールドは全てなの。 それから…教唆は悪事をそそのかす意味ですので教示が適切かと。 追加クエリのSQL文の基本形は INSERT INTO テーブル1 ( フィールド1, フィールド2 ) SELECT フィールド1, フィールド2 FROM テーブル; のような感じになるので dim sSql as string sSql="INSERT INTO テーブル1 ( フィールド1, フィールド2 )" _ & " SELECT フィールド1, フィールド2" _ & " FROM テーブル;" debug.print sSql currentdb.execute sSql,dbfailOnerror のようにしてみると?

sho-birdie18
質問者

補足

ご回答頂きありがとうございます。 ご回答頂いた内容でできました。 できたのですが、 その後新たな要求で、パススルークエリでデータを取得して仮のテーブルにデータを入れる必要が出てきました。 取得とINSERTを分けなければ行けないと思うのですが、一つ目の質問に戻って、レコードセットの値をテーブルに登録するには一行ずつINRERT文を投げなければダメなのでしょうか? 再びすいません。ご教示ねがいます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQLのDateTimeにPHPで値セットは?

    初歩的な質問ですみません。 MySQLにとあるテーブルがあって、 その中に 更新日時 という DATETIME 型のフィールドがあるのですが、 insert でレコードを追加する際にそこに現在日時をセットしようとして、 恥ずかしながらその方法がわかりません。 $sql = sprintf('INSERT INTO %s SET %s="%s", %s="%s"',         'tmp',         'mailAddr', e($mailAddr),         'update', date('Y/m/d H:i:s')); mysql_query($sql); とか、 $sql = sprintf('INSERT INTO %s SET %s="%s", %s=cast(now() as datetime)',         'tmp',         'mailAddr', e($mailAddr),         'update'); mysql_query($sql); とか、いろいろ調べて試してみたんですけど...。 上記のように、insert into xxx set~ を使う場合を知りたいです。 すみません。 よろしくお願いします。

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

  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • レコードセットについて

    ACCESSを勉強中のものです。 レコードセットの意味がよくわからないのですが テーブルやクエリの事を「レコードセット」と言うのでしょうか?

  • 一気に複数のレコードをinsertする方法について

    SQLのinsert文で一気に複数のレコードを挿入する方法ってありますか? SQL*LoaderとPL/SQL以外でお願いします。

  • レコードセットに新規追加する

    Access2013 VBAで ■テーブルa ・id ・名前 ・id2 とあり このテーブルのレコードセットを以下のように作ります。 dim Rec = dao.Recordset Set Db = CurrentDB set Rec = Db.OpenRecordset("Select * from [テーブルa] where id2 = " & 2, dbOpenDynaset) この時、このテーブルにid2=2のレコードが何もない場合、この生成したRecで、 Rec.AddNew Rec.Fields("名前").value = "名前" Rec.Update と出来ますでしょうか? よろしくお願いします。

  • Access クエリでレコードセット作成

    Access2010でVBAを勉強しています。クエリオブジェクトからレコードセットを作れるかお教えください。 クエリのデザイン作成で3つのテーブルからデータを抽出するクエリを作りました。 このクエリオブジェクトからレコードセットを作りたいと思っていますが、作り方がわかりません。 よってクエリオブジェクトのSQLビューでSQLを確認し、VBAの中で下記のようにSQLを作ってレコードセットを作っています。 これだと効率が悪いので、クエリオブジェクトから直接レコードセットがつくれないかと思っています。 方法がありましたらお教え下さい。よろしくお願いします。 strSQL = "SELECT master.[サイズ], master.単価," strSQL = strSQL & "Nz([入庫数量の合計])-Nz([出庫数量の合計]) AS 在庫数" strSQL = strSQL & " FROM (master LEFT JOIN Q_出庫 ON master.[サイズ] = Q_出庫.[サイズ])" strSQL = strSQL & " LEFT JOIN Q_入庫 ON master.[サイズ] = Q_入庫.[サイズ]" objADORS.Open "T_出庫", objADOCON, adOpenDynamic, adLockOptimistic

  • php db 文字化け

    文字コードEUC-JPで開発しています。 題名の通り文字化けします。 どうやらDBからselectやinsertしたときに文字化けをするようです。 selectですと文字化た値が取れますし、 insertでは文字化けするためinsertできずエラーとなります。 sql直前で mysql_query("set names EUC-JP"); も行っています。 テーブルの文字コードはオプションで eucjpms -- UJIS for Windows Japanese としています。 個別に該当カラムもそうしています。 何がまずいでしょうか?

    • 締切済み
    • PHP
  • DBでAUTO_INCREMENTのフィールドの最新の数値を知るには

    PHP+MySQLで開発しています。 自らがDBテーブルに書き込んだレコードの、AUTO_INCREMENT指定してある項目に設定された数値を取得したいのですが、どのようにすればいいのでしょうか。 DB指定 CREATE TABLE test( no INT NOT NULL AUTO_INCREMENT, comment TEXT, PRIMARY KEY(no) ); PHP書き込み $sql = "INSERT INTO test(comment)VALUES('いろは')"; $results = mysql_query($sql,$dbid); このとき、テーブルtestのフィールドnoに設定された数値を知るために、 今はわざわざSQL select MAX(no) from test を発行しています。 これですと、確実性に欠けますし、冗長な気がします。 他に何か効率的な方法があるような気がしますので、 質問いたしました。 よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

印刷で縦線が入る
このQ&Aのポイント
  • はがきの案内状を印刷する際、横向きで印刷すると細い黒線が入る問題が発生しています。高画質にすると、白い雲のような幅広の線になってしまいます。A4の紙ではきれいに印刷できるのに、この問題が解決できません。
  • 試行した修正方法として、ADF読み取り部とインクジェットの掃除を行いましたが、問題は解消されませんでした。Windows10のOSを使用し、USBケーブルで接続しています。ひかり回線も使用しています。
  • ブラザー製品の印刷機で発生している問題です。はがきの案内状を印刷する際、横向きで印刷すると細い黒線が入り、高画質にすると幅広の白い線になってしまいます。試しにA4の紙に印刷したところ、きれいに印刷できました。ADF読み取り部とインクジェットの掃除を行いましたが、問題は解消されませんでした。Windows10のOSを使用し、USBケーブルで接続しており、ひかり回線も使用しています。
回答を見る

専門家に質問してみよう