LEFTJOINを含むSQLで取得したデータセット更新
- 題名: LEFTJOINを含むSQLで取得したデータセット更新
- 著者: ERI
- 日時: 2011/01/27 15:33:44
- ID: 28079
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: LEFTJOINを含むSQLで取得したデータセット更新
- 著者: shu
- 日時: 2011/01/27 16:10:14
- ID: 28080
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: LEFTJOINを含むSQLで取得したデータセット更新
- 著者: ERI
- 日時: 2011/01/27 16:17:58
- ID: 28081
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
はじめまして、こんにちは。
ERIと申します。
開発環境OS=XPProSP2
使用言語=VB.NET2003
です。
LEFTJOINを含むSQLで取得したデータセットの更新方法について教えてください。
MicrosoftAccess2000で作成したローカルのデータベースファイルに、テーブルAとテーブルBがあるとします。
フィールド構成は以下の通りだとします(名称のみ)。
Aの主キーは[端末番号],[伝票番号]の2つです。
Bの主キーは[ID],[端末番号],[伝票番号]の2つです。
AとBの[端末番号],[伝票番号]が、1対多で関連しています。
テーブル[A]
端末番号
伝票番号
日付
金額
テーブル[B]
ID
端末番号
伝票番号
商品C
商品名
単価
数量
2011年度売上F
以下のコードにおいては、フォームfrmTestにおいて、関数FUNCTIONを実行し、Aの[日付]が2011年以降であるBの[2011年度売上F]を、初期値=0から、1に更新したいと思います。
---------------------------------------------------------------------------------------
Imports System.Data.OleDb
Public Class frmTest
Inherits System.Windows.Forms.Form
Public Function FUNCTION
Dim str1 As String
Dim cnL As OleDb.OleDbConnection
Dim daL As OleDb.OleDbDataAdapter
Dim cbL As OleDb.OleDbCommandBuilder
Dim dsL As New Dataset
Dim dtL As DataTable
Dim drL As DataRow()
Dim i As Integer
Try
str1="SELECT [A].[端末番号],[A].[伝票番号],[A].[日付],[B].[2011年度売上F], " & _
"FROM [A] LEFT JOIN [B] ON ([A].[端末番号]=[B].[端末番号]) AND ([A].[伝票番号]=[B].[伝票番号]) " & _
"WHERE [A].[日付] > "#2010/12/31#""
cnL = New OleDb.OleDbConnection(データベース接続文字列)
daL = New OleDb.OleDbDataAdapter(str1,cnL)
daL.Fill(dsL,"A")
dtL = dsL.Tables("A")
drL = dtL.Select()
If drL.Length > 0 Then
cbL = New OleDb.OleDbCommandBuilder(daL)
For i = 0 To drL.Length - 1
drL(i).BeginEdit()
drL(i)("2011年度売上F") = 1
drL(i).EndEdit()
daL.Update(dsL,"A")
Next
End If
Return True
Catch ex As Exception
MessageBox.Show(ex.Message,"エラー",MessageBoxButtons.OK,MessageBoxIcon.Error)
Return False
End Try
End Function
End Class
----------------------------------------------------------------------------------------
上記のコードを実行しますと、daL.Update(dsL,"A")の行において、
「複数のベーステーブルに対する動的SQLの生成はサポートされません」
とエラーが出てしまいます。
str1のSQL文が、LEFTJOINを含まない、1つのテーブルだけからなるものであれば、
このようなエラーは起きないと思うのですが、
このような場合、OleDbCommandBuilderの方法を使用するのは、
適切ではないでしょうか。
もし適切でない場合、どのような更新方法を使えばよいのか、
分かりません。
どなたかお分かりになられる方がいらっしゃいましたら、
誠にお手数と存じますが、
ご指導よろしくお願い致します。