DOBON.NET DOBON.NETプログラミング掲示板過去ログ

行の追加について

  • 題名: 行の追加について
  • 著者: 初心者です。
  • 日時: 2006/01/31 11:46:38
  • ID: 14770
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[環境(WindowsXP)、使用言語(VB.NET)、.NET Framework(1.1)]
分類:[ASP.NET]

初めて書き込みさせていただきます。
仮想テーブルに行を複数行追加したいのですが、上手くいきません。
いろいろなサンプルを参考に作成してみたのですが、
1行目は追加できるのですが、2行目に追加したい行が1行目に上書きされてしまいます。
どなたかご教授ください。

現在までに作成したコードです。
−−−−−−−−−−−−−−−−−−−−
Dim oDataRow As DataRow
Dim i As Integer
Dim o As Integer

For i = 0 To Session("ListCnt") - 1

  '既存のテーブル
Application("TABLENAME") = moDB.GetDataSet("SELECT TOP 1 * FROM TABLENAME " & _
"WHERE 車両売上営業所コード ='" & vEcode & "' AND 車両売上番号 =" & pNumber & "", "TABLENAME")

'///TABLENAMEの初期セット
oDataRow = Application("TABLENAME").Tables("TABLENAME").NewRow
oDataRow("売上入金区分") = "1"
oDataRow("契約フラグ") = "0"
oDataRow("作成日") = Now.Year & "/" & Now.Month & "/" & Now.Day

Application("TABLENAME").Tables("TABLENAME").Rows.Add(oDataRow)

  'レコード数の確認
o = Application("TABLENAME").Tables("TABLENAME").Rows.Count()

Next

分かりにくくてすいません。
レコード数は1から変わりません。
よろしくお願いします。
お世話になります。

■No14770に返信(初心者です。さんの記事)
Application("TABLENAME") には、DataSet が入っていて、
Application("TABLENAME").Tables("TABLENAME") には、DataTable が入っている
のですね。

> moDB.GetDataSet
この実装がどうなってるかによるのですが、
Dataset.Clear とか、DataTable.Clear とか
もしくは、New してたりしませんか?

あと、NewRow() の前に、
ウォッチ等で
Application("TABLENAME").Tables("TABLENAME").Rows.Count を見た時、
件数がどうなっているか確認してみると良いかもしれません。
なおこ(・∀・)さん、返信ありがとうございます。

■No14774に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> ■No14770に返信(初心者です。さんの記事)
> Application("TABLENAME") には、DataSet が入っていて、
> Application("TABLENAME").Tables("TABLENAME") には、DataTable が入っている
> のですね。
>
>>moDB.GetDataSet
> この実装がどうなってるかによるのですが、
> Dataset.Clear とか、DataTable.Clear とか
> もしくは、New してたりしませんか?
>
> あと、NewRow() の前に、
> ウォッチ等で
> Application("TABLENAME").Tables("TABLENAME").Rows.Count を見た時、
> 件数がどうなっているか確認してみると良いかもしれません。


自分なりにいろいろ考えましたが、どうすることもできず困っていました。
アドバイスをいただき、感謝しています。

まず、もう一度、 moDB.GetDataSet を見直してみます。
それと、
Application("TABLENAME").Tables("TABLENAME").Rows.Count の確認もして見ます。

ありがとうございました。
2006/02/01(Wed) 15:11:06 編集(投稿者)

SQL分のあるところでは検索を実行していると仮定して
そもそも、forループの中で、検索を実行している事がおかしいのでは?
行を追加する対象が行を追加する手順の中で再セットされているような?

a.入れ物ゲット(この場合DataSet?)
b.入れ物に行追加

の二つの手順があって

普通に考えると まずaをしてbを複数回行うですが [abbb]
このコードは aとbを交互に複数回しているように見えます [ababab]

毎回同じ結果になるのが当然と見受けますが
  • 題名: Re[4]: 行の追加について
  • 著者: 初心者です。
  • 日時: 2006/02/01 18:19:01
  • ID: 14797
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No14794に返信(SadManさんの記事)
> 2006/02/01(Wed) 15:11:06 編集(投稿者)
>
> SQL分のあるところでは検索を実行していると仮定して
> そもそも、forループの中で、検索を実行している事がおかしいのでは?
> 行を追加する対象が行を追加する手順の中で再セットされているような?
>
> a.入れ物ゲット(この場合DataSet?)
> b.入れ物に行追加
>
> の二つの手順があって
>
> 普通に考えると まずaをしてbを複数回行うですが [abbb]
> このコードは aとbを交互に複数回しているように見えます [ababab]
>
> 毎回同じ結果になるのが当然と見受けますが
>

SadManさん返信ありがとうございます。

ご指摘の通りでした。
初歩的なことに気づかず、悩んでしまいました。

下記の通り
a.入れ物ゲット の部分をforループの外に出すことで解決いたしました。

**************************************
Dim oDataRow As DataRow
Dim i As Integer
Dim o As Integer

'既存のテーブル
Application("TABLENAME") = moDB.GetDataSet("SELECT TOP 1 * FROM TABLENAME " & _
"WHERE 車両売上営業所コード ='" & vEcode & "' AND 車両売上番号 =" & pNumber & "", "TABLENAME")

For i = 0 To Session("ListCnt") - 1

'///TABLENAMEの初期セット
oDataRow = Application("TABLENAME").Tables("TABLENAME").NewRow
oDataRow("売上入金区分") = "1"
oDataRow("契約フラグ") = "0"
oDataRow("作成日") = Now.Year & "/" & Now.Month & "/" & Now.Day

Application("TABLENAME").Tables("TABLENAME").Rows.Add(oDataRow)

  'レコード数の確認
o = Application("TABLENAME").Tables("TABLENAME").Rows.Count()

Next
******************************************

なおこ(・∀・)さん
  いち早くの返信ありがとうございました。おかげさまでmoDB.GetDataSetを見直すことができました。

SadManさん
  大変分かりやすく、的確な指示でしたので解決することができました。

お二人ともありがとうございました。
また、何かあったらよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板