• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:効率のよい方法があったらお教え下さい)

効率的なAccessプログラムの方法

このQ&Aのポイント
  • Accessで効率的なプログラムを組む方法について教えてください。
  • TABLE1とTABLE2があり、TABLE1に取得IDが存在すればTABLE2にインサートを行わない方法を教えてください。
  • テキストのIDがEOFになるまで、TABLE1のレコードセットを取得し、TABLE2に挿入する方法を教えてください。

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

  • ベストアンサー
  • ST_BLU
  • ベストアンサー率25% (3/12)
回答No.1

手元にACCESSがないので未検証ですが、 テキストファイルのIDを取り込む作業用のテーブルを作成。仮にTABLE3とします。 TABLE3を全削除してから、ファイルから全てのIDをINSERT。 ここで、下のようなSQLを実行 INSERT INTO TABLE2 SELECT * FROM TABLE3 T3 WHERE NOT EXISTS( SELECT * FROM TABLE1 T1 WHERE T3.ID =T1.ID) TABLE1に存在しないTABLE3のレコードだけTABLE2へINSERTする。 いかかでしょうか。

mellow91
質問者

お礼

ご回答ありがとうございます!感謝です!

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

関連するQ&A

  • insertを高速化させたい

    問題:insertが遅い。20件程度の情報をテーブルにinsertするのに、30秒以上かかる。 環境:Windows XP, MYSQL(TABLE1のidにはindexつき) 仕様:textdata.csvを開き、idを取得する。取得したidをgetid変数に入れる。    取得したidがTABLE1に無いか調べる。idが無ければinsert。    あれば読み飛ばす。textdata.csvのidが無くなれば終わり。 con = CREATEOLEOBJ("ADODB.Connection") //ここでCSVファイルを開き、idを取得しループさせる getidSQL = "Select * from TABLE1 where id = '" + getid + "';" RS = con.Execute(getidSQL) If RS.EOF Then //DB登録--------------------------------------------------------------------------------------- str = "INSERT INTO TABLE1 (id) values('" + getid + "');" con.Execute(str) //DB登録終了------------------------------------------------------------------------------------ endif //CSVループ ちなみに、DBにinsertせずに、かわりにテキストファイルに書き込む方法だと一瞬で挿入が完了します。 これをDBに書き込む時に高速化を図りたいのですが、何か良い方法はないでしょうか?

  • 空きのID番号を取得する方法

    いつもお世話になっております。 create table AAA( ID int(6) primary key not null auto_increment, DATA varchar(30), )engine=MyISAM; というテーブルにおいて、 insertをすると、IDが1から順に割り振られていきますが、 途中のレコードをdeleteすると、そこが空きのID番号となってしまい、 次にinsertすると、空き番号が残ってしまいます。 やりたいことは、その空き番号を有効活用するために、 auto_incrementを使用せずに、空き番号を適当に取得して、 insertをしたいのです。 何か効率的な良い方法をご存知の方がいらっしゃいましたら、 ご教授いただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • ACCESS VBA レコードセットの参照方法について

    ACCESS2000でシステムを作っています。 ADOを使って、SELECT句に"*" を使用した内部結合でデータを 抽出したときの結果の参照方法がわかりません。 SQL="SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id" rsはレコードセット,ACはアクティブコネクションとして rs.Open SQL, AC, adOpenKeyset, adLockOptimistic にて結果を取得し、変数aにtable1のフィールド名の値を代入 しようとしています。 a = rs!table1.フィールド名 では「コンパイルエラー メソッドまたはデータメンバが 見つかりません」となり、値の参照ができません。 "*" でなく、フィールド名を明示して それぞれのフィールドに "as 別名"をつければ 参照できますが、フィールドが多いので "*"を使用したいのです。 大変初歩的な質問かと思いますが、どうかよろしくお願いします。m(_ _)m

  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • MySQL:一つを除いてすべてのフィールドを選択

    こんにちは、 データベースにはTABLE1とTABLE2の二つのテーブルがあって、TABLE1からTABLE2に、一つのフィールドを除いてほかのすべてのフィルードを移すには、どうすればいいのでしょうか INSERT INTO TABLE2 SELECT * FROM TABLE1 WHERE field_name != ID みたいなものがないのでしょうか IDフィールド以外にほかのすべてのフィールドを移したい。 TABLE 2の構造は IDフィールド COL2 COL3 COL4 ... COL50 つまりCOL2からCOL50までのデータを移したいのですが、できればフィールドを一つ一つ書くのを避けたいのです。 詳しい方がいらっしゃいましたら。ご回答をよろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLへのレコード追加

    VB6でMySQL4.1に接続して テーブル"table1"にレコードを追加したいんですけど MySQLには接続できるんですけど、新しいレコードを 追加できません。 エラーメッセージは  Unknown column 'ID'in'fieldlist' とでます。 教えてください。 Dim SQL As String Dim ID As Integer Dim name As String Dim cmd As ADODB.Command Set cmd = New ADODB.Command ID = Text1.Text name = Text2.Text SQL = "insert into table1(AID,Aname) values(ID,name) " cmd.ActiveConnection = cn cmd.CommandText = SQL cmd.Execute table1の内容は AID Aname ←フィールド名 -------------   1  suzuki 2 satou 3 takahasi みたいな感じです。

  • auto_incrementフィールドの書込み内容を知る方法

    auto_incrementの属性を持つフィールド(以後、id)を含むテーブルへ、書込みを行った場合、idフィールドには空番号が自動で付与されて書き込まれると思いますが、書き込まれた番号を効率的に知る方法はありますでしょうか。 例:id(auto_increment)、data1(char)のテーブルに対して、 data1に『AAA』をinsertした直後に、自動で付与されたid値を知りたい。 データをinsertした直後に最老番を調べる方法では、データのinsertが多数して行われた場合に、値がずれる恐れがあります。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • レコードは削除されています StrConv

    アクセス2010です。 今までできてたことなのですが、 UPDATE T_Table SET T_Table.フィールド = StrConv([T_Table]![フィールド],8); をすると、「レコードは削除されています」となります。 フィールドはメモ型です。 半角にしたいのですが、エラーにならない方法を教えてください。

  • 単純なクエリーなのにSELECTしてもEmpty

    | Field  | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------+ | page_id | int(10) | NO | PRI | NULL | auto_increment | | site   | varchar(255) | YES | MUL | NULL | | ... ... ... このようなテーブルがあり、以下の様なSELECT文を発行してもEmptyとなってしまいます。 > SELECT `page_id` FROM `table` WHERE `site` = 'hoge'; 自分なりに色々と調べてみたところ、 > UPDATE `table` SET `site` = 'fuga' WHERE `page_id` = 1; > SELECT `page_id` FROM `table` WHERE `site` = 'fuga'; とするとちゃんと1件返ってきます。 ですが、また > UPDATE `table` SET `site` = 'hoge' WHERE `page_id` = 1; > SELECT `page_id` FROM `table` WHERE `site` = 'hoge'; とするとEmptyとなってしまいます。 どうやら、INSERTしたレコードをWHERE `site` = 'hoge'するとEmptyとなるような気がします。 何度も試したので、単純に`site` = 'hoge'の文字列自体が間違っている、などのことは無いはずです。 以下の点も合わせて、どのような原因が考えられるでしょうか。 ・レコードのINSERTは、クローラーによって行われていています。 ・他のフィールドは通常通りSELECTすることができます。 ・ストレージエンジンはmroongaです。 どなたか解決策がわかる方いらっしゃいましたら、ご回答頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL