C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Fillするときに実行時エラー


(過去ログ 130 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■77164 / inTopicNo.1)  Fillするときに実行時エラー
  
□投稿者/ kiku (62回)-(2015/09/18(Fri) 14:01:47)

分類:[.NET 全般] 

環境:
 VS2010
 VB.NET
 Formアプリ
 .NETFrameWork2.0

質問内容:
 通常、問題なく下記コードでエラーなくFillできているのですが、
 あるユーザのみ、Fillするときに下記実行エラーが発生するようになりました。

  制約を有効にできませんでした。行に入力できるのは、
  Null 以外の値、一意な値、あるいは外部キーですが、
  この制約の違反が 1 つ以上の行で発生しています。

 再現性があり、ユーザ様のAccessファイルでテストすると
 常にエラーになります。
 対象となるテーブルははオートナンバー型の主キーが1つ存在し、
 それ以外の項目が20項目ぐらいあります。
 テーブル内のデータを確認してみましたが
 特に問題になるようなデータはありませんでした。

 MissingSchemaAction.AddWithKeyを設定しない場合には
 なぜか上記の現象が解消します。

 なぜ、このような現象になるのか?
 おわかりになる方、いらっしゃらないでしょうか?

ソース:
Dim cnn As New OleDb.OleDbConnection

strTEMP = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*******;Jet OLEDB:Database Password=*********;"
cnn.ConnectionString = strTEMP
cnn.Open()

Dim oCmd As New OleDbCommand
With oCmd
 .Connection = cnn
 .CommandText = "テーブル名"
 .CommandType = CommandType.TableDirect
End With

Dim oDA As New OleDbDataAdapter(oCmd)
oDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

Dim oDS As New DataSet()
oDA.Fill(oDS, "tbl")

引用返信 編集キー/
■77165 / inTopicNo.2)  Re[1]: Fillするときに実行時エラー
□投稿者/ kiku (63回)-(2015/09/18(Fri) 14:32:09)
追加情報

 Accessのビューアで主キー項目を確認すると、
 重複項目は無い状態だったのですが、
 該当テーブルのデータを一旦外部ファイルへ
 エクスポートし、そのデータを確認したところ
 主キーが重複しているレコードが2件ありました。
 この2件は、Accessのビューアでは確認できていないレコードでした。

 これはどういうことでしょうか?

 そもそも主キーが重複している状態で
 DBに登録できるのでしょうか?

引用返信 編集キー/
■77167 / inTopicNo.3)  Re[2]: Fillするときに実行時エラー
□投稿者/ 魔界の仮面弁士 (503回)-(2015/09/18(Fri) 15:04:54)
No77165 (kiku さん) に返信
>  これはどういうことでしょうか?

mdb ファイル(のインデックス情報)が破損しており、
データ矛盾が起きているのではないでしょうか。


> そもそも主キーが重複している状態で
> DBに登録できるのでしょうか?

通常操作では無理ですね。


ただ、「vbNullChar を含む文字列」や「秒未満の誤差を含んだ日付値」あるいは
「浮動小数点数」などといった、目視では違いを確認しにくいレコードを
誤認していたというケースもあります。とはいえ今回は、そもそも件数が
異なっていたという事なので、mdb の破損を疑った方が良いのではないでしょうか。
引用返信 編集キー/
■77168 / inTopicNo.4)  Re[3]: Fillするときに実行時エラー
□投稿者/ kiku (64回)-(2015/09/18(Fri) 15:17:19)
いつも適切な回答を頂きありがとうございます。

> ただ、「vbNullChar を含む文字列」や「秒未満の誤差を含んだ日付値」あるいは
> 「浮動小数点数」などといった、目視では違いを確認しにくいレコードを
> 誤認していたというケースもあります。とはいえ今回は、そもそも件数が
> 異なっていたという事なので、mdb の破損を疑った方が良いのではないでしょうか。

mdbファイルの破損ですか><
データベースの最適化/修復を実行してみて
解消されるか試してみます。

重ねてありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -