读书人

!第二次筛选查询用循环语句将记录赋

发布时间: 2012-01-10 21:26:51 作者: rapoo

求助!第二次筛选查询,用循环语句将记录赋给MSHFlexGrid表格,记录仅会少了一条?
我的思路是:有3个ComboBox,让用户做分级选择,一个“刷新查询”命令按扭,实现筛选查询功能。
求教的地方:第1次执行代码查询是正常的,然后用户在ComboBox中选了其它条件执行查询后,再选条件执行查询,MSHFlexGrid表格中就会少了一条记录。做实验,Set DataGrid1.DataSource = Adodc2 ,DataGrid表格中始终是正常的。我琢磨好几天了,已经极至郁闷,请高手们帮帮小弟吧!衷心感谢!
主要代码如下:

Private Sub sxcx() '刷新查询。
Text7.Visible = False
MSHFlexGrid1.Rows = 3 '让其总行数等于3,目的是为了让表格恢复到干净状态。
Dim i As Byte '此循环语句是为了清空表格第1行里的数据。
For i = 1 To MSHFlexGrid1.Cols - 1
MSHFlexGrid1.TextMatrix(2, i) = " "
Next
MSHFlexGrid1.Row = 2 '将活动单元格移到第2行。

If Text3.Text <> " " Then '文本框中的内容是由ComboBox中赋过来的。
Adodc2.ConnectionString = Cnn
Adodc2.RecordSource = "Select s.名称,s.单位,s.基价,c.采购价审批与查阅表ID,s.商品资料ID,c.含税原价,c.含税折扣率,(c.含税原价*c.含税折扣率) as 含税折后价,c.含税价报价人,c.含税价报价时间,c.未税原价,c.未税折扣率,(c.未税原价*c.未税折扣率) as 未税折后价,c.未税价报价人,c.未税价报价时间 from 采购价审批与查阅表 as c,商品资料 as s where c.商品资料ID=s.商品资料ID and c.供应商与客户资料ID= " + Trim(Text6.Text) + " and Len(Trim(s.类别编号)) > = 6 And left(s.类别编号,6)= ' " + Trim(Text3.Text) + " ' order by s.类别编号 asc,s.名称 asc "
Adodc2.Refresh 'Refresh 方法(ADO):更新集合中的对象以便反映来自并特定于提供者的对象。
If Adodc2.Recordset.RecordCount > 0 Then 'RecordCount 属性(ADO):指示 Recordset 对象中记录的当前数目。返回长整型值。
Adodc2.Recordset.MoveFirst '使用 MoveFirst 方法将当前记录位置移动到 Recordset 中的第一个记录。
Do While Adodc2.Recordset.EOF = False
Call drsj '调用通用过程。往“MSHFlexGrid1”表格读入数据。
MSHFlexGrid1.AddItem " ", MSHFlexGrid1.Row + 1 '在表格中增加一行空行。
MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1 '将活动单元格向前移动1行。移到刚刚空行位置。
Adodc2.Recordset.MoveNext '使用 MoveNext 方法将当前记录向前移动一个记录(向 Recordset 的底部)。
Loop
MSHFlexGrid1.RemoveItem (MSHFlexGrid1.Rows - 1) '删除由循环语句生成的最后一行的空行。
End If
ElseIf Text2.Text <> " " Then
Adodc2.ConnectionString = Cnn
Adodc2.RecordSource = "Select s.名称,s.单位,s.基价,c.采购价审批与查阅表ID,s.商品资料ID,c.含税原价,c.含税折扣率,(c.含税原价*c.含税折扣率) as 含税折后价,c.含税价报价人,c.含税价报价时间,c.未税原价,c.未税折扣率,(c.未税原价*c.未税折扣率) as 未税折后价,c.未税价报价人,c.未税价报价时间 from 采购价审批与查阅表 as c,商品资料 as s where c.商品资料ID=s.商品资料ID and c.供应商与客户资料ID= " + Trim(Text6.Text) + " and Len(Trim(s.类别编号)) > = 4 And left(s.类别编号,4)= ' " + Trim(Text2.Text) + " ' order by s.类别编号 asc,s.名称 asc "


Adodc2.Refresh
If Adodc2.Recordset.RecordCount > 0 Then
Adodc2.Recordset.MoveFirst
Do While Adodc2.Recordset.EOF = False
Call drsj
MSHFlexGrid1.AddItem " ", MSHFlexGrid1.Row + 1
MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1
Adodc2.Recordset.MoveNext
Loop
MSHFlexGrid1.RemoveItem (MSHFlexGrid1.Rows - 1)
End If
ElseIf Text1.Text = "全部 " Then
Adodc2.ConnectionString = Cnn
Adodc2.RecordSource = "Select s.名称,s.单位,s.基价,c.采购价审批与查阅表ID,s.商品资料ID,c.含税原价,c.含税折扣率,(c.含税原价*c.含税折扣率) as 含税折后价,c.含税价报价人,c.含税价报价时间,c.未税原价,c.未税折扣率,(c.未税原价*c.未税折扣率) as 未税折后价,c.未税价报价人,c.未税价报价时间 from 采购价审批与查阅表 as c,商品资料 as s where c.商品资料ID=s.商品资料ID and c.供应商与客户资料ID= " + Trim(Text6.Text) + " order by s.类别编号 asc,s.名称 asc "
Adodc2.Refresh
Set DataGrid1.DataSource = Adodc2 '做实验用,看Adodc2查询是否正常。反映在DataGrid1里是正常的。
If Adodc2.Recordset.RecordCount > 0 Then
Adodc2.Recordset.MoveFirst
Do While Adodc2.Recordset.EOF = False
Call drsj
MSHFlexGrid1.AddItem " ", MSHFlexGrid1.Row + 1
MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1
Adodc2.Recordset.MoveNext
Loop
MSHFlexGrid1.RemoveItem (MSHFlexGrid1.Rows - 1)
End If
Else
Adodc2.ConnectionString = Cnn
Adodc2.RecordSource = "Select s.名称,s.单位,s.基价,c.采购价审批与查阅表ID,s.商品资料ID,c.含税原价,c.含税折扣率,(c.含税原价*c.含税折扣率) as 含税折后价,c.含税价报价人,c.含税价报价时间,c.未税原价,c.未税折扣率,(c.未税原价*c.未税折扣率) as 未税折后价,c.未税价报价人,c.未税价报价时间 from 采购价审批与查阅表 as c,商品资料 as s where c.商品资料ID=s.商品资料ID and c.供应商与客户资料ID= " + Trim(Text6.Text) + " and Len(Trim(s.类别编号)) > = 2 And left(s.类别编号,2)= ' " + Trim(Text1.Text) + " ' order by s.类别编号 asc,s.名称 asc "


Adodc2.Refresh
If Adodc2.Recordset.RecordCount > 0 Then
Adodc2.Recordset.MoveFirst
Do While Adodc2.Recordset.EOF = False
Call drsj
MSHFlexGrid1.AddItem " ", MSHFlexGrid1.Row + 1
MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1
Adodc2.Recordset.MoveNext
Loop
MSHFlexGrid1.RemoveItem (MSHFlexGrid1.Rows - 1)
End If
End If

Call gbbjs '调用通用过程。改变“MSHFlexGrid1”控件指定列的背景色。
End Sub

[解决办法]
思路不太正确吧?
按条件检索只是改变RecordSet中的数据,显示只是从RecordSet中加载而已.楼主再想想看
[解决办法]
你设个断点跟进就好了,应该不难找到问题

[解决办法]
加几句debug.print,把mshflexgrid1的状态打印到立即窗口看看吧

Do While Adodc2.Recordset.EOF = False '我断点设在这句上。
debug.print "A rows= ";MSHFlexGrid1.Rows, "row= ";MSHFlexGrid1.Row
Call drsj
debug.print "B rows= ";MSHFlexGrid1.Rows, "row= ";MSHFlexGrid1.Row
MSHFlexGrid1.AddItem " ", MSHFlexGrid1.Row + 1 '第一遍执行循环是正常的,到了第2遍
debug.print "C rows= ";MSHFlexGrid1.Rows, "row= ";MSHFlexGrid1.Row
MSHFlexGrid1.Row = MSHFlexGrid1.Row + 1 '的时候这两句没反应,第3遍开始又都好了。
debug.print "D rows= ";MSHFlexGrid1.Rows, "row= ";MSHFlexGrid1.Row
Adodc2.Recordset.MoveNext
Loop

读书人网 >VB

热点推荐