SQL语句多表查询后,通过MSFlexGrid1显示的问题??

时间:2021-09-28 05:24:15
操作系统:WIN98SE 
开发平台:VB6+SP5 
数据库:ACCESS2000 
源码部份如下: 
if rsUser.State<>0 then rsUser.Close 
rsUser.Open ("SELECT [025A].*,[025B].* FROM [025A],[025B]") ' WHERE [025A].ID=[025B].ID") 
With MSFlexGrid1 
.Rows = 2 
.Cols = 22 
.TextMatrix(1, 0) = "处理号" 
.TextMatrix(1, 1) = "发报社号" 
.TextMatrix(1, 2) = "发报社名" 
.TextMatrix(1, 3) = "收报社号" 
.TextMatrix(1, 4) = "收报社名" 
.TextMatrix(1, 5) = "金额" 
.TextMatrix(1, 6) = "收款社名称" 
.TextMatrix(1, 7) = "付款单位名称" 
.TextMatrix(1, 8) = "收款单位账号" 
.TextMatrix(1, 9) = "编报日期" 
.TextMatrix(1, 10) = "状态值" 
Do While Not rsUser.EOF 
.Rows = .Rows + 1 
.TextMatrix(.Rows - 1, 0) = rsUser.Fields("025A.ID") 
.TextMatrix(.Rows - 1, 1) = rsUser.Fields("025A.FaBaoSheHao") '发报社号 
....................................其它同样处理的重复语句省略! 
rsUser.MoveNext 
Loop 
Do While Not rsUser.EOF 
.TextMatrix(.Rows - 1, 11) = rsUser.Fields("025B.ID") 
.TextMatrix(.Rows - 1, 12) = rsUser.Fields("025B.FaBaoSheHao") '发报社号 
..................................其它同样处理的重复语句省略! 
rsUser.MoveNext 
Loop 
End With 

目的:是想通过MSFlexGrid1控件先显示[025A]表中的数据,然后再显示出[025B]表中的数据。可是程序一执行MSFlexGrid1控件只显示[025A]表中的内容,而不显示[025B]表中的内容,只是显示的行数增加了如[025A]表中本来有5条记录,那么MSFlexGrid1控件显示出10条记录来。不过都是[025A]表中的内容只是数据被重复显示了。 

请问我的问题出在什么地方?

8 个解决方案

#1


做两次查询,向msflexgrid写两次数据那?

#2


wangintel(cedbak) (  ) 信誉:100 

做两次查询,向msflexgrid写两次数据那?

====如果这样得话上一次查询的调用,会被最近一次的调用所取代。

#3


是不是rsuser的数据光标不对?是前滚类型
这样你数据指针往后滚后不能再往前滚。所以不能再返回来显示

上面你也没写 rs.movefirt,再次显示的时候要重新移到首位

#4


hollyzp(大树) 
上面你也没写 rs.movefirt,再次显示的时候要重新移到首位


====我试着改了,可是问题还是老样子。。
显示的记录只是[025A]表中的记录,,如下例所示一样:
1......
2......
3......
4......
5.....省略(025A)表中就五个记录,然后他再进行反复显示这5个记录信息。
1.....
2....
3....
4....
5....
........就这样一直重复。。一直到行等于设置的(.Cols = 22)行。为止。

#5


我顶…;(

#6


简直是胡说八道之至,你在逗大家玩呢????

以上程序有很多明显的毛病,列举如下:
1   .TextMatrix(1, 0) = "处理号" 
把列头设置在第二行?那么头上空了一行你拿来干什么?

2   .Cols = 22 
你设置了那么多列,但是列头又只用到11列???后面的就空着?

3   
Do While Not rsUser.EOF 
.TextMatrix(.Rows - 1, 11) = rsUser.Fields("025B.ID") 
.TextMatrix(.Rows - 1, 12) = rsUser.Fields("025B.FaBaoSheHao") '发报社号 
..................................其它同样处理的重复语句省略! 
rsUser.MoveNext 
Loop 

如果你上面没有加rsUser.MoveFirst,那么这一段根本就不会被执行;
如果你加了,那么这一段会反复在最后一行的后面13列不停的写入你的
025B表内容,写了又写。这是什么烂程序????

这个程序的执行根本不可能出现你所说的情况。歇菜吧你。一边玩去。


#7


'以下由蔡佳旺编写好像是你要的
Public Function GetFLexString(oFlex As MSHFlexGrid, lRow As Long, lCols As Long) As String
    'lRow 是那行 lCols是列总数 Flex 的列是从1开始的
    Dim I As Long
    Dim sTemp As String
    For I = 1 To lCols - 1
        sTemp = sTemp & vbTab & oFlex.TextMatrix(lRow, I)
        DoEvents
    Next I
    GetFLexString = sTemp
    
    
End Function
Public Sub SetCellWidth(oFlex As MSHFlexGrid)
Dim I As Integer
With oFlex

For I = 1 To .Cols - 1
    DoEvents
    .ColWidth(I) = 1200
    
Next I

End With

End Sub
Public Sub FillRecorSetToFlex(oFlex As MSHFlexGrid, recTmp As Recordset)
    Dim fieTmp As Field
    Dim sTmp As String
    Dim sCaption As String
    Dim lI As Long
        If recTmp.EOF And recTmp.BOF Then
            oFlex.Clear
            Exit Sub '如果记录集中不含任何记录,则什么都不干
        End If
    recTmp.MoveFirst
    recTmp.MoveLast
    
    oFlex.ColWidth(0) = 300
        If recTmp.EOF And recTmp.BOF Then Exit Sub '如果记录集中不含任何记录,则什么都不干
    '填充标题栏
    For Each fieTmp In recTmp.Fields
        DoEvents
        sCaption = sCaption & "|^" & fieTmp.Name
    Next fieTmp
    sCaption = sCaption & "|"
    oFlex.FormatString = sCaption
    SetCellWidth oFlex

    '填充栏中数据
    oFlex.Cols = recTmp.Fields.Count + 1 '设置列数
    oFlex.Rows = 2 '设置行数
    recTmp.MoveFirst
For lI = 0 To recTmp.RecordCount - 1
    For Each fieTmp In recTmp.Fields '取得一个记录的全部字段的值
        sTmp = sTmp & vbTab & fieTmp.Value
        DoEvents
        
    Next fieTmp
    recTmp.MoveNext
    oFlex.AddItem sTmp '添加数据
    sTmp = "" '清空变量
Next lI

SetCellWidth oFlex '设置列宽
End Sub

#8


junglerover(灌木丛) 兄教训得是,我上面的代码有问题,,现在更改后就可以达到上述的效果了。。

代码部份如下:
If rsUser.State <> 0 Then rsUser.Close '关闭上次调用 '关闭上次调用
                        rsUser.Open ("SELECT [025A].*,[025B].* FROM [025A],[025B] WHERE [025A].ID=[025B].ID")
                        With MSFlexGrid1
                            .Rows = 2
                            .Cols = 11
                            .TextMatrix(1, 0) = "处理号"
                            .TextMatrix(1, 1) = "发报社号"
                            .TextMatrix(1, 2) = "发报社名"
                            .TextMatrix(1, 3) = "收报社号"
                            .TextMatrix(1, 4) = "收报社名"
                            .TextMatrix(1, 5) = "金额"
                            .TextMatrix(1, 6) = "收款社名称"
                            .TextMatrix(1, 7) = "付款单位名称"
                            .TextMatrix(1, 8) = "收款单位账号"
                            .TextMatrix(1, 9) = "编报日期"
                            .TextMatrix(1, 10) = "状态值"
                            Do While Not rsUser.EOF
                                .Rows = .Rows + 1
                                .TextMatrix(.Rows - 1, 0) = rsUser.Fields("025A.ID")
                                .TextMatrix(.Rows - 1, 1) = rsUser.Fields("025A.FaBaoSheHao") '发报社号
                                .TextMatrix(.Rows - 1, 2) = rsUser.Fields("025A.FaBaoSheMing") '发报社名
                                .TextMatrix(.Rows - 1, 3) = rsUser.Fields("025A.ShouBaoSheHao") '收报社号
                                .TextMatrix(.Rows - 1, 4) = rsUser.Fields("025A.ShouBaoSheMing") '收报社名
                                .TextMatrix(.Rows - 1, 5) = Format(rsUser.Fields("025A.JinEe"), "##,###.#0") '金额
                                .TextMatrix(.Rows - 1, 6) = rsUser.Fields("025A.ShouKuanSheMingCen") '收款社名称
                                .TextMatrix(.Rows - 1, 7) = rsUser.Fields("025A.ShouKuanDanWeiZhangHao") '收款单位账号
                                .TextMatrix(.Rows - 1, 8) = rsUser.Fields("025A.FuKuanDanWeiMingCen") '付款单位名称
                                .TextMatrix(.Rows - 1, 9) = Format(rsUser.Fields("025A.BianBaoRiQi"), "yyyy-mm-dd") '编报日期
                                .TextMatrix(.Rows - 1, 10) = rsUser.Fields("025A.ZhuangTai") '状态值
                                rsUser.MoveNext
                            Loop
                            '将记录再移到记录首
                            rsUser.MoveFirst
                            Do While Not rsUser.EOF
                                .Rows = .Rows + 1
                                .TextMatrix(.Rows - 1, 0) = rsUser.Fields("025B.ID")
                                .TextMatrix(.Rows - 1, 1) = rsUser.Fields("025B.FaBaoSheHao") '发报社号
                                .TextMatrix(.Rows - 1, 2) = rsUser.Fields("025B.FaBaoSheMing") '发报社名
                                .TextMatrix(.Rows - 1, 3) = rsUser.Fields("025B.ShouBaoSheHao") '收报社号
                                .TextMatrix(.Rows - 1, 4) = rsUser.Fields("025B.ShouBaoSheMing") '收报社名
                                .TextMatrix(.Rows - 1, 5) = Format(rsUser.Fields("025B.JinEe"), "##,###.#0") '金额
                                .TextMatrix(.Rows - 1, 6) = rsUser.Fields("025B.ShouKuanSheMingCen") '收款社名称
                                .TextMatrix(.Rows - 1, 7) = rsUser.Fields("025B.ShouKuanDanWeiZhangHao") '收款单位账号
                                .TextMatrix(.Rows - 1, 8) = rsUser.Fields("025B.FuKuanDanWeiMingCen") '付款单位名称
                                .TextMatrix(.Rows - 1, 9) = Format(rsUser.Fields("025B.BianBaoRiQi"), "yyyy-mm-dd") '编报日期
                                .TextMatrix(.Rows - 1, 10) = rsUser.Fields("025B.ZhuangTai") '状态值
                                rsUser.MoveNext
                            Loop
                            End With

#1


做两次查询,向msflexgrid写两次数据那?

#2


wangintel(cedbak) (  ) 信誉:100 

做两次查询,向msflexgrid写两次数据那?

====如果这样得话上一次查询的调用,会被最近一次的调用所取代。

#3


是不是rsuser的数据光标不对?是前滚类型
这样你数据指针往后滚后不能再往前滚。所以不能再返回来显示

上面你也没写 rs.movefirt,再次显示的时候要重新移到首位

#4


hollyzp(大树) 
上面你也没写 rs.movefirt,再次显示的时候要重新移到首位


====我试着改了,可是问题还是老样子。。
显示的记录只是[025A]表中的记录,,如下例所示一样:
1......
2......
3......
4......
5.....省略(025A)表中就五个记录,然后他再进行反复显示这5个记录信息。
1.....
2....
3....
4....
5....
........就这样一直重复。。一直到行等于设置的(.Cols = 22)行。为止。

#5


我顶…;(

#6


简直是胡说八道之至,你在逗大家玩呢????

以上程序有很多明显的毛病,列举如下:
1   .TextMatrix(1, 0) = "处理号" 
把列头设置在第二行?那么头上空了一行你拿来干什么?

2   .Cols = 22 
你设置了那么多列,但是列头又只用到11列???后面的就空着?

3   
Do While Not rsUser.EOF 
.TextMatrix(.Rows - 1, 11) = rsUser.Fields("025B.ID") 
.TextMatrix(.Rows - 1, 12) = rsUser.Fields("025B.FaBaoSheHao") '发报社号 
..................................其它同样处理的重复语句省略! 
rsUser.MoveNext 
Loop 

如果你上面没有加rsUser.MoveFirst,那么这一段根本就不会被执行;
如果你加了,那么这一段会反复在最后一行的后面13列不停的写入你的
025B表内容,写了又写。这是什么烂程序????

这个程序的执行根本不可能出现你所说的情况。歇菜吧你。一边玩去。


#7


'以下由蔡佳旺编写好像是你要的
Public Function GetFLexString(oFlex As MSHFlexGrid, lRow As Long, lCols As Long) As String
    'lRow 是那行 lCols是列总数 Flex 的列是从1开始的
    Dim I As Long
    Dim sTemp As String
    For I = 1 To lCols - 1
        sTemp = sTemp & vbTab & oFlex.TextMatrix(lRow, I)
        DoEvents
    Next I
    GetFLexString = sTemp
    
    
End Function
Public Sub SetCellWidth(oFlex As MSHFlexGrid)
Dim I As Integer
With oFlex

For I = 1 To .Cols - 1
    DoEvents
    .ColWidth(I) = 1200
    
Next I

End With

End Sub
Public Sub FillRecorSetToFlex(oFlex As MSHFlexGrid, recTmp As Recordset)
    Dim fieTmp As Field
    Dim sTmp As String
    Dim sCaption As String
    Dim lI As Long
        If recTmp.EOF And recTmp.BOF Then
            oFlex.Clear
            Exit Sub '如果记录集中不含任何记录,则什么都不干
        End If
    recTmp.MoveFirst
    recTmp.MoveLast
    
    oFlex.ColWidth(0) = 300
        If recTmp.EOF And recTmp.BOF Then Exit Sub '如果记录集中不含任何记录,则什么都不干
    '填充标题栏
    For Each fieTmp In recTmp.Fields
        DoEvents
        sCaption = sCaption & "|^" & fieTmp.Name
    Next fieTmp
    sCaption = sCaption & "|"
    oFlex.FormatString = sCaption
    SetCellWidth oFlex

    '填充栏中数据
    oFlex.Cols = recTmp.Fields.Count + 1 '设置列数
    oFlex.Rows = 2 '设置行数
    recTmp.MoveFirst
For lI = 0 To recTmp.RecordCount - 1
    For Each fieTmp In recTmp.Fields '取得一个记录的全部字段的值
        sTmp = sTmp & vbTab & fieTmp.Value
        DoEvents
        
    Next fieTmp
    recTmp.MoveNext
    oFlex.AddItem sTmp '添加数据
    sTmp = "" '清空变量
Next lI

SetCellWidth oFlex '设置列宽
End Sub

#8


junglerover(灌木丛) 兄教训得是,我上面的代码有问题,,现在更改后就可以达到上述的效果了。。

代码部份如下:
If rsUser.State <> 0 Then rsUser.Close '关闭上次调用 '关闭上次调用
                        rsUser.Open ("SELECT [025A].*,[025B].* FROM [025A],[025B] WHERE [025A].ID=[025B].ID")
                        With MSFlexGrid1
                            .Rows = 2
                            .Cols = 11
                            .TextMatrix(1, 0) = "处理号"
                            .TextMatrix(1, 1) = "发报社号"
                            .TextMatrix(1, 2) = "发报社名"
                            .TextMatrix(1, 3) = "收报社号"
                            .TextMatrix(1, 4) = "收报社名"
                            .TextMatrix(1, 5) = "金额"
                            .TextMatrix(1, 6) = "收款社名称"
                            .TextMatrix(1, 7) = "付款单位名称"
                            .TextMatrix(1, 8) = "收款单位账号"
                            .TextMatrix(1, 9) = "编报日期"
                            .TextMatrix(1, 10) = "状态值"
                            Do While Not rsUser.EOF
                                .Rows = .Rows + 1
                                .TextMatrix(.Rows - 1, 0) = rsUser.Fields("025A.ID")
                                .TextMatrix(.Rows - 1, 1) = rsUser.Fields("025A.FaBaoSheHao") '发报社号
                                .TextMatrix(.Rows - 1, 2) = rsUser.Fields("025A.FaBaoSheMing") '发报社名
                                .TextMatrix(.Rows - 1, 3) = rsUser.Fields("025A.ShouBaoSheHao") '收报社号
                                .TextMatrix(.Rows - 1, 4) = rsUser.Fields("025A.ShouBaoSheMing") '收报社名
                                .TextMatrix(.Rows - 1, 5) = Format(rsUser.Fields("025A.JinEe"), "##,###.#0") '金额
                                .TextMatrix(.Rows - 1, 6) = rsUser.Fields("025A.ShouKuanSheMingCen") '收款社名称
                                .TextMatrix(.Rows - 1, 7) = rsUser.Fields("025A.ShouKuanDanWeiZhangHao") '收款单位账号
                                .TextMatrix(.Rows - 1, 8) = rsUser.Fields("025A.FuKuanDanWeiMingCen") '付款单位名称
                                .TextMatrix(.Rows - 1, 9) = Format(rsUser.Fields("025A.BianBaoRiQi"), "yyyy-mm-dd") '编报日期
                                .TextMatrix(.Rows - 1, 10) = rsUser.Fields("025A.ZhuangTai") '状态值
                                rsUser.MoveNext
                            Loop
                            '将记录再移到记录首
                            rsUser.MoveFirst
                            Do While Not rsUser.EOF
                                .Rows = .Rows + 1
                                .TextMatrix(.Rows - 1, 0) = rsUser.Fields("025B.ID")
                                .TextMatrix(.Rows - 1, 1) = rsUser.Fields("025B.FaBaoSheHao") '发报社号
                                .TextMatrix(.Rows - 1, 2) = rsUser.Fields("025B.FaBaoSheMing") '发报社名
                                .TextMatrix(.Rows - 1, 3) = rsUser.Fields("025B.ShouBaoSheHao") '收报社号
                                .TextMatrix(.Rows - 1, 4) = rsUser.Fields("025B.ShouBaoSheMing") '收报社名
                                .TextMatrix(.Rows - 1, 5) = Format(rsUser.Fields("025B.JinEe"), "##,###.#0") '金额
                                .TextMatrix(.Rows - 1, 6) = rsUser.Fields("025B.ShouKuanSheMingCen") '收款社名称
                                .TextMatrix(.Rows - 1, 7) = rsUser.Fields("025B.ShouKuanDanWeiZhangHao") '收款单位账号
                                .TextMatrix(.Rows - 1, 8) = rsUser.Fields("025B.FuKuanDanWeiMingCen") '付款单位名称
                                .TextMatrix(.Rows - 1, 9) = Format(rsUser.Fields("025B.BianBaoRiQi"), "yyyy-mm-dd") '编报日期
                                .TextMatrix(.Rows - 1, 10) = rsUser.Fields("025B.ZhuangTai") '状态值
                                rsUser.MoveNext
                            Loop
                            End With