• ベストアンサー

別のACCESSデータベースのテーブルのレコードを追加したいのです

別のACCESSデータベースのテーブルのレコードを追加したいのです 以前piroin654様にご指南頂き解決しましたが その後問題が発生しまして困っております http://okwave.jp/qa/q5995365.html レコードカウントで採番 rsInMain!番号 = rsInMain.RecordCount + 1 しておりましたが 1つのレコードを削除した場合、番号が重複してしまいます そこで rsInMain!番号 = rsInMain!番号の最終行の値+1にしたいのですが うまく行きません 何卒ご指南ください

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.29

関数の最後のところを、 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Function としてください。後始末が抜けていました。

misapapa2006
質問者

お礼

本当にありがとうございました お陰様で完成いたしました。 日々勉強対します 本当に奥が深いです ありがとうございました。 

その他の回答 (28)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

別の方法がないこともないのですが、 データの同期をとるのがなかなか難しい状態です。 T_番号を使うのが一番確実なのですが、T_番号のフィールドの 中で「最後の番号=番号の最大」を表示しているフィールドは ないのでしょうか。 T_番号にフィールドを追加、あるいはT_データの番号の最大値を 保持するテーブルを作るにしろ、確実にT_データの番号の更新を 反映できればそれでいいのですが。 少し、考えさせてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

>(T_番号テーブルで他のこともしていますので) T_番号テーブルが事情により使えない、ということですか?

misapapa2006
質問者

補足

フィールドを3つ持たせて クエリで追加させて並べ替えていますので 値が異なるのです 別にカウント用のテーブルを作った方が良いのでしょうか うまく表現出来なくてすいません

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

T_番号の更新の位置を以下に変更してみてください。 'T_データのエクスポート(データベース2からデータベース1へ) rsOutMain.MoveFirst Do Until rsOutMain.EOF If rsOutMain!チェック = True Then 'T_データに紐付けられたT_データ明細レコード検出用 i = rsOutMain!番号 'データベース1のT_データへのレコードの追加 rsInMain.AddNew rsInMain!番号 = rsInNUM!番号 + 1 rsInMain!項目1 = rsOutMain!項目1 rsInMain!項目2 = rsOutMain!項目2 j = rsInMain!番号 rsInMain.Update 'T_番号の更新 rsInNUM.Edit rsInNUM!番号 = rsInNUM!番号 + 1 rsInNUM.Update

misapapa2006
質問者

補足

ご指南ありがとうございます rsInNUM!が 使えないんです T_番号値とT_データの番号は同じではないので (別の作業の関係で) rsInMain!番号の最大値に+1をする方法をご指南頂ければ幸いなのですが なにかとご面倒をお掛け致しますがよろしくお願いいたします

noname#140971
noname#140971
回答No.5

テーブルA: _id. fld1 001, AAAA 002, BBBB 003, CCCC テーブルAにfld1='DDDD'を追加する場合のidの値は004です。 求め方1=レコード数+1---->3+1=4 求め方2=id最大値+1------>3+1=4 テーブルA: _id. fld1 001, AAAA 002, BBBB 003, CCCC 004, DDDD このテーブルAからid=3のレコードを削除。 テーブルA: _id. fld1 001, AAAA 002, BBBB 004, DDDD テーブルAにfld1='EEEE'を追加する場合のidの値は005です。 求め方1=レコード数+1---->3+1=4 求め方2=id最大値+1------>4+1=5 このように、求め方1では既存レコードが削除された場合にはid値が重複するという不具合が発生します。 この不具合を回避するには、求め方2を採用します。 仮に、扱うデータ量は10万件単位と膨大な場合には、求め方3へ移行することになります。 求め方3:採番テーブルを使う。 採番テーブルにid名とid最大値を記録します。 データを追加する場合には、このid最大値を使い、同時にid最大値を更新します。 レコードを1件登録する都度に最大値を求めるとデータ量によっては処理速度に問題がでます。 採番テーブルは、大量データを登録する際に有効で、自分でルリアル番号を管理・発生させる仕組みです。 ちくっと、横から失礼しました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

追加ですが、コード中にあるように番号を 保持するテーブルT_番号を使います。一応 確認をしておいてください。

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.3

排他などずいぶん苦心されたことと思います。 本題ですが、 対象のテーブルとは別に、もう1つ同じレコード数の番号のみ格納するテーブルを作れば? その番号のみのテーブルは、本テーブルのレコードが削除された場合でも削除しなければ、そちらでレコードカウントがとれるでしょ。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

http://okwave.jp/qa/q5995365_2.html#answer のANo.27のコードで、 'データベース1のT_データ明細へのレコードの追加 rsInSub.AddNew rsInSub!番号 = j rsInSub!名前 = rsOutSub!名前 rsInSub!住所 = rsOutSub!住所 rsInSub!電話 = rsOutSub!電話 rsInSub.Update End If rsOutSub.MoveNext Loop 'T_番号の更新 rsInNUM.Edit rsInNUM!番号 = rsInNUM!番号 + 1 rsInNUM.Update の部分を、 'データベース1のT_データ明細へのレコードの追加 rsInSub.AddNew rsInSub!番号 = j rsInSub!名前 = rsOutSub!名前 rsInSub!住所 = rsOutSub!住所 rsInSub!電話 = rsOutSub!電話 rsInSub.Update End If rsOutSub.MoveNext 'T_番号の更新 rsInNUM.Edit rsInNUM!番号 = rsInNUM!番号 + 1 rsInNUM.Update Loop のように、位置を変えてください。これで rsInMain!番号 = rsInNUM!番号 + 1 で、rsInMain!番号が更新されると思います。 確認してみてください。

misapapa2006
質問者

補足

piroin654様 ありがとうございます また 皆々様ありがとうございます 早速のご指南 誠にありがとうございます 色々やっていますが うまく行きません (T_番号テーブルで他のこともしていますので) そこでrsInMainのT_データの番号フィールドの最大値に+1を考えていますが うまく行きません 苦戦中です...... ご指南頂ければ幸いです

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

同じ構造の2つのmdbファイルがあるわけですよね。んでそれらのレコードのみを1つにまとめたいと。連番のところが別のテーブルと関係があるならちと難しいことになりそうに思います。 連番が他のテーブルと関係ないこと前提ですけど、もしそうであればそんな面倒くさいことしなくてもこんな方法はどうでしょうか。 1、テーブルを開いて全体をコピー 2、エクセルにペースト 3、もう1つのmdbのコピーして、エクセルにペースト 4、連番のとこだけ削除 5、削除したところに列を挿入。ドラッグで連番振り直し 6、エクセルの表全体を、アクセスの該当テーブルにコピー

関連するQ&A

  • 別のACCESSデータベースのテーブルのレコードを追加したいのです

    別のACCESSデータベースのテーブルのレコードを追加したいのです 同じ内容のデータベースが二つあります データベース1とデータベース2を其々別の人がデータを入力しています データベース1にデータベース2のテーブルで T_データT_データ明細の二つのレコードを追加したいのですがどの様にすればよいでしょうか ご指導をお願いいたします。

  • エクセル2007のテーブルに、レコード追加

    エクセル2003でリスト(データベース)を作成すると、 最終の行に1列に"*"が付いて、レコードが自動的に追加されましたが、 エクセル2007で、レコードを追加する方法は? または、 2003のように、自動的に1行追加させる方法はありませんか? よろしくおねがいします

  • Access2000 別のレコードをテーブルに追加するには?

    既存のAというテーブルに新しく別のところからインポートしてきたBというデータを追加したいのですが、「...46件のレコードで入力規則違反が発生したため、レコードを追加できませんでした。」とエラーメッセージが出ます。無視して実行すると、Bの一部のデータがAに追加されません。 IDが一部重複しているのですが、これが原因?でもAccess95では、Bのデータにすべて新しいIDがついて追加されましたよね?

  • Accessで、複数のテーブルで随時、レコードを増やすには…

    Accessを使って、複数のテーブルにリレーションを付けて顧客データベース作りました。 顧客は随時増えていくので、一つのテーブルにレコードを追加したときに、他のテーブルのレコードもそれに連動して、増やす方法はないでしょうか? 現在は、各テーブルに予め十分な(余分な)顧客番号を設定し、顧客増加に対応しています。

  • テーブルに新しいレコードを追加する方法について

    ACCESS2007を使っています。 フィールドに以下のような項目があるテーブルAがあります。 日付 | 名称 | 項目 | MIN(数値) | MAX(数値) | チェック(Yes/No) また、以下のような項目があるテーブルBがあります。 日付 | 名称 | 項目 | ナンバー(数値) このテーブルAに以下のようなデータが入っているとして 1/1 | あああ | いいい | 10  | 100 | No 1/1 | あああ | ううう | 1 | 20 | Yes テーブルBに以下のようにレコードを追加したいのです。 1/1 | あああ | いいい | 10   1/1 | あああ | いいい | 11    ・  ・  ・ 1/1 | あああ | いいい | 100 1/1 | あああ | ううう | 1 1/1 | あああ | ううう | 2   ・  ・  ・ 1/1 | あああ | ううう | 20 1/1 | あああ | ううう | blank  最終的には、テーブルBをソースとしてラベル印刷したいと思っています。 レコードセットとFor~Nextなどを使えばできそうな気がするのですが、???です。 どなたかご指南いただけませんでしょうか?

  • access フォーム上で複数行のレコードを追加したい。

    宜しくお願いします。 仕様環境:WinXP access2002 フォーム上にコマンドボタンで空白のレコードを 追加したいのですが、一行だけなら「値の代入」マクロで 追加できるのですが、複数行だとやり方がわかりません。 「追加クエリ」を作ってコマンドボタンにマクロで乗せてみたのですが、 テーブル上では複数の空白レコードが追加されてますが、 フォーム上には反映してくれません。 「値の代入」マクロを使って、複数行のレコードをフォーム上に追加するか、 「追加クエリ」を使って、複数行のレコードをフォーム上に反映させるか したいのですが教えてください。 ※ ちなみにこのフォームはサブフォームです。   また5行追加しようとしています。   この方法では無理でしたらご指導お願いします。 宜しくお願いします。

  • ACCESS 追加クエリでレコード数の指定したい

    Win XP Access2003 見積伝票を作成しております。サブフォーム(帳票フォーム)の登録方法でご教授お願い致します。 "伝票明細テーブルW"(伝票番号,行番号,内容、数量、単価、・・・)を基にした "伝票明細クエリW"を作成し、入力しやすいようにフォームを開いた時に行番号(連番)を振り、30行表示するようになっています。 入力確認後に登録ボタンをクリックして追加クエリを開き"伝票明細テーブルW"から"伝票明細テーブル"に30件レコード保存するようになっているのですが、 場合によって内容が2~3行で終わる時があります。 このような時に無駄に30行のレコードを保存せず"内容"(フィールド)が入力されているの最終レコードまでで伝票明細テーブルに追加したいのですが、よい方法がありましたら宜しくお願い致します。 "内容"(フィールド)は途中に空白の時があります。 行番号    内容        数量  1     オイル交換      3.0  2  3     タイヤ交換       4.0

  • テーブルにレコードを追加するサーブレット。

    HTML画面からservletに接続してMYSQLにてつくったデータベースのテーブルに レコードを追加するプログラム(servlet)を作っています。テーブルを表示させるservlet(ext_db5_2_1.java)と、テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)をつくってます。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47, tomcat3.3.1 テーブルにレコードを追加するサーブレット(ext_db5_2_2.java)の問題箇所。 // データベースに追加する値を取得 String number = request.getParameter("number"); String name = new String( request.getParameter("name").getBytes("8859_1"), "JISAutoDetect"); String from_pref =new String( request.getParameter("from_pref").getBytes("8859_1"), "JISAutoDetect"); // SQLを実行して、データベースに追加する StringBuffer buf = new StringBuffer(); buf.append("INSERT INTO OOIWA_SEM ("); buf.append("NUMBER, NAME, FROM_PREF) "); buf.append("VALUES ("); buf.append(number); buf.append(",'"); buf.append(name); buf.append("','"); buf.append(from_pref); buf.append("')"); stmt.executeUpdate(buf.toString()); // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd =                          cx.getRequestDispatcher("/netjv/servlet/shuwa.ext_db5_2_1");

  • テーブルのレコード削除ができません

    SQLserver2000を触る事になり思った通りにならず困っております。 テーブルに主キーを設定せずデータ型を「int」でフィールドに重複する数値を入れてしまいました。 後から重複入力のミスに気づき重複したレコードを 「テーブルを開く」-「全行を返す」から1レコードを 削除しようとしたのですが、 「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます。」と表示され削除できません。 このテーブルは、多くのビューで使用してすでに動いている再作成することは難しいです。 このレコードを削除する良い方法はあるのでしょうか。 ご存知の先生方ご指導よろしくお願いいたします。

  • データベース1のレコードが0の時 "実行時エラー94 Nullの使い方

    データベース1のレコードが0の時 "実行時エラー94 Nullの使い方が不正です" 出ます http://okwave.jp/qa/q6169088_4.html#answerのNo10でpiroin654様に、ご指南頂きましたが 困っています 解決策ご指南お願いいたします

専門家に質問してみよう