- 題名: Accessのリレーション
- 日時: 2003/10/09 17:31:39
- ID: 897
- この記事の返信元:
- (なし)
- この記事への返信:
- [898] Re[1]: Accessのリレーション2003/10/09 17:53:59
- ツリーを表示
fukuです。自分の環境では正常に動作しました。
ちなみにVisual Studio2003です。
あと、MSのDB接続コントロールは、VB6.0のADODCでやっつけられたので
接続系のコントロールは使っていません。
(どうもソースの貼り付け方がわからないので都合の良いところで
改行、TABあわせしてください)
Private m_MyDataSet As DataSet
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myOleDbConnection As OleDb.OleDbConnection
Dim myOleDbCommand As New OleDb.OleDbCommand
Dim myOleDbDataAdapter As OleDb.OleDbDataAdapter
Dim intRecCnt As Integer = 0
Dim strCnnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TEST\USER.mdb;Persist Security Info=False"
Dim strSQL As String
Try
'データ読み込み
myOleDbConnection = New OleDb.OleDbConnection(strCnnString)
myOleDbConnection.Open()
strSQL = "SELECT userlist.userName AS tantou, list.date, userlist_1.userName AS aite "
strSQL = strSQL & "FROM (list LEFT JOIN userlist ON list.tantou = userlist.userID) "
strSQL = strSQL & "LEFT JOIN userlist AS userlist_1 ON list.aite = userlist_1.userID;"
myOleDbCommand.CommandText = strSQL
myOleDbCommand.CommandType = CommandType.Text
myOleDbCommand.Connection = myOleDbConnection
myOleDbDataAdapter = New OleDb.OleDbDataAdapter(myOleDbCommand)
'DataGridへ設定
m_MyDataSet = New DataSet
intRecCnt = myOleDbDataAdapter.Fill(m_MyDataSet, "Q_ユーザー情報")
Me.DataGrid1.DataSource = m_MyDataSet
Me.DataGrid1.DataMember = "Q_ユーザー情報"
Me.DataGrid1.Refresh()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
Finally
If IsNothing(myOleDbDataAdapter) = False Then
myOleDbDataAdapter.Dispose()
myOleDbDataAdapter = Nothing
End If
If IsNothing(myOleDbCommand) = False Then
myOleDbCommand.Dispose()
myOleDbCommand = Nothing
End If
If IsNothing(myOleDbConnection) = False Then
If myOleDbConnection.State <> ConnectionState.Closed Then
myOleDbConnection.Close()
End If
myOleDbConnection.Dispose()
myOleDbConnection = Nothing
End If
End Try
End Sub
以下のような場合のリレーションがVB.netで作成できないので、
なにかアイデアがあったらお願いします。
「list」と「userlist」という2つのテーブルがあります。
リスト ユーザーリスト
「list」 「userlist」
tantou userID
date userName
aite
というテーブルにおいて、tantouとaiteはそれぞれユーザーリストに情報が入っています。
[list]のtantouと[userlist]のuserIDとリレーションさせて、[userlist]のuserNameに、
[list]のaiteも[userlist]のuserIDとリレーションさせて、[userlist]のuserNameという形で置き換え、
置き換えた形でDataGridに表示を行う。
データクエリを用いて、[userlist]のuserIDに2つのリレーションを引いた場合はSQL上でAND処理されて、それぞれの表示ができなく、
[userlist]のテーブルを2つにしてそれぞれリレーションさせてみたりした場合は、演算子がありませんといったエラーがでました。
DBはAccess2000を使用しています。
SQL文的なことであるかもしれませんが、お願いします。