首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

!第二次筛选查询,用循环语句将记录赋给MSHFlexGrid表格,记录仅会少了一条

2012-01-10 
求助!第二次筛选查询,用循环语句将记录赋给MSHFlexGrid表格,记录仅会少了一条?我的思路是:有3个ComboBox,

求助!第二次筛选查询,用循环语句将记录赋给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

热点排行