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

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

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

Re[9]: データテーブルがクリアできない?


(過去ログ 79 を表示中)

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

■46580 / inTopicNo.1)  データテーブルがクリアできない?
  
□投稿者/ すりーぷ (6回)-(2010/02/05(Fri) 21:34:24)

分類:[VB.NET/VB2005 以降] 

VBもRDBMSも初心者です。

VB2005でデータベースの表示をしようとしています。

プログラムは以下です。
Public Sub LoadDatabaseIND()
        Dim sql As String
        sql = "SELECT * FROM tbl_tag WHERE tag_type = 'IND' "
        Dim da As New System.Data.Odbc.OdbcDataAdapter(sql, My.Settings.iodbConnectionString)
        Me.IodbDataSet.dtTagList.Clear()
        da.Fill(Me.IodbDataSet.dtTagList)
End Sub

このFillのところで、
「ConstraintException 制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています。」
のエラーが発生します。

Clearができていないのでしょうか?
問題点等、教えてください。

引用返信 編集キー/
■46581 / inTopicNo.2)  Re[1]: データテーブルがクリアできない?
□投稿者/ 中博俊 (1350回)-(2010/02/05(Fri) 21:36:58)
ClearじゃなくってFillでエラーになってませんか?
だいたいこのエラーはDataTableにカラムがあるのに、SQLで漏れていてNULL制約をDataTableで適用できないというようなときになります。
引用返信 編集キー/
■46583 / inTopicNo.3)  Re[2]: データテーブルがクリアできない?
□投稿者/ すりーぷ (7回)-(2010/02/05(Fri) 21:58:47)
返信ありがとうございます。

エラーはFillで出ていますが、どうにもわからないのでClearされていないのだと思ったのです。
テーブルは主キー以外にはNULL制約や外部参照はありません。

データセットをClearできていないので、主キーでエラーになっているのかと思ったのですが、
なんでClearされないのかがわからないのです。
引用返信 編集キー/
■46584 / inTopicNo.4)  Re[2]: データテーブルがクリアできない?
□投稿者/ やじゅ (1510回)-(2010/02/05(Fri) 21:59:17)
やじゅ さんの Web サイト
DataSetのEnforceConstraintsプロパティをOFFにすれば、制約エラーが出なくなるかな。

引用返信 編集キー/
■46585 / inTopicNo.5)  Re[3]: データテーブルがクリアできない?
□投稿者/ すりーぷ (8回)-(2010/02/05(Fri) 22:23:27)
返信ありがとうございます。

エラーは出なくなりますが、機能しません;;
引用返信 編集キー/
■46586 / inTopicNo.6)  Re[1]: データテーブルがクリアできない?
□投稿者/ 魔界の仮面弁士 (1478回)-(2010/02/05(Fri) 22:24:46)
No46580 (すりーぷ さん) に返信
>         da.Fill(Me.IodbDataSet.dtTagList)

検証のため、上記を
 Me.IodbDataSet.EnforceConstraints = False
  da.Fill(Me.IodbDataSet.dtTagList)
 Me.IodbDataSet.EnforceConstraints = True  '★
というコードにし、★ の行にブレークポイントをはって、処理を一時停止させてみてください。

停止したところで、マウスカーソルを Me.IodbDataSet.dtTagList の箇所にあわせて、
ツールチップ上の虫眼鏡アイコンを押し、ビューワー(DataSet ビジュアライザ)で
取り出されたデータを確認してみてください。(意図した結果が入ってきていますか?)

取得結果に問題があるなら、SQL やデータを見直してみましょう。もしも
取得結果に問題が見当たらない場合には、型付きデータセットの定義ミスと思われます。

そこでさらに、一時停止状態からステップ実行し、制約を有効化させてみてください。
先ほどと同じエラーになると思われますので、『イミディエイト ウィンドウ』にて
 ? Me.IodbDataSet.dtTagList.GetErrors().Length
を実行し、全件エラーになるのか、一部の行だけエラーなのかを判定しましょう。

さらに、そのエラー行に対して、
 ? Me.IodbDataSet.dtTagList.GetErrors()(0).RowError
を実行すると、より具体的なエラーメッセージが表示されます。エラーの例としては
 「Column 'COL1' で DBNull.Value を使用できません。」
 「Column 'COL2' が MaxLength の制限を超えています。」
 「列 'COL3' は一意であるように制約されています。値 '123' は既に存在します。」
などと内容です。

そのエラーを元に、DataSet デザイナで、dtTagList テーブルの定義を調査してみてください。
開発途中で、列名/型定義の変わった列などはありませんでしたか?

・DataTable の主キー設定は正しいか。(間違った列に主キーが割り当てられていないか?)
・Null 値がありえる列に AllowDBNull = False が指定されていないか?
・列の Unique 指定が間違っていないか。(一意でない列に True が指定されていないか?)
・列の DataType は正しいか。(文字列型の列に対して、Decimal が指定されていないか?)
・列の MaxLength は正しいか。( CHAR(5) な列に対して、MaxLength = 3 になってはいないか?)
・列名の間違いはないか? (削除した列定義が残っていたり、スペルミスの列名などはないか?)
・DataSet 上で、他のテーブルとリレーションを張っている箇所があった場合、それは正しいか?

引用返信 編集キー/
■46587 / inTopicNo.7)  Re[4]: データテーブルがクリアできない?
□投稿者/ すりーぷ (9回)-(2010/02/05(Fri) 22:33:42)
返信ありがとうございます。
月曜日に実施してみます。
引用返信 編集キー/
■46650 / inTopicNo.8)  Re[5]: データテーブルがクリアできない?
□投稿者/ すりーぷ (10回)-(2010/02/08(Mon) 12:23:02)
魔界の仮面弁士様、詳細な返信ありがとうございます。
ご指示に従い、いろいろ調べてみました。
Me.IodbDataSet.dtTagList をビュワーで見たところ、ClearもFillも意図した結果が
入っておりました。

>開発途中で、列名/型定義の変わった列などはありませんでしたか?
ご指摘の通り、途中で変更しておりました。その為、
>Null 値がありえる列に AllowDBNull = False が指定されていないか?
False指定されている部分がありました。
Trueにする事により、エラーは発生しなくなりました。
ありがとうございました。

しかし、問題が。。。。。
Me.IodbDataSet.dtTagList には、SELECT * FROM tbl_tag WHERE tag_type = 'IND' に従い
選択された行のみが存在しますが、画面では選択された行以外の全ての行が表示されてしまう
のです。バインディングナビゲータコントロールの総レコード数も選択にかかわらない総数に
なっていて、実際に表示できてしまうのです。

画面に反映させる為には、何か抜けがあるのでしょうか?


引用返信 編集キー/
■46661 / inTopicNo.9)  Re[6]: データテーブルがクリアできない?
□投稿者/ はつね (1183回)-(2010/02/08(Mon) 15:28:40)
No46650 (すりーぷ さん) に返信
> Me.IodbDataSet.dtTagList には、SELECT * FROM tbl_tag WHERE tag_type = 'IND' に従い
> 選択された行のみが存在しますが、画面では選択された行以外の全ての行が表示されてしまう
> のです。バインディングナビゲータコントロールの総レコード数も選択にかかわらない総数に
> なっていて、実際に表示できてしまうのです。
>
> 画面に反映させる為には、何か抜けがあるのでしょうか?

IodbDataSet.dtTagListの内容をどのように(またはどのようなプロパティ設定で)画面に
反映させているのでしょうか。
引用返信 編集キー/
■46668 / inTopicNo.10)  Re[7]: データテーブルがクリアできない?
□投稿者/ すりーぷ (11回)-(2010/02/08(Mon) 17:59:34)
画面にどうやって反映させるんでしょうか?
引用返信 編集キー/
■46678 / inTopicNo.11)  Re[8]: データテーブルがクリアできない?
□投稿者/ はつね (1186回)-(2010/02/09(Tue) 09:23:17)
No46668 (すりーぷ さん) に返信
> 画面にどうやって反映させるんでしょうか?

現状は画面に表示されていないのですか?
表示されているなら、どこかですでに反映させるコードがあるはずです。

引用返信 編集キー/
■46716 / inTopicNo.12)  Re[9]: データテーブルがクリアできない?
□投稿者/ すりーぷ (12回)-(2010/02/09(Tue) 18:51:35)
解決しました。お騒がせしました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -