- PR -

DataGridを表示するとき、今度は・・・

投稿者投稿内容
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-19 17:17
お世話になっております。
以前、DataGridを使って質問をさせていただき、何とか問題解決ができたのですが、
今度は意味不明な・・・

よろしくお願いします。

.NET VBで開発しております。DBはSqlServerです。

SqlDataAdapter3.SelectCommand.CommandText = "SELECT * FROM ViewTbl;"
SqlDataAdapter3.Fill(DataSet31)
WrkGrid.DataSource = DataSet31
WrkGrid.DataBind()
として、実行すると、
「制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています。 」
ということを言ってきます。
データ行が0行のときは、何も言わず項目名だけ表示するのですが、
データを1行でも入れようなら、上記メッセージで表示してくれません。

Selectしているのは、Viewテーブルで、Viewはデータテーブルとマスタテーブルを
参照しています。
SQLレベルでは、実行可能なViewであることを確認しています。

どのような意味なのかおわかりになりますでしょうか?
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-19 17:59
 DataSet31を、どのように構成していますか?その中の"ViewTbl"に、制約が設定されています。おそらく、VS.NETのXMLデザイナで、制約を追加していると思われます。
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-19 18:04
Jittaさん、ご意見ありがとうございます。

DataSet31は、SqlAdapterの「データセットの生成」を選んで作成しました。
その中に制約があるということですが、作成時の制約でしょうか?
それとも、SqlAdapterとDataSet31の制約でしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-19 18:26
引用:

なぼなさんの書き込み (2004-08-19 18:04) より:

DataSet31は、SqlAdapterの「データセットの生成」を選んで作成しました。


その後に、ファイルを開いて何か触りませんでしたか?
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-20 12:47
Jittaさんありがとうございます。

ん〜、何かファイルをいじったか?
といわれると、ソースを記述しているので、触っていますね。
ということは、再度アダプターと、データセットを
再作成して、ウィザード通りにしておけばよいのですかね。
やってみたいと思います。
なぼな
ベテラン
会議室デビュー日: 2004/08/04
投稿数: 61
投稿日時: 2004-08-21 17:57
お世話になっております。

すみません、SqlAdapterとDataSetを再作成しましたが、
「制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています」
といわれます。

WebFormにDataGridを2つ配置しています。
1つのデータベースにアクセスし、2つのViewテーブルにアクセスしています。
1つのViewテーブルに1つのDataGridです。
Connectionは1つで、SqlAdapterは2つ、DataSetも2つ作成して
動作確認しています。

どなたかこんな経験されている方はいらっしゃいますでしょうか?
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-21 22:15
DataSet31 だと DataSet3.xsd というファイルがあるはずです。
「DataSet3.xsd」でなければ xsd 拡張子の中から開いて見つけてください。
開き方はソリューションエクスプローラの該当項目をダブルクリックするだけです。

データセット/XMLのタブをXMLにします。

こんな感じの行があるでしょう。
<xs:element name="自宅電話番号" type="xs:string" />
<xs:element name="自宅PCメールアドレス" type="xs:string" minOccurs="0" />
minOccurs="0" が無い行は「Null」を許容しない行です。

<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:会員マスタ" />
<xs:field xpath="mstns:店舗コード" />
<xs:field xpath="mstns:会員コード" />
</xs:unique>
こんな感じのブロックがあったらそれはプライマリキーです同じ組は許されません。

なぼなさんの思ったとおりになっているか確認してみてください。
プライマリキーはなく、「Null」を許容しない行はマスターと同じ状態のはずです。
_________________
〜〜〜〜〜〜〜〜
えムナウ
http://www.geocities.jp/mnow
mnow@yahoo.co.jp
〜〜〜〜〜〜〜〜

[ メッセージ編集済み 編集者: えムナウ 編集日時 2004-08-21 22:18 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 08:06
引用:

なぼなさんの書き込み (2004-08-21 17:57) より:

すみません、SqlAdapterとDataSetを再作成しましたが、
「制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています」
といわれます。


 DataSetの作成を、どのようにしましたか?おそらく、viewではなく、tableを元に作成されており、tableの制約がそのまま継承されているようです。DataSetを編集して使わなければならないでしょう。・・・編集の仕方をここで説明するのは難しい。。。

スキルアップ/キャリアアップ(JOB@IT)