またまたすみません。
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・費目名が入ってます。
どなたかご教授おねがいします。
>データを登録することが出来ません。
これだけでは分かりません。
どの様に登録されないのですか?
エラー内容を記述してください。
あと、DBの接続部分、kbMain、KakeiboMain1が何者なのか
記載してください。
>KakeiboMain1.トランザクション.NewRow()
トランザクションて???
名前から勝手に判断しますが、コミットし忘れ?・・・いや、
そのトランザクションでは無いようですね・・・
>kbMain.Update(Mokuteki1)
するまえにDBに接続されていないとか?
とにかく情報が少なすぎます。
DataTable に行を追加しただけでは、データは更新されません。
その DataTable を DataAdapter の Update メソッドに渡しましょう。
もし、そこまでやっているのに、更新処理が行えないようであれば、
下記の点を見直してみてください。
1. DataTable に Rows.Add した後、想定したデータが DataTable に
登録されているか?
(例外処理などで、行追加時に発生したエラーを握りつぶしていないか?)
2. 追加した行の RowState は、Added になっているか?
(AcceptChanges 相当の処理によって、Unchanged になっていないか?)
3. DataAdapter の InsertCommand (ついでに UpdateCommand / DeleteCommand も)に
登録されている SQL 文は適切か?
(主キー相当の項目が検索条件に含まれているか?)
DBの接続部分、kbMain、KakeiboMain1が何者なのか
kbMain→SqlDataAdapter
KakeiboMain1→データセット名
>トランザクションて???
テーブル名です。
登録なのですが、
登録するところ(Form)の項目がトランザクションというテーブルの中に更新されていかないんです。
>登録するところ(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
レス時に記述しているのでバグってるかもしれません。
参考程度にしてください。
ツイート | ![]() |