RT

解决方案 »

  1.   

    VSFLEXGRID是连接DAO的表格显示控件
    VSHFLEXGRID才是连接ADO的表格显示控件
    两者的操作基本相同,VSHFLEXGRID在VB6中有些BUG,需要到相关网站下载SP5
    连接如下(先引用ADO):
    Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
       Dim sql As String
      
       
        Set cn = New ADODB.Connection
         
     
       cn.Open "driver={SQL Server};server=127.0.0.1;uid=sa;pwd=;database=DBname"
         
         Set rs = New ADODB.Recordset
        
         sql = "select * from tablename"
      
         rs.Open sql, cn, adOpenStatic, adLockBatchOptimistic
     
         Set Me.MSHFLEXGrid.DataSource = rs
         MSHFLEXGrid.Refresh
      

  2.   

    楼上的,我会连MSHFLEXGRID啊,我只想知道怎么连VSFLEXGRID,我用的是VSFLEXGRID7,他的两个都是VSFLEXGRID,而且我能肯定,我用的就是那个可以连ADO的FLEXGRID
      

  3.   

    MSFlexGrid不能绑定ADO.Recordset的。vb提供了四种网格控件:MSFlexGrid、MSHFlexGrid、DBGrid和DataGrid。MSFlexGrid是VB6引入的MSFlexGrid的ADO-enabled版。DataGrid是DBGrid的ADO-enabled版,MSFlexGrid和DBGrid可以绑定到DAO.Recordset,MSHFlexGrid和DataGrid可以绑定到ADODAO.Recordset。MSFlexGrid是VB主要用来显示非帮定表格数据的。它提供的属性和方法很容易控制网格中的行数和列数、添加或修改列标题,手工填充网格数据;在你想显示的表格数据并非是来自一个Recordset,或者想让列标题与待现实的Recordset包含的列标题有所不同,或添加行标签或一行优先的顺序显示数据时,可以采用MSFlexGrid。下面是一个MSFlexGrid控件中显示Crosssstab数据的代码
    Private Sub CategoryProductsGrid()
       'Purpose: 定义一个MSFlexGrid控件,并在里面显示数据   '声明变量
       Dim rstMPS As New ADODB.Recordset
       Dim strSQL As String
       Dim intCol As Integer
       Dim intRow As Integer   '返回一个记录集
       strSQL = "TRANSFORM Sum(Sales) AS SumOfSales " & _
                "SELECT ProductID, ProductName " & _
                "FROM tblProductRollupMonth " & _
                "WHERE CategoryID = '1' " & _
                "GROUP BY ProductID, ProductName " & _
                "PIVOT Month In ('01','02','03','04','05','06','07','08','09','10','11','12')"
       With rstMPS
          .ActiveConnection = cnnDecSupt
          .Source = strSQL
          .LockType = adLockReadOnly
          .CursorLocation = adUseClient
          .Open
       End With
       
       With grdMPS
          '设置表格单元的垂直尺寸
          .Rows = rstMPS.RecordCount + 1
          .Height = .RowHeight(0) * .Rows + 460
          
          '表格高度不能超过表单的高度
          If .Height > 4095 Then
             .Height = 4095
          End If
          
          '设置水平尺寸
          .Cols = rstMPS.Fields.Count
          
          '增加列头 (Product ID, Product Name, and months)
          .Row = 0
          For intCol = 0 To 13
             .Col = intCol
             If intCol = 0 Then
                'Product ID column
                .Text = "ID"
                .ColWidth(intCol) = 300
                .FixedAlignment(intCol) = flexAlignCenterCenter
             ElseIf intCol = 1 Then
                'Product Name column
                .Text = "Product Name"
                .ColWidth(intCol) = 2000
                .FixedAlignment(intCol) = flexAlignLeftCenter
             Else
                '12 monthly data columns
                .Text = strMonths(intCol - 1, 1)
                .ColWidth(intCol) = 742
                .FixedAlignment(intCol) = 2
                .ColAlignment(intCol) = flexAlignRightCenter
             End If
          Next intCol      '从记录集中导入数据
          intRow = 1
          rstMPS.MoveFirst
          Do Until rstMPS.EOF
             'Process one record at a time
             For intCol = 0 To 13
                'The table data is arranged in rows of columns
                .Row = intRow
                .Col = intCol
                If Not IsNull(rstMPS.Fields(intCol)) Then
                   'Attempting to insert Null values causes an error
                   If intCol > 1 Then
                      If intRow = 1 Then
                         .Text = Format(CCur(rstMPS.Fields(intCol)), "$#,##0")
                      Else
                         .Text = Format(CCur(rstMPS.Fields(intCol)), "#,##0")
                      End If
                   Else
                      .Text = rstMPS.Fields(intCol)
                   End If
                End If
             Next intCol
             rstMPS.MoveNext
             intRow = intRow + 1
             DoEvents
          Loop
       
          '锁定头两列
          .FixedCols = 2
       End With
       DoEvents
       '释放空间
       Set rstMPS = Nothing
    End Sub如果查询返回给MSFlexGrid控件的几率相对较少(少于100行),则VB6应用程序的性能要比采用MSHFlexGrid或DBGrid绑定数据达到同样目的的应用程序性能好一些。随着返回行数的增长,绑定控件的优势就得以展现。