Call OpenConn '调用(连接数据库函数)OpenConn
Set rs_1 = DbConn.Execute("SELECT * FROM B表 where Display=1")
If rs_1.EOF Then
Set rs_1 = Nothing
Call CloseConn
MsgBox "没有可显示的列", vbExclamation
Exit Sub
End If'增加ListView1列头
Dim colCount As Long
colCount = rs_1.RecordCount
ReDim aFieldName(colCount - 1) As String
Dim i As Long
i = 0
While Not rs_1.EOF
Dim name, Width
name = rs_1.Fields("name")
Width = rs_1.Fields("Width")
aFieldName(i) = rs_1.Fields("FieldName") '保存下来避免多次循环 rs_1 If i = 0 Then '第一列始终存在
With Me.ListView1.ColumnHeaders(0)
.Key = aFieldName(i)
.Text = name
.Width = Width
End With
Else
Me.ListView1.ColumnHeaders.Add , aFieldName(i), name, Width
End If rs_1.MoveNext
i = i + 1
Wend
Set rs_1 = Nothing'显示列表内容
Set rs = DbConn.Execute("SELECT * FROM A表")
Do While Not rs.EOF
Set Item = ListView1.ListItems.Add(, "k" & rs("ID"), rs(aFieldName(0)), , 0)
For i = 1 To colCount - 1
Item.SubItems(i) = rs.Fields(aFieldName(i))
Next
rs.MoveNext
Loop
Call CloseConn
Set rs_1 = DbConn.Execute("SELECT * FROM B表 where Display=1")
If rs_1.EOF Then
Set rs_1 = Nothing
Call CloseConn
MsgBox "没有可显示的列", vbExclamation
Exit Sub
End If'增加ListView1列头
Dim colCount As Long
colCount = rs_1.RecordCount
ReDim aFieldName(colCount - 1) As String
Dim i As Long
i = 0
While Not rs_1.EOF
Dim name, Width
name = rs_1.Fields("name")
Width = rs_1.Fields("Width")
aFieldName(i) = rs_1.Fields("FieldName") '保存下来避免多次循环 rs_1 If i = 0 Then '第一列始终存在
With Me.ListView1.ColumnHeaders(0)
.Key = aFieldName(i)
.Text = name
.Width = Width
End With
Else
Me.ListView1.ColumnHeaders.Add , aFieldName(i), name, Width
End If rs_1.MoveNext
i = i + 1
Wend
Set rs_1 = Nothing'显示列表内容
Set rs = DbConn.Execute("SELECT * FROM A表")
Do While Not rs.EOF
Set Item = ListView1.ListItems.Add(, "k" & rs("ID"), rs(aFieldName(0)), , 0)
For i = 1 To colCount - 1
Item.SubItems(i) = rs.Fields(aFieldName(i))
Next
rs.MoveNext
Loop
Call CloseConn
但在这句:
With Me.ListView1.ColumnHeaders(0)
出现:
实时错误'35600',索引超出边界这里:
For i = 1 To colCount - 1
Item.SubItems(i) = rs_1.Fields(aFieldName(i))
Next
出现:
实时错误"13":类型不匹配
可能真的被这个问题搞晕了
望指点
我搞错了,ListView 默认是没有列的,所以将 If 去掉全部走 Add 分支>Item.SubItems(i) = rs_1.Fields(aFieldName(i))
你的字段中有空值,按你原先的做法:
Item.SubItems(i) = rs_1.Fields(aFieldName(i)) & ""
还有一个问题,就是:当A表中的的某字段比如增加一个部门的字段BM_ID,在A表用数字表示(该数字与下面的部门表中的id关连),
另外增加C表(部门表),有id,BM_Name、、、等字段,如果用联合查询:
SELECT * FROM A表,C表 WHERE A表.BM_ID=C表.id
这样,应用在上面的
Item.SubItems(i) = rs_1.Fields(aFieldName(i))中,这个字段名应该怎样取值?
因为当A表和B表有相同的字段名时必须加上表名标识,比如
Item.SubItems(1) = rs_1.Fields("A表.字段名)
像这样的多表情况下,应该怎样解决这个问题呢?还有老鸟帮助!
各位高手请关注,谢谢了