• ベストアンサー

別の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.18

If MsgBox("番号" & i & " 項目1" & rsOutMain!項目1 & " 項目2" & rsOutMain!項目2 & "のチェックがOFFになっています。転送しますか?", のように、メッセージボックスの中の書き方は これでお判りになると思いますが、フォーム などに表示したデータが多い場合はメッセージ ボックスが出ている間は、フォームを操作できないので チェックの入っていないレコードの中身の確認の ためにレコードの内容をメッセージボックスに 入れて確認します。確認内容をもっと表示したい 場合はメッセージボックスに追加します。 それから、追加したコードで、 rsOutMain.Edit rsOutMain!チェック = True rsOutMain.Update はテーブルのチェックをONにして、削除対象に 設定するためのコードです。

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

遅くなりました。 さきほどのANo.15については確認できたでしょうか。 チェックが無い場合のメッセージについては以下のように、 'T_データのエクスポート rsOutMain.MoveFirst Do Until rsOutMain.EOF 'チェックがOFFの場合の確認 If rsOutMain!チェック = False Then i = rsOutMain!番号 If MsgBox("番号" & i & " 項目1" & rsOutMain!項目1 & " 項目2" & rsOutMain!項目2 & "のチェックがOFFになっています。転送しますか?", vbYesNo) = vbYes Then rsOutMain.Edit rsOutMain!チェック = True rsOutMain.Update DoCmd.RunCommand acCmdSaveRecord End If End If If rsOutMain!チェック = True Then i = rsOutMain!番号 Do Until rsOutMain.EOF と If rsOutMain!チェック = True Then i = rsOutMain!番号 の間に 「'チェックがOFFの場合の確認」 以下を 挿入してください。 プログラムの上達の一つにコードを見やすく整理する、 ということがあります。そのためにはインデントを 適切に設定する、つまり段落です。そのためのいい フリーのツールがあります。 http://www.oaltd.co.uk/Indenter/Default.htm この、Office版を落とし、インストールします。 使い方は、カーソルが点滅しているプロシージャ の部分のインデントを設定する場合はIndent Procedure をクリックします。あとは見ての通りです。英語版ですが 機能だけは抜群です。 このようなものを利用してコードを見やすく、理解しやすい ようにします。でも試行錯誤とエラーとの出会いと歯軋り が一番の上達です。 それから、T_番号を使用する場合は、Loopの内側で更新しないと いけないのでANo.27は変更する必要があった、ということを 添えておきます。

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

>チェックボックスにチェックが入っていない時に >メッセじを出して再入力を即するには どうしたらよいでしょうか これがありましたね。ちょっと所用ができましたので 後ほど回答します。

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

いろいろ消したり書いたりしたので、 どこかでコードの一部が欠落した可能性が ありそうですが、 チェックボックスがOnになっている場合は 'T_データのエクスポート(データベース2からデータベース1へ) rsOutMain.MoveFirst Do Until rsOutMain.EOF If rsOutMain!チェック = True Then のところの、 If rsOutMain!チェック = True Then で判断しますが、これが無くなっていませんか。 これを確認してください。それとこれを復活させると Loopに対するDoが無い、というエラーが出るかも知れません。 したがって、 End If rsOutSub.MoveNext Loop のところの、 End If が抜けているかもしれません。 確認してみてください。

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

これは、先にテーブルの最大値を読み込んでおいて、 その値をホーム側でnumMaxに保持し、レコードを一つ送る 毎にnumMaxを更新して次のレコードの番号に割り当てる 方法です。

misapapa2006
質問者

補足

ありがとうございました 出来ました やはり 自分の頭では無理のようです 自分でがんばってみようと自分なりに考えていましたが ご指南頂いたらすぐに解決いたしました 勉強がんばります ところで すいません その後気付いたのですが 送る側のチェックボックスにチェックが入っていなくても 処理されてしまいます チェックボックスにチェックが入っていない時にメッセじを出して再入力を即するには どうしたらよいでしょうか よろしくお願いいたします。

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

すみません。 rsInMain.AddNew rsInMain!番号 = rsInNUM!番号 + 1 rsInMain!項目1 = rsOutMain!項目1 rsInMain!項目2 = rsOutMain!項目2 j = rsInMain!番号 rsInMain.Update numMax = numMax + 1 のように、 numMax = numMax + 1 を追加してください。 これで、重複がなくなると思います。

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

もし、反応が悪ければもう一つ表示します。

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

numMax = 0 はこの場合は必要ないので、コメントアウト しておいてください。 初期化のつもりで入れたのですが、いらないです。

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

ANo.27のコードをもとに進めます。 (1) フォームのコード表の一番上にところで、 Option Compare Database Option Explicit となっているところに、 Option Compare Database Option Explicit Dim numMax As Long のように、 Dim numMax As Long を追加してください。 (2) 次に、 Set rsInNUM = dbIn.OpenRecordset("T_番号", dbOpenDynaset) の下に、 numMax = 0 numMax = funcMax を追加してください。 Set rsInNUM = dbIn.OpenRecordset("T_番号", dbOpenDynaset) は使っていないのでコメントアウトするかしておいてください。 また、コードの下のほうの 'T_番号の更新 rsInNUM.Edit rsInNUM!番号 = rsInNUM!番号 + 1 rsInNUM.Update End If rsOutMain.MoveNext Loop も、同様ですね。 (3) rsInMain!番号 = rsInNUM!番号 + 1 を rsInMain!番号 = numMax + 1 に変更してください。 (4) 以下の関数をはりつけてください。 Private Function funcMax() As Long Dim db As Database Dim rs As Recordset Dim strSQL As String Set db = DBEngine.Workspaces(0).OpenDatabase("C:\データベース1.mdb") strSQL = "SELECT Max(T_データ.番号) AS 最大番号 FROM T_データ" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) funcMax = rs!最大番号 rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Function この関数で、"C:\データベース1.mdb"はファイルへのパスです から環境に合わせて変更してください。 "SELECT Max(T_データ.番号) AS 最大番号 FROM T_データ" のT_データは名称変更がなければそのまま使ってください。 以上です。少し試行錯誤をしていた案なのですが、 ようやくピンときたので、確認してみました。 これで確認してみてください。

misapapa2006
質問者

補足

ありがとうございます さっそく試しましたが やはり 重複エラーになります テーブルのデータをみるとデータは転送されていて それをもう一度読むので 重複になっているようです?? もう少しがんばってみます

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

えーっと、何だかいい案ができました。 確認したら表示します。どうやら ご希望に沿えそうです。

misapapa2006
質問者

補足

ありがとうございます お待ちしています。 私なりにも考えていましたが 中々上手くいきません やはり 勉強が足りません よろしく願い致します。

関連する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様に、ご指南頂きましたが 困っています 解決策ご指南お願いいたします

専門家に質問してみよう