• ベストアンサー

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

関数を以下に変更してください。 'チェックの有無の確認 Private Function funcCheckExist() As Boolean Dim db As Database Dim rs As Recordset Dim strSQL As String strSQL = "SELECT T_データ.チェック FROM T_データ WHERE (((T_データ.チェック)=True))" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 'チェックがすべて入っていない場合 If rs.RecordCount = 0 Then funcCheckExist = True 'チェックが入っていないレコードが存在しない場合 Else funcCheckExist = False End If End Function

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

関数のほうを変更しなければならないので 関数を変更します。しばらくお待ちを。

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

それでは、先ほどのコードの中で、 'チェックが入っていないレコードが存在するときの処理の確認 の以下のコードを以下のようにしてみてください。 If funcCheckExist = True Then MsgBox ("チェックがすべて外れています。転送をせずに終了します") Exit Sub End If これが効かないとちょいと大変なのですが。 それと、 >クエリで条件つけてフォーム表示してそこでチェックをいれさせ のチェックはすべて同じテーブル、すなわちT_データのチェック フィールドに入るようになっていますか。このチェックがT_テーブル 以外に入っているならば、チェックの有無の確認の関数の、 strSQL = "SELECT T_データ.チェック FROM T_データ WHERE (((T_データ.チェック)=False))" の部分を変える必要があります。そのときはフォームのレコードソース を直接参照するようにします。この場合、クエリだとクエリを参照 するようになります。

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

確認ですが、 (1) チェックが入ったものと入らないものが 混在している場合は転送の仕分けができている。 (2) チェックが最初からすべてはずれていて、チェックを 入れたり外したりしない状態でクリックしても 転送されてしまう。 (3) チェックが入っていたものをすべてはずして、 その直後にクリックすると転送されてしまう。 このような、状況ですか。 一度、提示したコードを入れずに、 Private Sub コマンド0_Click() DoCmd.RunCommand acCmdSaveRecord のように、クリック時の直後に DoCmd.RunCommand acCmdSaveRecord を挿入して試してみてください。 レコードの確定を先にしてみます。

misapapa2006
質問者

補足

ありがとうございます DoCmd.RunCommand acCmdSaveRecordいれても 変化ありませんでした (1) チェックが入ったものと入らないものが 混在している場合は転送の仕分けができている。 (2) チェックが最初からすべてはずれていて、チェックを 入れたり外したりしない状態でクリックしても 転送されてしまう。 (3) チェックが入っていたものをすべてはずして、 その直後にクリックすると転送されてしまう。 このような、状況ですか。 はい そのとうりです

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

補足の件了解しました。提示したコードでも いいのですが、ちょいと検討してみます。 いいツールでしょう。しばらくトリツカレます。 以前提示したコードもこちらと同じインデントに なると思います。

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

以下のコードを、 'チェックが入っていないレコードが存在するときの処理の確認 If funcCheckExist = True Then 'Yesの場合はIf文を抜けそのまま転送プロセス If MsgBox("チェックの入っていないレコードがあります。このまま転送しますか?", vbYesNo, "確認") = vbYes Then 'Noの場合はイベントの終了 Else MsgBox ("転送をせずに終了します") Exit Sub End If End If Private Sub コマンド0_Click() の直後、または、 Dim・・・ と変数宣言が終わった直後で、 Set dbOut = CurrentDbの前に入れてください。 これで処理に入る前にチェックの確認をします。 次に、以下の関数をフォームに張り付けてください。 'チェックの有無の確認 Private Function funcCheckExist() As Boolean Dim db As Database Dim rs As Recordset Dim strSQL As String strSQL = "SELECT T_データ.チェック FROM T_データ WHERE (((T_データ.チェック)=False))" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 'チェックが入っていないレコードが存在する場合 If rs.RecordCount > 0 Then funcCheckExist = True 'チェックが入っていないレコードが存在しない場合 Else funcCheckExist = False End If End Function

misapapa2006
質問者

補足

わぁ すいません 入れ違いです

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

こういうことですか、もし転送する場合、チェックの入っていない データが存在した場合、転送をストップして確認させる、 といことですか。 その場合、先にチェックの入っていないデータの有無を 先に確認し、もしなければ転送のプロセスに入る。 もし、存在すれば転送プロセスに入る前にYes Noを 聞いてYesならば、転送、Noならば転送プロセスに 入らずにすべての処理をしないままクリックイベント を終了する、ということでいいのでしょうか。

misapapa2006
質問者

補足

ありがとうございます ホント良いツールです 色々試しています ところで If rsOutMain!チェック = True Thenの件ですが 状態としましては チェックフィールドの規定値をFalseに クエリで条件つけてフォーム表示してそこでチェックをいれさせ 転送ボタンをつくり 押すことによってチェックの入ったものを転送させていますが まったくチェックの入っていない状態で転送処理しても処理が進んでしまいますので 何処にもチェックが入っていない場合処理を中止して "チェックが入っていません"のエラーメッセージを出したいのですが すべてのボックスにチェックが入らなかった場合のみ転送プロセスに入らずにすべての処理をしないままクリックイベントを終了する なのです よろしくお願いいたします

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

まちがえました。 If rsOutMain!チェック = False Then ではなく、 If rsOutMain!チェック = True Then があってもチェックがあるなしに関わらず すべて処理されてしまう、といことですか?

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

ツールは私も使っています。これでフリーですからね。 世の中にはもっとすごいフリーのものもあります。 まったく知られていないのですが、Access2003から 付属するオブジェクトの依存関係を示す2000版で、 ユニオンクエリ、サブクエリでもクエリをテーブル まで分解してTreeiew表示し、Treeをレポート 表示するものです。海外でも似たようなものは ありますが、調べてみると未完成で使い物には なりませんでした。ただ、作者がまだ一般公開 していないのですが。 ところで、 >すべてのチェックボックスにチェックが入っていなくても転送処理 してしまう。 ということのようですが、 If rsOutMain!チェック = False Then があっても処理されてしまう、ということですか? 「チェック」はT_データのフィールドのYes/Noフィールドの 名前をさすのですが。

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

それから、先ほどのツールはOFFICE2000から2003が対象 なので、OFFICEのバージョンによっては機能しかも しれません。

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

専門家に質問してみよう