tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルデータセットに行を追加
記事No386
投稿日: 2003/08/28(Thu) 12:16
投稿者hiromi
[OSのVer]:Windows    [VBのVer]:VB.NET  

ACCESSで作成済みのDBシステムをVB.NETで作成しなおしています。
ところが簡単なところで引っかかってしまって先に進めません。
どなたかご教授お願いします。

フォームにテキストボックスを配置し、データセットの内容を表示させ、編集、新規などの処理を行
っていま
す。
表示、編集は上手くいくのですが、新規登録が出来ません。
コードをデバグモードで追ってみると、下記の部分でおかしくなっています。

     r = Ds1.TABLE1.NewRow
     r("ID") = IDNo '(新規ID番号)
     Ds1.TABLE1.Rows.Add(r)
     Me.BindingContext(Ds1, "TABLE1").Position = Me.BindingContext(Ds1, "TAB
LE1").Count - 1

最後行の、Me.BindingContext(Ds1, "TABLE1").Count はデータセットに新規行が追加され
た数になりま
す。
でも、最終行実行後の、Me.BindingContext(Ds1, "TABLE1").Position は0になってしま
います。
ようするに、データセットに行が追加されてもその行に移動することが出来ないのです。

ちなみに、テーブルには項目が多いので、項目数を5つに減らしてテストしたところ、正しく追加さ
れまし
た。
原因はテーブル構造にあるのかと、ACCESSで項目のプロパティを何度も見ましたが、あやしいところ
はありま
せん。
データグリッドを使って新規に追加できるかどうか試してみましたが、この場合は上手くいきます。
何か、こころあたりおありの方はぜひ、教えてください。お願いします。

[ツリー表示へ]
タイトルRe: データセットに行を追加
記事No396
投稿日: 2003/08/31(Sun) 13:04
投稿者しんじ
[OSのVer]:Windows    [VBのVer]:VB.NET  
> [OSのVer]:Windows    [VBのVer]:VB.NET  
>

Accsesではやったことが無いので外していたらごめんなさい。
いま環境が無いので詳しいコードは記載できませんが、
私もSQLServer2000とのINSERTで同じようにはまりました。

ADO.NETの仕様でIDENTITI列(ACSESSの場合はオートナンバー型)をADO.NETでインクリメント
しようとするとこのような事になります。
ADO.NETでオートナンバーを処理しているのであれば参考にして下さい
この事が記載されていたMicrosoftPressのADO.NET(日経BP)のDataAdapterの所に記載されています。
詳細は本屋さんで立ち読みでもしてみてください。
(解決策も記載されています)
※この書籍DB開発者にはかなり使えるので購入しても損はしないと思います。

これが思いつく一点です。

>>データセットに行が追加されてもその行に移動することが出来ないのです。

Datasetの更新が保留になってないでしょうか?

hhttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingparameterswithdataadapters.asp

DataAdapterを使った更新ですが今後の事もありますし、上記URLを参考にしてください。
DataadapterのInsertCommandを使用する方がコードもすっきりするし、ROWプロパティを追わなくて良いのでお勧めです。
(いつでも何処でも指定された行に移動できるのがADO.Net、DATASETオブジェクトの売りでもあります)

>>ちなみに、テーブルには項目が多いので、項目数を5つに減らしてテストしたところ、正しく追加されました。

列数を減らしてうまくいくという事はテーブル構造もしくはテーブルを取得する部分のコードが
間違えている可能性が一番高いと思います。
(私的にはこれじゃないかな?とおもっています。)

>>データグリッドを使って新規に追加できるかどうか試してみましたが、この場合は上手くいきます。

DATASETの内容をDataGridに取り込んだ時点で両方の繋がりは切れてしまうので
多分Datagridの内容を編集しているだけでDatasetには影響を与えていないと思われます。
もし、リアルタイムで更新できる方法があるのであれば是非教えてください。汗

今私がどうやったらDatagridの変更内容をDatasetに反映できるか(変更を保留にできるか)
調べているところです。これが出来るとDATASETの変更内容を目で監視できるので本当にすばらしいのですが、、、

この開発補助ツールが出来ない故にいつもリモートデバッカでデータの値を調べております。泣

この件が分かる方便乗で申し訳ないですが教えてください。

[ツリー表示へ]
タイトルRe^2: データセットに行を追加
記事No397
投稿日: 2003/09/01(Mon) 09:15
投稿者hiromi
ご丁寧にアドバイスしてくださり、本当にありがとうございます☆

ご指摘の1番目のオートナンバー型ですが、ACCESSで作成したときは使用していましたが、
ADO.NETでは使用できないとなにかで読んだ気がしたので、整数型に変更してあります。

その他に関しては、これからご指定のHPをよく読んでみます。
テーブルも、最初から作りなおしてみようと思っています。

とりあえずお礼をいいたくて、返信しました。
ありがとうございました。

[ツリー表示へ]