Page 565 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼実行時エラーについて 干し柿 04/3/18(木) 11:19 ┗Re:実行時エラーについて こうちゃん 04/3/19(金) 9:32 ┗Re:実行時エラーについて 干し柿 04/3/19(金) 16:29 ┗Re:実行時エラーについて こうちゃん 04/3/19(金) 17:49 ┗Re:実行時エラーについて 干し柿 04/3/22(月) 10:28 ┗Re:実行時エラーについて こうちゃん 04/3/22(月) 11:10 ┗Re:実行時エラーについて 干し柿 04/3/22(月) 11:29 ─────────────────────────────────────── ■題名 : 実行時エラーについて ■名前 : 干し柿 <demura@jss-grp.co.jp> ■日付 : 04/3/18(木) 11:19 -------------------------------------------------------------------------
はじめまして。 ACCESS97のプログラムをACCESS2000にバージョンアップしたのですが、マスタ保守のプログラムを実行したときに、「実行時エラー'2046':レコードの保存は無効です」というようなエラーメッセージが出てきました。 同じプログラムで、ACCESS97のバージョンの時には、マスタmdbにデータを保存できたのですが、バージョンアップと何か関係があるんでしょうか? |
干し柿さん、こんにちは >はじめまして。 >ACCESS97のプログラムをACCESS2000にバージョンアップしたのですが、マスタ保守のプログラムを実行したときに、「実行時エラー'2046':レコードの保存は無効です」というようなエラーメッセージが出てきました。 >同じプログラムで、ACCESS97のバージョンの時には、マスタmdbにデータを保存できたのですが、バージョンアップと何か関係があるんでしょうか? 関係あると思います。 ただ、これだけだと「想像」するしかないので、回答するにはもっと情報が必要です。 エラーのでる箇所のコードは書けませんか? #ここまでの情報だけで「想像」すると次の2点くらいかな?? 1)Dim rs As Recoreset のように宣言したレコードセットによる更新(追加)でDAOとADOの違いによるエラー 2)テーブル変換時の主キー違いによるエラー まあ、想像なので、あんまりあてにしないでね。 あとは情報を拝見してからってことで・・ |
▼こうちゃん さん: >エラーのでる箇所のコードは書けませんか? すみません。情報が少なかったですね。 Select Case fraState Case MODE_REGIST '登録 DoCmd.RunCommand acCmdSaveRecord Case MODE_MODIFY '更新 DoCmd.RunCommand acCmdSaveRecord Case MODE_DELETE '削除 DoCmd.RunCommand acCmdDeleteRecord ・ ・ ・ というところですが、フレーム(fraState)内のボタン(登録、更新、削除)の種類によって、DoCmdが場合わけされています。 不思議なことに、”更新”と”削除”は上記の文のまま実行できましたが、 ”登録”の場合のみ、上記の文ではエラーになりました。 「想像」されたのとはちょっと違うかもしれませんが、 こんな感じでお解りになれますでしょうか? |
干し柿さん、こんにちは >すみません。情報が少なかったですね。 > >Select Case fraState > Case MODE_REGIST '登録 > DoCmd.RunCommand acCmdSaveRecord > Case MODE_MODIFY '更新 > DoCmd.RunCommand acCmdSaveRecord > Case MODE_DELETE '削除 > DoCmd.RunCommand acCmdDeleteRecord >・ >というところですが、フレーム(fraState)内のボタン(登録、更新、削除)の種類によって、DoCmdが場合わけされています。 >不思議なことに、”更新”と”削除”は上記の文のまま実行できましたが、 >”登録”の場合のみ、上記の文ではエラーになりました。 >「想像」されたのとはちょっと違うかもしれませんが、 >こんな感じでお解りになれますでしょうか? まだわかりません。 DoCmd.RunCommand acCmdSaveRecord だけだと、特にエラーが再現できません。 あやしいのはやはり主キーかな? 「登録」の時だけエラーになるのは主キーが重なっているとか、主キーが入力されてないとかが原因かも・・ あるいは、アップグレード時にフィールド名やコントロール名等に問題がある場合も考えられます。 まだ「想像」です。 テーブルの構成、フィールド名、主キー、データ型等の情報と、フォーム(フォームで実行ですよね?)の連結・非連結、書き込もうとしたデータ、提示されたコードの前後のコード等を教えてください。 状況がわかっているのは干し柿さんだけです。 回答者が状況を把握できるように、セキュリティ上の問題が無ければできるだけ多くの情報を具体的に提示したほうが回答が付きやすくなります。 それが干し柿さんの問題がはやく解決することにもつながりますよ。 |
▼こうちゃん さん: 何度もすみません。 テーブルについてですが、 T_Depositというテーブルで DepositID(主キー、テキストボックス) Name(テキスト型、コンボボックス) Price(通貨型、テキストボックス) Flg1〜4(Yes/No型、チェックボックス) という項目があり、フォームはテーブルと連結しています。 登録しようとしたデータは DepositID:10 Name:テスト Price:100 Flg1:レ(チェック) Flg2〜4:未チェック でした。 主キーであるIDは重複していないです。 先日書き込んだコードは、「確認ボタン」押下時のもので、フォームにあるフレーム上の「登録」「更新」「削除」のボタン選択の場合によって、処理を分けています。 先日は処理を省いてしまったのですが、 実はDocmdのあとに、下記の処理が入ってます。 Select Case fraState Case MODE_REGIST '登録 DoCmd.RunCommand acCmdSaveRecord FormRegist ← (これ) Case MODE_MODIFY '更新 DoCmd.RunCommand acCmdSaveRecor FormModify ← Case MODE_DELETE '削除 DoCmd.RunCommand acCmdDeleteRecord FormModify ← 登録時のFormRegist()中では、登録時のフォームの初期化を行っています。 大まかに説明すると、 txtID.Enabled = True txtID.ControlSource = "DepositID"(←T_DepositのDepositID) cboName.Enabled = False cboName = Null cboName.Requery ← (T_DepositのNameをセット) txtPrice.Enabled = False (その他項目 Enabled = Flaseなど) ・ ・ Me.AllowEditions = True Me.AllowEdits = False Me.AllowDeletions = False ・ ・ などです。 ちなみに、このFormRegist()は、 Form_Open時、Form_Active時にも通っています。 先日こちらに書き込みをした後、上記の FormRegist()内の Me.AllowEdits = False ⇒ Me.AllowEdits = True にしたところ、Docmd文が、ちゃんと実行できました。 でも、なぜかがわかりません。 以上のような情報でわかりますでしょうか? よろしくお願いします。 |
干し柿さん、こんにちは >何度もすみません。 いえいえ、何度でもいいですよ。 >テーブルについてですが、 >T_Depositというテーブルで >DepositID(主キー、テキストボックス) >Name(テキスト型、コンボボックス) >Price(通貨型、テキストボックス) >Flg1〜4(Yes/No型、チェックボックス) > >という項目があり、フォームはテーブルと連結しています。 > >登録しようとしたデータは >DepositID:10 >Name:テスト >Price:100 >Flg1:レ(チェック) >Flg2〜4:未チェック > >でした。 >主キーであるIDは重複していないです。 >先日書き込んだコードは、「確認ボタン」押下時のもので、フォームにあるフレーム上の「登録」「更新」「削除」のボタン選択の場合によって、処理を分けています。 >先日は処理を省いてしまったのですが、 >実はDocmdのあとに、下記の処理が入ってます。 > >Select Case fraState > Case MODE_REGIST '登録 > DoCmd.RunCommand acCmdSaveRecord > FormRegist ← (これ) > Case MODE_MODIFY '更新 > DoCmd.RunCommand acCmdSaveRecor > FormModify ← > Case MODE_DELETE '削除 > DoCmd.RunCommand acCmdDeleteRecord > FormModify ← > >登録時のFormRegist()中では、登録時のフォームの初期化を行っています。 >大まかに説明すると、 > >txtID.Enabled = True >txtID.ControlSource = "DepositID"(←T_DepositのDepositID) >cboName.Enabled = False >cboName = Null >cboName.Requery ← (T_DepositのNameをセット) >txtPrice.Enabled = False >(その他項目 Enabled = Flaseなど) >・ >・ >Me.AllowEditions = True >Me.AllowEdits = False >Me.AllowDeletions = False >・ >・ >などです。 >ちなみに、このFormRegist()は、 >Form_Open時、Form_Active時にも通っています。 > >先日こちらに書き込みをした後、上記の FormRegist()内の >Me.AllowEdits = False ⇒ Me.AllowEdits = True >にしたところ、Docmd文が、ちゃんと実行できました。 >でも、なぜかがわかりません。 > >以上のような情報でわかりますでしょうか? >よろしくお願いします。 同様のテーブルを作成して試験してみましたが、エラーが再現できません。 なお、FormRegist()でAllowEditsをFalseにすると、最初以外は変更そのものができなくなるとおもいますが・・ >にしたところ、Docmd文が、ちゃんと実行できました。 おなじ状況で DoCmd.RunCommand acCmdSaveRecord も実行できるのですか(??) ただし、連結フォームということですので、データ入力後意号ボタンで別レコードに移動し(その時点でデータは登録される)、その後戻って登録ボタンでは、当然2046エラーになりますが・・ どうも、変換に伴うものではないような気がします。 状況がうまく把握できない上にDoCmd.RunCommand を使った記憶がかなり遠いため、的確なアドバイスができていません。ごめんなさい。 |
▼こうちゃん さん: こうちゃんさん、 >なお、FormRegist()でAllowEditsをFalseにすると、最初以外は変更そのものができなくなるとおもいますが・・ >ただし、連結フォームということですので、データ入力後意号ボタンで別レコードに移動し(その時点でデータは登録される)、その後戻って登録ボタンでは、当然2046エラーになりますが・・ こうちゃんさんの上記のお考えの通に納得しました。 確かに、"ID"入力後は"Name"や"Price"など、レコードに移動しております。 その時点でテーブルに登録されているために、後に登録ボタン押下時にはエラーになるんですね。 試しに、登録時および更新時のDocmd文を省いたところ、 フォームとテーブルは連結しているので、きちんと登録・更新は実行できました。 ACCESS97ではエラーもなく実行できていたのが良くわかりませんが。 ご返答、ありがとうございました。 |