在学习一段代码,这段代码把access数据库里的数据,读到flexcell表格控件里。这段代码太简洁了,我看不懂,请老师给指点下,最好帮我把一些关键的语句解释下,谢谢Option Explicit'ADO常数
Private Const adUseClient = 3
Private Const adLockReadOnly = 1
Private Const adOpenStatic = 3Private m_Connection As Object         'ADO连接
Private mlngCount As Long              '删除的记录数量
Private marrDeleted() As Long          '删除的记录ID
Private Sub Form_Load()
    表格的设计就不贴了,免得代码太多    
    If Not ReadData Then
        SendKeys "%{F4}" 'Alt+F4,关闭Form
    End If
End Sub'---------------------------------------------------------------------
'函数  : ReadData()
'返回值: True  -- 成功
'        False -- 失败
'---------------------------------------------------------------------
Private Function ReadData() As Boolean
    Dim i As Long
    Dim rs As Object    On Error GoTo ErrorHandler
    
    Grid1.Rows = 1
    
    '打开数据库连接,也可以先用引ADODB,再使用“Dim m_Connection=New ADODB.Connection”这种方法
    Set m_Connection = CreateObject("ADODB.Connection")
    m_Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Demo.mdb"    '从数据库读取数据
    Set rs = CreateObject("ADODB.Recordset")
    Set rs.ActiveConnection = m_Connection
    rs.Cursorlocation = adUseClient
    rs.LockType = adLockReadOnly
    rs.CursorType = adOpenStatic
    rs.Open "select ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) & IIF(Discontinued,'1','0') As Item,ProductID from Products order by ProductID"     --------->好难看懂
     
    '记录集中没有记录
    If rs.RecordCount = 0 Then
        Grid1.AddItem ""
        rs.Close
        Set rs = Nothing
        ReadData = True
        Exit Function
    End If    Screen.MousePointer = 11   -------->也不明白    '把记录集中的数据填充到表格中,固定列中的单元格Tag是用来保存这一行的编辑标志的:
    'U - 代表这行记录是从数据库中读取出来的已存在的记录,并且未作任何修改
    'N - 代表这行记录是新增的,保存数据时需要用Insert语句插入到数据库
    'E - 代表这行记录是编辑过的,保存数据时需要用Update语句更新
    i = 0
    Do While Not rs.EOF
        i = i + 1
        Grid1.AddItem rs("Item").Value, False
        Grid1.Cell(i, 0).Tag = "U"
        Grid1.Cell(i, 1).Tag = rs("ProductID").Value
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing    '在表格的尾部添加一个空白行,用来添加新记录
    Grid1.AddItem ""    Screen.MousePointer = 0    ReadData = True
    Exit FunctionErrorHandler:
    If Err.Number = 429 Then
        MsgBox "不能初始化“MS ActiveX Data Objects Library”"
    Else
        MsgBox Err.Description
    End If
End Function
我看就对GRID表格每行的第1列在给值,到最后却都能显示出来,真是神奇。想请老师在关键的地方给讲解下。谢谢我没多少分,给的少了,请见谅

解决方案 »

  1.   

    i = 0
      Do While Not rs.EOF
      i = i + 1
      Grid1.AddItem rs("Item").Value, False   ----->这句是什么意思
      Grid1.Cell(i, 0).Tag = "U"
      Grid1.Cell(i, 1).Tag = rs("ProductID").Value
      rs.MoveNext
      Loop
      rs.Close
      Set rs = Nothing这样就把所有记录都给表格了,太厉害了
      

  2.   

    Screen.MousePointer = 11 
    VbHourglass 11 沙漏(表示等待状态)。 
    代表正在读入数据,系统忙的状态,让鼠标变个样子http://www10.zzu.edu.cn/ie_wangjunfeng/daquan/property/content/MousePointer.htm设置值value 的设置值为:常数 值 描述 
    vbDefault 0 (缺省值)形状由对象决定。 
    VbArrow 1 箭头。 
    VbCrosshair 2 十字线(crosshair 指针)。 
    VbIbeam 3 I 型 
    VbIconPointer 4 图标(矩形内的小矩形)。 
    VbSizePointer 5 尺寸线(指向东、南、西和北四方向的箭头)。 
    VbSizeNESW 6 右上-左下尺寸线(指向东北和西南方向的双箭头)。 
    VbSizeNS 7 垂-直尺寸线(指向南和北的双箭头)。 
    VbSizeNWSE 8 左上-右下尺寸线(指向东南和西北方向的双箭头)。 
    VbSizeWE 9 水-平尺寸线(指向东和西两个方向的双箭头)。 
    VbUpArrow 10 向上的箭头。 
    VbHourglass 11 沙漏(表示等待状态)。 
    VbNoDrop 12 不允许放下。 
    VbArrowHourglass 13 箭头和沙漏。 
    VbArrowQuestion 14 箭头和问号。 
    VbSizeAll 15 四向尺寸线。 
    VbCustom 99 通过 MouseIcon 属性所指定的自定义图标 
      

  3.   

     rs.Open "select ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) & IIF(Discontinued,'1','0') As Item,ProductID from Products order by ProductID" --------->好难看懂
        
    这句是说:把Category,UnitPrice等几个字段合成一个字段item输出,中间用tab分隔符chr(9)分开
    order by ProductID就是说按产品ID进行顺序排列
      

  4.   

    Grid1.AddItem rs("Item").Value,这里其实是一个字段item含了多个数据库中字段的值,是不是只要用chr(9)分开,10个信息合在一起就能变成10列,你可以试下,比方
    Grid1.AddItem "a" & chr(9) & "b" & chr(9) & "c" & chr(9) & "d"
      

  5.   

    rs.Open "select ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) & IIF(Discontinued,'1','0') As Item,ProductID from Products order by ProductID" --------->好难看懂
        
    这句是说:把Category,UnitPrice等几个字段合成一个字段item输出,中间用tab分隔符chr(9)分开
    order by ProductID就是说按产品ID进行顺序排列
    这句代码,可以理解成把ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) & IIF(Discontinued,'1','0')这几个字段合并到item,但是我改了下,
    rs.Open "select ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) &  As Item,ProductID from Products order by ProductID" 把这个字段IIF(Discontinued,'1','0')去掉了,程序报错(语法错误,表达式)。什么问题呢
      

  6.   

    试了下,明白了ProductName & Chr(9) & Category & Chr(9) & UnitPrice & Chr(9) & IIF(Discontinued,'1','0') As Item  这个合并字段代码,最后的那个字段,不能用& Chr(9) & 了