如何用代码打开分层结构(关系型)的数据库,并将mshflexgrid绑定到分层结构的 Recordset使得mshflexgrid有两个带区。
Dim CnnN As New ADODB.Connection
Dim RstN As New ADODB.Recordset
CnnN.CursorLocation = adUseClient
CnnN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Dource=Product.mdb"
RstN.Open "Select * From 家庭状况", CnName, adOpenStatic, adLockOptimistic
Set MSHFlexGrid1.DataSource=RstN
这个表是关系型表,他有一个子表为“家庭成员”。我该如何写代码使得在mshflexgrid中有子表。也就是有两个带区。

解决方案 »

  1.   

    在数据环境中做,然后将代码复制下来,用recordset去打开再赋给mshflexgrid!
    用的是shape命令,这个是ADO特有的吧,好像是,不是标准的SELECT语句吧!
      

  2.   

    shape 怎么用呀,能写出代码吗?
      

  3.   

    shape 怎么用呀,能写出代码吗?
    不要急,晚上给你
      

  4.   

    自己一個個格子去賦予,和MSFlexGrid1是一樣的寫法。
    這樣的寫法靈活,不受制與綁定
    隨便你怎麼寫sql
    For q = 1 To rs1.PageSize
          '顯示數據在控件中
           With Form1.MSFlexGrid1
           .Row = .Rows - 1
           .Col = 0
           .Text = rs1("store_no")
           .Col = 1
           .Text = IIf(IsNull(rs1("store1_no")), "", rs1("store1_no"))
           .Col = 2
           .Text = IIf(IsNull(rs1("store1_name")), "", rs1("store1_name"))
           .Col = 3
           .Text = IIf(IsNull(rs1("sto_stand")), "", rs1("sto_stand"))
            .Col = 4
           .Text = IIf(IsNull(rs1("sto_if1")), "", rs1("sto_if1"))
            .Col = 5
           .Text = IIf(IsNull(rs1("sto_if2")), "", rs1("sto_if2"))
           .Col = 6
           .Text = IIf(IsNull(rs1("sto_pfirst")), "", rs1("sto_pfirst"))
           .Col = 7
           .Text = IIf(IsNull(rs1("notes")), "", rs1("notes"))
           .Col = 0
           .Sort = 1
       End With
      ' If Form1.MSFlexGrid1.Rows < 6 Then    '把最后的空格去掉
        Form1.MSFlexGrid1.Rows = Form1.MSFlexGrid1.Rows + 1
          rs1.MoveNext
      

  5.   

    SHAPE ( SHAPE {SELECT * FROM `Customers`}  AS Customers APPEND (( SHAPE {SELECT * FROM `Orders`}  AS Orders APPEND (( SHAPE {Select OrderID, ProductID, UnitPrice, Quantity, (Quantity * UnitPrice) As Total From [Order Details]}  AS OrderDetails APPEND ({SELECT * FROM `Products`}  AS Products RELATE 'ProductID' TO 'ProductID') AS Products) AS OrderDetails RELATE 'OrderID' TO 'OrderID') AS OrderDetails, SUM(OrderDetails.'Total') AS 合计1) AS Orders RELATE 'CustomerID' TO 'CustomerID') AS Orders) COMPUTE Customers BY 'Country'
      

  6.   

    rs1.PageSize 什么用?后面的能不能注明一下。我试了一下错误了“在对应所需名称或序数的集合中,未找到项目呀。用这个我是不是还是用前面的代码打开数据库呀?
    .text=rsl("store_no")什么意思呀?
      

  7.   

    忘記了,剛才我隨便貼的,那個是我以前做翻葉測試的程序,可以不要的
    改成
    for i=1 to rs.RecordCount就可以了
      

  8.   

    .row=i
    .Col = 7
    .Text = IIf(IsNull(rs1("notes")), "", rs1("notes"))
    第i行,第8列格子裡面填入notes這個rs的數值
      

  9.   

    直接运行    Option Explicit
        
        '  声明ADODB.Connection和ADODB.Recordset对象变量
        Dim conn As ADODB.Connection
        Dim rs As New ADODB.Recordset
        
        Private Sub Command1_Click()
            Dim sql As String
            '  实例化Connection 对象
            Set conn = New ADODB.Connection
            '  设置连接提供者名称
            conn.Provider = "MSDataShape"
            '  设置连接字符串
            conn.ConnectionString = "Provider=MSDataShape;Data Source=C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb; Data Provider=Microsoft.Jet.OLEDB.4.0"
            '  打开到数据源的连接
            conn.Open
            'shape指令
            sql = "SHAPE {SELECT * FROM Orders} AS Orders " + _
                                 "APPEND ({SELECT * FROM [Order Details]}  AS detail " + _
                                 "RELATE 'OrderID' TO 'OrderID') AS detail"
            '  在分级 Recordset对象中当父行位置更改时,对基本子记录的引用是也更改。
            rs.StayInSync = True
            '  打开游标
            rs.Open sql, conn
            '  设置MSHFlexGrid控件数据源
            Set MSHFlexGrid1.DataSource = rs
        End Sub
        
        '  释放相应的资源
        Private Sub Command2_Click()
            rs.Close
            Set rs = Nothing
            conn.Close
            Set conn = Nothing
            End
        End Sub
      

  10.   

    再战江湖  "APPEND ({SELECT * FROM [Order Details]}  AS detail " + _
                                 "RELATE 'OrderID' TO 'OrderID') AS detail"
    中的order 哪个是父表哪 个是子表呀?能不能说明一下意思?
      

  11.   

    order是父表
    Order Details是子表
      

  12.   

    再战江湖 行了老大,能不能说说有多个关系表,比如有5级 该怎么写sql 谢谢
    回了就给分。
      

  13.   

    我的数据 有密码要用代码 打开的。用环境有密码 就不能用jet
      

  14.   

    5级的sql还没有写过
    一般都是主从表的
      

  15.   

    能换个方法吗?用个tree控件,组合MSHFlexGrid来显示不是很方便吗?用SHAPE语句是很烦的,而且你要分5级,以后有个变化之类的,也是累到自己呀。个人意见,仅供参考!