VB2008ExpressEdition,DBはAccess2003の環境にて小規模な業務アプリの開発を行っている者です。
VBを使用してまだ2週間足らずですので、初歩的な質問かもしれませんが、よろしくお願いします。
テーブルの内容を明細表示し、登録ボタンを押すとDB更新を
行うような簡単なマスタメンテナンス画面があるとします。
明細表示のため、フォーム上にDataGridViewを作成、
DataSouceプロパティを指定し、型付きDataSetをBindさせました。
AllowUserToAddRowsプロパティはTrueとし、DataGridView上への
新規行追加も可能としてあります。
このとき、プログラムを動作させ複数行新規追加を行うと、
2行目の行追加のタイミングで、
「データの登録時にエラーが発生しました。
列「〇〇」は一意であるように制約されています。
値〇は既に存在します。」
というエラーになってしまい、行追加が1行以上行えません。
新規行追加時、エラー対象とされている列はDefault値Nullと
なっており、その値Nullの行を複数作成する操作なので
キー重複でこのようなエラーとなっているかと思いますが、
自分としてはこのようなエラーを出さず、
画面上では明細を複数行新規追加を可能としたいのです。
(キー値は最終的に更新時にマスタから値を取得、採番してカラムにセットし登録する。
また、キー重複チェックも後でロジックを組んで行う。)
このエラーチェックを行わないようにする設定、
もしくは回避方法等ありますでしょうか?
No.2ベストアンサー
- 回答日時:
こんにちは。
コード上で
Me.DataSet.テーブル名.PrimaryKey = Nothing
としても、
データセットデザイナで主キーを削除しても、
どちらでも出来ましたけど、どのようにやって出来なかったのですか?
ご回答ありがとうございます。
korin_さんにお教え頂いた
コードに
Me.DataSet.テーブル名.PrimaryKey = Nothing
という記述で出来ました!
私は
Me.DataSet.テーブル名.カラム名.Unique = Nothing
としており、
「テーブル〇〇の主キーであり、一意制約制限は削除できません」
とエラーとなってしまっていました。
明細を複数行新規追加することもできたので、
これで先へ進めそうです。
初歩的な質問ですが、ありがとうございました!
No.1
- 回答日時:
こんばんは。
よく判りませんが、私自身も勉強になりますので書き込みます。
本当にNullであることが問題なのですか?
・「値○」の○はNullであることを示しているのでしょうか?
・例えば「列○○」がString型ということはないですか?つまり、
実際には空文字が入っているわけではないのですか?
・「列○○」はキーではないが、一意制約がかかっている列で、
かつNullを許容しているということですか?
メッセージからは型付データセットの当該項目にキー設定が
あるように思えてしまいます。
そうであればキーをロジックで保障するということなので、
キー設定をはずしてしまうのが簡単なのですが。
いかがでしょうか?
この回答への補足
ご回答ありがとうございます。
すいません、質問の表現がわかりにくかったです。
また情報も足りない点が多かったようなので、
補足させて頂きます。
>こんばんは。
>よく判りませんが、私自身も勉強になりますので書き込みます。
>本当にNullであることが問題なのですか?
>・「値○」の○はNullであることを示しているのでしょうか?
「値〇」はNullということです。ただ、エラーメッセージ上では
なぜか?「’」という表記で出力されています。
ちなみにこのロジックは私が実装したものではありません。
VB側で自動生成されたものだと思います。
これをかけないようにしたいのです。
>・例えば「列○○」がString型ということはないですか?つまり、
> 実際には空文字が入っているわけではないのですか?
「列〇〇」は担当者コードで、String型です。
DafaultValueプロパティを「<DBNull>」
(新規行作成時のデフォルト値Null)としており、
DataGridView上ではReadOnlyプロパティを設定し編集不可として
いるので、新規追加行に他の値(空文字も含む)が入ることは
こちらからセットしない限りありません。
そのため、行を追加するためにキー値が同じNullとなり、エラーに
ひっかかっているのですが・・・。
>・「列○○」はキーではないが、一意制約がかかっている列で、
> かつNullを許容しているということですか?
>メッセージからは型付データセットの当該項目にキー設定が
>あるように思えてしまいます。
>そうであればキーをロジックで保障するということなので、
>キー設定をはずしてしまうのが簡単なのですが。
「列〇〇」はキーです。Default設定では一意制約がかかっており、
Nullは許容していません。
ただ、Nullについてはコード上から以下のようにプロパティを設定し、
許可するようにしています。
(そうしないとNullを許容しないエラーロジックが勝手に走ってしまい、新規行の追加すら行えなかった。)
'NULL値を一時的に許可(FormLoadイベント)
Me.DataSet.テーブル名.カラム名.AllowDBNull = True
ple_maniaさんのおっしゃる通りキーをはずしてしまえば全て解決
なのですが、上記のNullのようにコード上からも、デザイナ上からも、
キーをはずすことはできませんでした。
(コード上で設定するとエラー、デザイナ上で設定すると
保存後に設定が復元されてしまう。)
キー設定されているためにこのようなエラーが出ているのですから
キーを外すか、エラーを出力させないようにすれば
私のやりたいことは達成できるのですが・・・。
もちろん他のやり方でもかまいません。
お知恵を拝借できませんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
実行時エラー'-2147467259(8000...
-
mailstorehomeのエクスポートで...
-
ActiveCell.FormulaR1C1の変数
-
SQLでエラーです。
-
インポート時のエラー「データ...
-
IISの仮想ディレクトリ作成がわ...
-
【VBAエラー】Nextに対するFor...
-
pythonのopenpyxlについて
-
マクロの「SaveAs」でエラーが...
-
HTMLソースが表示のページのも...
-
ASP.NETのサーバー移行に伴うエ...
-
ApplicationとWorksheetFunctio...
-
フランスの生年月日(jj/mm/aaaa)
-
実行時エラー´5854´ 文字列型パ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
エクセル関数を教えてください
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
【VBA】ワークブックを開く時に...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
マクロの「SaveAs」でエラーが...
-
WindowsでのPythonの挙動について
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
エクセルVBA 「On Error GoTo...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
おすすめ情報