• ベストアンサー

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

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

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

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

レコードカウントで採番する場合は、 rsInMain.AddNew rsInMain!番号 = rsInNUM!番号 + 1 rsInMain!項目1 = rsOutMain!項目1 rsInMain!項目2 = rsOutMain!項目2 j = rsInMain!番号 rsInMain.Update のところで、 rsInMain!番号 = rsInNUM!番号 + 1 を rsInMain!番号 = rsInMain.RecordCount + 1 に置き換えればいいです。 それと、 'T_番号の更新 rsInNUM.Edit rsInNUM!番号 = rsInNUM!番号 + 1 rsInNUM.Update の部分はコメントアウトするか削除します。 こちらの環境では、レコードソースを クエリ、テーブル、SQLどれも問題はないのですが。 一応、簡単にT_テーブルでオートフォームでフォームを つくり、あとボタンをくっつけた簡単な フォームでやっています。

misapapa2006
質問者

お礼

大変 お世話になりました ようやく完成いたしました。 どの様にお礼を言って良いのかわかりませんが 今後とも よろしくお願いいたします。 ご指導ありがとうございました。

その他の回答 (34)

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

すこし状況がわかりました。 まず、最適化をしてください。 多分、何度もプログラムを入れ替えたり、 データをセットしたりするとファイルの 最適化が必要になることがあります。

misapapa2006
質問者

補足

すいません 用事で外出していました 今戻りまして 遅くなりまてすいません まずプログラム起動時に自動で最適化をしています それと鉛筆マークは出ていません チェックボックスにチェックを入れ直しても同じで 2回実行しないとダメのようです  ?? それと データベース2のT_データのナンバーを番号テーブルから取っていますが T_データの最後のレコードを取得した方が良いようです 間違って番号テーブルのデータを消したらヌルでエラーになりますし 生成された番号が違う場合も有りうりますのでT_データの最終レコードを取得した方が確実なので ご指導頂けますでしょうか

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

両方のデータベースを最適化と操作をくりかえしてみてください。

misapapa2006
質問者

補足

すいません追加情報です 転送をして そのたびにフォームを閉じると 上手く動きます

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

(2) チェックを入れたときにチェックを入れたレコードの 左端に鉛筆マークが表示されたままボタンクリックを するとレコードロックのエラーが表示されます。 したがって、鉛筆マークが消えるようにどれか他の レコードのフィールドをクリックして鉛筆マークが 黒い三角マークになるようにしてください。 これでチェックを入れたレコードの事前処理が 確定したことになります。 この意味はチェックボックスもテキストボックスと 同様に一つのレコードの中のフィールドですから レコードを確定させるためにチェックをいれたら フォーカスを他のレコードに移動させて暗黙的に レコードの更新を確定させるというものです。 したがって、2回ボタンを押したらできるということは 一つのレコードの更新が確定していないが二回押すことに よりフォーカスが移動してレコードの更新が確定した ということです。 単独のチェックボックスと違ってレコード帳票フォームなどの レコードはチェックボックスのチェックを入れただけでは レコードの確定がしない、ということです。

misapapa2006
質問者

補足

ありがとうございます チェックボックスの件 なんとか自己解決致しました ありがとうございます 番号の件 よろしくお願いいたします。

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

T_データを表示しているのはサブフォームでは ないですね。 (1) End Sub の前に Me.Requery をいれてください。この場合はサブフォーム でない場合です。 (2) チェックを入れたときにチェックを入れたレコードの 左端に鉛筆マークが表示されたままボタンクリックを するとレコードロックのエラーが表示されます。 したがって、鉛筆マークが消えるようにどれか他の レコードのフィールドをクリックして鉛筆マークが 黒い三角マークになるようにしてください。 これでチェックを入れたレコードの事前処理が 確定したことになります。 これ以外に何かでていますか。 エラーが表示されていましたか。 テーブルを指定するとどうですか。

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

>そのまま続けて違うレコードにチェックを入れ >Private Sub コマンド0_Click()を実行させると >処理ができません 処理ができないというのはどのような状況ですか。 (1) フォームからデータが消えない (2) 転送、削除そのものができない。

misapapa2006
質問者

補足

ありがとうございます (2)転送、削除そのものができない です 2回同じ事をすると 実行できます?? Me.Requery は入れています

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

なお、データの削除の部分は単純に前のコードに 削除の部分を追加してだけです。その部分を はずせば前のコードと同じです。

misapapa2006
質問者

補足

ありがとうございます データベース2のT_データのクエリーを造りそれをフォームに引き込みしチェックボタンを設定 チェックを要れPrivate Sub コマンド0_Click()を実行させると処理されますが そのまま続けて違うレコードにチェックを入れPrivate Sub コマンド0_Click()を実行させると 処理ができません おそらくクエリーで取っているためだと思いますが 続けて処理するにはどの様にすればよいでしょうか ご指導お願いいたします。

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

字数がぎりぎりだったのでのですが、 たぶん全部一つにして掲示できたと思います。 追加した部分はたいした文字数ではないのですが、 一つにしようとして、既存のコメントの中の 長い部分を二つくらい除けました。 午前のつもりがお昼ですね。 Loopの終了後、データの削除が始まる前に、 MsgBox("データの転送終了。データの削除開始。") End Subの前に MsgBox("処理完了") などを入れて終了確認をしてもいいかもしれません。 データが少なければあまり意味がないかもしれませんが、 一つの案です。 以上です。データの転送、削除を確認をしてみてください。

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

Private Sub コマンド0_Click() Dim dbOut As Database 'データベース2 Dim dbIn As Database 'データベース1 Dim rsOutMain As Recordset 'データベース2のT_データ Dim rsOutSub As Recordset 'データベース2のT_データ明細 Dim rsInMain As Recordset 'データベース1のT_データ Dim rsInSub As Recordset 'データベース1のT_データ明細 Dim rsInNUM As Recordset 'データベース1のT_番号 Dim i As Long Dim j As Long 'データベースの設定 Set dbOut = CurrentDb 'データベース2 Set dbIn = DBEngine.Workspaces(0).OpenDatabase("C:\データベース1.mdb") '各データベースのテーブルの設定 Set rsOutMain = dbOut.OpenRecordset("T_データ", dbOpenDynaset) Set rsOutSub = dbOut.OpenRecordset("T_データ明細", dbOpenDynaset) Set rsInMain = dbIn.OpenRecordset("T_データ", dbOpenDynaset) Set rsInSub = dbIn.OpenRecordset("T_データ明細", dbOpenDynaset) Set rsInNUM = dbIn.OpenRecordset("T_番号", dbOpenDynaset) '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_データ明細のエクスポート(データベース2からデータベース1へ) 'T_データに紐付けられたT_データ明細のエクスポート rsOutSub.MoveFirst Do Until rsOutSub.EOF If rsOutSub!番号 = i Then 'データベース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 End If rsOutMain.MoveNext Loop 'T_データの削除 rsOutMain.MoveFirst Do Until rsOutMain.EOF If rsOutMain!チェック = True Then i = rsOutMain!番号 rsOutMain.Delete 'T_データ明細の削除 rsOutSub.MoveFirst Do Until rsOutSub.EOF If rsOutSub!番号 = i Then rsOutSub.Delete End If rsOutSub.MoveNext Loop End If rsOutMain.MoveNext Loop rsOutMain.Close Set rsOutMain = Nothing rsOutSub.Close Set rsOutSub = Nothing rsInMain.Close Set rsInMain = Nothing rsInSub.Close Set rsInSub = Nothing rsInNUM.Close Set rsInNUM = Nothing dbOut.Close Set dbOut = Nothing dbIn.Close Set dbIn = Nothing End Sub

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

では、転送終了後に、引き続いてチェックの入った T_データとそれに紐付けられたT_データ明細を 削除するという方法でいきます。 えー、少し一息いれて仕上げておきます。 もう今日になりましたが、午前には 掲示しておきます。いかがでしょうか。

misapapa2006
質問者

補足

誠にありがとうございます piroin654様のご都合でお任せいたします。 この度は すごく勉強になりました。 ご親切、本当に感謝しております。

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

すみません。返答があとからきたので 前後しましたが、データの量によりますが 最近のPCは性能がいいので動きを気にするほど 時間がかかるものではないと思いますが。 たしかにテーブルのリンクが出来ないので 若干の時間はかかる傾向はありますが。 1万とか2万とかのレコード数でもクエリ ほどではないにしろ少しの時間で済む と思いますが。 必要なら送ったレコードを削除するように しましょうか。

misapapa2006
質問者

補足

すいません入れ違いになりました 削除の方向でお願いいたします。

関連するQ&A

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

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

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

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

  • Accessのテーブルのレコード追加について

    お世話になります。 テーブルのレコードをコピーして、別のテーブルに 「編集」の中の「追加貼り付け」でテーブルのレコードを 追加しました。 しかし、データ型をオートナンバーにしているフィールド があったのですが、追加したレコードの部分のナンバーが 連番になりません。 どの様にしたら、追加した分も連番になりますでしょうか。 お教え下さいます様、宜しくお願い致します。

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

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

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

  • Accessのクエリでレコード追加

    Access初心者です。 バージョンは2010をつかっています。 テーブルを14テーブル含み、フィールド数が100ほどある選択クエリを作りました。 抽出条件などは設定していません。 このクエリで新しくデータを入力、レコードを追加し、上書き保存した後クエリを閉じます。 それからまた、そのクエリを開くとレコードが追加されていません。 テーブルにはその入力したデータは追加されています。 このクエリにもそのデータを追加表示させるためにはどうすればいいですか? 表示されない原因はなんなのかお教えお願いします。

  • access テーブル内のレコードの編集を不可に。

    よろしくお願いします。 仕様環境(access2003,access2007) access データベースを作っています。 データベース内にテーブルがいくつかあるのですが、 他人に勝手に変更(レコードの追加や削除)してもらいたくない テーブルがあります。 (どんどん件数が足される仕様のものではないので) 何かいい方法はありますでしょうか? データベースウィンドウ全体(2007だとナビゲーションウィンドウ)を 隠す方法は知ってますが、違う方法を考えています。 ちなみにリンクテーブルは使っていません。 教えてください、よろしくお願いします。

  • Accessレコードの追加や変更が出来ません。

    テーブルのレコードにデータを入力したいのですが、試すと『テーブル'発注一覧'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことはできません』という表示がされ、入力も保存も出来ません。どうしたらよいか、ご存知でしたら教えていただけますでしょうか。すみませんが宜しくお願いいたします。

  • アクセスで自動でレコードを増やす

    お世話になります。アクセスでデータを入力するフォームを作っているのですが、月とNoと内容というフィールドがあったときに、今までは、その月に使用する分のレコードをエクセルで作成し、テーブルに貼り付けていました。この作業をボタンを押すと「月を入力して下さい」、「No(始まり)を指定してください」、「NO(終わり)を指定してください」とメッセージを表示し、自動でその分のレコードが追加されるというようにしたいのですが、どうすればよいですか? ご指導のほど、よろしくお願いします。 <テーブルイメージ> 月 No 内容 5月 1 (空欄。入力者がその都度、Noを指定して開き、入力) 5月 2 5月 3 ↑ボタンを押すと自動でレコードと追加したい。

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

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