ページの入力を登録するには??


ピン  2007-01-30 08:26:31  No: 135095

またまたすみません。

OS:Windows XP
Microsoft SQLServer2000

動作環境  Microsoft Visual Basic .NET 2003

登録するフォームを作っています。ですが、データを登録することが出来ません。私が作ったソースプログラムは、
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
kbMain.Fill(KakeiboMain1, "トランザクション")
mokuteki.Fill(Mokuteki1, "費目")

End Sub
Private Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
Dim dr As kbMain.トランザクションRow = KakeiboMain1.トランザクション.NewRow()

If ComboBox1.SelectedIndex = -1 Then
MsgBox("目的が指定されてません")
ComboBox1.Select()
Return
End If

If TextBox1.Text = "" Then
MsgBox("金額が入力されていません")
TextBox1.Select()
Return
End If

If TextBox2.Text = "" Then
MsgBox("摘要が入力されてません")
TextBox2.Select()
Return
End If
Try
KakeiboMain1.Clear()
KakeiboMain1.トランザクション.Rows.Add(dr)

Catch ex As Exception
kbMain.Update(Mokuteki1)
Catch except As System.Exception
MsgBox(except.Message, MsgBoxStyle.OKOnly, Me.Text)
Exit Sub
End Try

End Sub
登録するところ(Form)には、
目的・金額・個数・摘要・メモという欄があります。
プログラム内の「トランザクション」というのは、年・月・日・費目・金額・個数・摘要・メモという登録したものがそこに表示されるところです。
「費目」というのは、費目ID・費目名が入ってます。

どなたかご教授おねがいします。


モーヲタ  2007-01-30 08:44:24  No: 135096

>データを登録することが出来ません。
これだけでは分かりません。
どの様に登録されないのですか?
エラー内容を記述してください。

あと、DBの接続部分、kbMain、KakeiboMain1が何者なのか
記載してください。

>KakeiboMain1.トランザクション.NewRow()
トランザクションて???

名前から勝手に判断しますが、コミットし忘れ?・・・いや、
そのトランザクションでは無いようですね・・・

>kbMain.Update(Mokuteki1)
するまえにDBに接続されていないとか?

とにかく情報が少なすぎます。


魔界の仮面弁士  2007-01-30 18:29:58  No: 135097

DataTable に行を追加しただけでは、データは更新されません。
その DataTable を DataAdapter の Update メソッドに渡しましょう。

もし、そこまでやっているのに、更新処理が行えないようであれば、
下記の点を見直してみてください。

1. DataTable に Rows.Add した後、想定したデータが DataTable に
  登録されているか?
  (例外処理などで、行追加時に発生したエラーを握りつぶしていないか?)

2. 追加した行の RowState は、Added になっているか?
  (AcceptChanges 相当の処理によって、Unchanged になっていないか?)

3. DataAdapter の InsertCommand (ついでに UpdateCommand / DeleteCommand も)に
  登録されている SQL 文は適切か?
  (主キー相当の項目が検索条件に含まれているか?)


ピン  2007-01-30 18:42:22  No: 135098

DBの接続部分、kbMain、KakeiboMain1が何者なのか
kbMain→SqlDataAdapter
KakeiboMain1→データセット名
>トランザクションて???
テーブル名です。

登録なのですが、
登録するところ(Form)の項目がトランザクションというテーブルの中に更新されていかないんです。


モーヲタ  2007-01-31 06:41:35  No: 135099

>登録するところ(Form)の項目がトランザクションというテーブルの中に更新されていかないんです。
Dim dr As kbMain.トランザクションRow = KakeiboMain1.トランザクション.NewRow()
という宣言部がありますよね。その後に
drに対して値を挿入してますか?
drに値をセットした後、
KakeiboMain1.トランザクション.Rows.Add(dr)
を実行してみてください。

また、KakeiboMain1.トランザクション.Rows.Add(dr)する前に
KakeiboMain1.Clear()があるのですが、これは仕様的にOKなんですか?

以下サンプルコードを提示しておきます。

DataSet      DSObj

'〜データセットの初期化処理等は省略〜

DataTable    r = DSObj.Tables("テーブル名").NewRow()
'rにデータ格納
r("フィールド名") = NoTxt.Text
'・・・以下データ格納をフィールド数分格納する〜省略〜

'データを追加
DSObj.Tables("テーブル名").Rows.Add(r)
'おまじないその1(意味は自分で調べてね)
DataTable    tb = DSObj.Tables("テーブル名").GetChanges(DataRowState.Added)
'データベース更新
Try
    'データベースを切断していたら接続しておく
    objCN.Open() 'objCNはデータコネクションです。
    '※ADDRDAObjはデータアダプタです。
    int    UpdateCnt = ADDRDAObj.Update(tb)    'データベース更新
    'おまじないその2(意味は自分で調べてね)
    DSObj.Tables("テーブル名").AcceptChanges()
Catch(〜略〜)
    'おまじないその3(意味は自分で調べてね)
    DSObj.Tables("テーブル名").RejectChanges()
Finally
    'データベースを切断する場合(必須ではない)
    objCN.Close()                       'データベース切断
End Try

レス時に記述しているのでバグってるかもしれません。
参考程度にしてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加