+ -
当前位置:首页 → 问答吧 → 新人请老师指点

新人请老师指点

时间:2011-09-07

来源:互联网

在学习一段代码,这段代码把access数据库里的数据,读到flexcell表格控件里。这段代码太简洁了,我看不懂,请老师给指点下,最好帮我把一些关键的语句解释下,谢谢

Option Explicit

'ADO常数
Private Const adUseClient = 3
Private Const adLockReadOnly = 1
Private Const adOpenStatic = 3

Private 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 Function

ErrorHandler:
  If Err.Number = 429 Then
  MsgBox "不能初始化“MS ActiveX Data Objects Library”"
  Else
  MsgBox Err.Description
  End If
End Function


我看就对GRID表格每行的第1列在给值,到最后却都能显示出来,真是神奇。想请老师在关键的地方给讲解下。谢谢

我没多少分,给的少了,请见谅

作者: java321java   发布时间: 2011-09-07

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

这样就把所有记录都给表格了,太厉害了

作者: java321java   发布时间: 2011-09-07

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 属性所指定的自定义图标 

作者: xiaoyao961   发布时间: 2011-09-07

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进行顺序排列

作者: xiaoyao961   发布时间: 2011-09-07

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

作者: xiaoyao961   发布时间: 2011-09-07

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')去掉了,程序报错(语法错误,表达式)。什么问题呢

作者: java321java   发布时间: 2011-09-07

我之前用的是笨办法,一条记录读出来后,表格每行的每个单元格挨个填进去,现在看到这段代码,真的是很简洁

作者: java321java   发布时间: 2011-09-07

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

作者: java321java   发布时间: 2011-09-07

热门下载

更多