1.用mshflexgrid控件,但不没有用ado绑定,用循环实现赋值,发觉很慢,
而且有个现象,如果有一次查询集合为空,以后无论查询记录集合rst是否为空,我的第一行(标题固定行)也和其它行的背景颜色一样了,不知是什么原因.
想请教一下,mshflexgrid到底支持显示多少行?能不能提高其填充速度?2.用日历控件.dtppicker.value能不能赋给一个空值呢?或者是一个空字符??
当我想把空值赋给它时,总是提示 "mulitiselect不能设置空值"但在属性窗口中又找不到这个属性.用isnull判断后再赋值好像不执行,很奇怪.3.做一个查询后返回一个记录集合rst,有没有什么办法再打开一个记录集合是是上一个记录集合的一个子查询?我知道SQL中可以用VIEW来实现,但我没试过,不知如何做,提示一下.分数很少,很对不起,但新手请您多多帮助!!

解决方案 »

  1.   

    1、那是MSHFlexgrid的一个BUG,救倒也有办法救,就是当你查询出记录为0的时候,就设置一些属性使它的focus不显示等等情况吧。
    2、没救,日历控件你必须进行赋值,不赋值还真报错,必须赋的值还得像一个日期的模样,不然的话还不知道会出什么变故。
    3、没太明白你的意思,是不是想在查询出来的情况下再进行查询?那就在where条件下再加上and 再加上查询条件就行了。VIEW一般用于不同表之间的复合查询,在后台实现的,其实可以看做成为一个虚拟表。
      

  2.   

    谢谢你的回答,
    3.
    就是我设置了三个combox,分别为字段名,查询条件(=,<,like....),然后是所查的范围.
    查询后的记录集放到grid中显示,现在我有一个checkbox,点击它后就是在当前的记录集合上再进行查询,如何做呢?用你的方法全不会执行很慢呢?因为我联接了三个表.还有一个问题,mshflexgrid最多能显示多少行?我有10,000多行需要显示.能不能提高其它速度,不用分页实现.谢谢.清楚了就结贴.
      

  3.   

    帮你顶一下,我也觉得我的GRID刷新很慢,有什么办法可以解决的吗?
      

  4.   

    第一个问题有两种方法来实现!不过速度提升不了多少!
    1.记录集转换成数组来进行赋值给表格.[我用的是三层架构,觉得这样的速度还可以]
    2.开始赋值时,MsFlexGrid1.ReDraw=False  填充完成后:MsFlexGrid1.ReDraw=True!
    如果是背景色会一样的话,你只要在开始填充前,让表格始终有几个空白行,这样就不会出现这种情况了!并且也会比较好看的!
    第二个问题:这是日历控件自身的问题,无法解决[指我],但是你可以结合文本框控件来处理.
    第三个问题:这个不好做,帮你UP一下!呵呵...*^_^*
      

  5.   

    第一个问题,我觉得解决grid不是办法,
    考虑数据库底层的算法要比你自己的算法快,
    所以你可以使用SQL语句分页查询。
    比如第n页查询
    SELECT TOP 10 * FROM [TableName] WHERE [ID] IN (SELECT TOP 10*n [ID] FROM [TableName] ORDER BY [ID]) ORDER BY [ID] ORDER BY [ID] DESC第二个我想两个不是办法的办法,第一个你自己设定一个不会用到的时间,
    比如49-10-1当用户输入这个时间的时候认为null保存到数据库,
    第二个就是妳可以使用一个或着三个textbox代替日期控件,
    三个比较好编程,一个看上去好看点。第三个最好办,使用带条件的SELECT语句打开表就好了。
      

  6.   

    第三个给你个SQL看看,
    Access下的
    SELECT * FROM (SELECT * FROM [Students] WHERE [Name]='喻泓飞') AS [Temp]
      

  7.   

    to:qifanghcy 谢谢你,是个好办法,可是我奇偶行不同色,不过先试试再说吧!
    to feihong0233 我要的不是二次查询,可能是多次啊,用户如果想要多少次就多次?
    所有最好每次都能得到一个字符串赋给一个变量,然后我再可以用啊. as temp是表示是个临时表吗?
    我的意思是指最好有办法每次再从这个新的记录集合去找,这样免得SQL语句太长,但是我不会写,即能不能这样?
    private sub cmdseek_click'  每次查找 
      i=i+1
      conn.exectue SQL
    end sub create view Myview&"& cstr(i)&" as select myview&"& cstr(i-1) &" 
    if check1.value=vbchecked then
    然后再SQL="select * form myview&"& cstr(i)&"" 
    我只是有这种思路,不知道VB里面是否可以这样做呢?
    我用的是SQL,谢谢你,再帮帮看,我就结贴了.
      

  8.   

    用了我这种方法后,第一次使用是可以的,但第二次使用好像不对,视图好像只能建一次吧.
    有没有别的方法,谢谢!!!
    简单的测试源码如下.:
    Dim Conn As ADODB.Connection
    Dim Rst  As ADODB.Recordset
    Private i As Integer
    Private BSTR(1 To 20)   As StringPrivate Sub Check1_Click()
       i = 0
    End SubPrivate Sub Command1_Click()
      i = i + 1
      BSTR(i) = "Select * From 工作人员信息表 Where " & cblField.Text & "" & cblCondtion.Text & "'" & cblNum.Text & "'"
      Call Form_Load  Rst.Open Seeks, Conn, adOpenKeyset, adLockOptimistic
        With MSHFlexGrid1
        Set .DataSource = Rst
        .Refresh
        Rst.Close
      End With
      
    End SubPrivate Sub Form_Load()
      Set Conn = New ADODB.Connection
      Set Rst = New ADODB.Recordset
      Conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hospital;Data Source=DAISYDEW"
      With MSHFlexGrid1
        Rst.Open "SELECT * from 工作人员信息表 ", Conn, adOpenKeyset, adLockOptimistic
        Set .DataSource = Rst
        .Refresh
        Rst.Close
      End With
    End Sub
    Private Function Seeks() As StringDim ASQL As String
    If Check1.Value = vbChecked Then
     If i > 1 Then
      ASQL = "Create View myView" & CStr(i) & " As " & BSTR(i) '当I大于1时做.
      Conn.Execute ASQL
      Seeks = "select * from myView" & CStr(i) & ""
        Else
      If i > 0 Then
        ASQL = "Create View myView" & CStr(i) & " As Select * From 工作人员信息表"
        Debug.Print ASQL
        Conn.Execute ASQL
      Seeks = "select * from myView" & CStr(i) & ""
      End If
      End If
       Else
        Seeks = "Select * From 工作人员信息表 Where " & cblField.Text & "" & cblCondtion.Text & "'" & cblNum.Text & "'"
    End If 
      
    End Function
      

  9.   

    3.可以用临时表来解决
    将你的rst存成一个临时表,然后再针对此临时表查询
      

  10.   

    表格我个人认为用vsflexgrid比mshflexgrid要好的多,功能强大又美观。就是绑定到adodc上也可以做到很美观。
    msflexgrid行数好像和内存等硬件相关。
      

  11.   

    1.当RS为空时,将GRID控件的固定行设为0
    2.用len(trim(dtppicker.value))试试,如果=0,则为空
    3. (1):保存上一次查询的条件,再次查询时,将两个条件一起用
       (2):用select * into newTableName.....的方法建一个新的临时表,下一次对这个临时表
           进行查询,用完后将表删除.