学习MS Access

l--*_*''' 0 ms-access

我是ms-access的新手,我已经开始查看有效的代码了.不幸的是,它完全没有注释.

    Private Sub OKbut_Click()
Dim dt As Date
dt = Now()
Set rstOrder = New ADODB.Recordset
rstOrder.Open "tblUsers", CurrentProject.Connection, adOpenStatic, adLockOptimistic
If rstOrder.Supports(adAddNew) Then
    With rstOrder
        .AddNew
        .Fields("title") = title
        .Fields("first") = first
        .Fields("last") = last
        .Fields("gender") = gender
        .Fields("date_submitted") = dt
        .Update
    End With
End If
rstOrder.Close
Set rstOrder = Nothing
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT id FROM tblUsers WHERE date_submitted=#" & dt & "#")
duser = rs.Fields("id")
rs.Close
Set rs = Nothing
    Do While Not user_defined(duser)
        DoCmd.OpenForm "define_user_frm", , , , , acDialog
    Loop
'Forms(0).user_lst.RowSource = "select * from users where id=" & duser
Me.SetFocus
DoCmd.Close
End Sub
Run Code Online (Sandbox Code Playgroud)
  1. 函数Now()有什么作用?
  2. ADODB.Recordset只是一种连接表的方法吗?
  3. adOpenStatic,adLockOptimistic这些是什么?
  4. 为什么我们检查这个:if rstOrder.Supports(adAddNew)?
  5. 为什么我们需要这样做:设置rstOrder =没什么?
  6. 这是做什么的?Do While Not user_defined(duser)DoCmd.OpenForm"define_user_frm",,,,,, acDialog Loop

Bin*_*ier 6

接近这样的现有代码并不是学习编程的最佳方式.有很多在线教程可以帮助您以线性方式开始和进步.我给出的另一个建议是为自己尝试.编写一个包含"MsgBox Now()"的小方法并运行它以查看会发生什么.然后在几秒钟后运行它.

我不能过度推荐找一个初学者教程.

不过那说...

  1. 现在 - 在调用它时返回计算机系统的日期和时间
  2. 是的 - 除其他外.
  3. 提示查询引擎.Open Static表示您不希望在检索到记录集后看到添加的行,乐观锁定会告诉引擎使用哪个记录锁定选项(另一个是pessemistic)
  4. 选中此项是因为您无法将记录添加到所有resordsets(例如,连接多个表的复杂查询)
  5. 不是非常必要,但对内存管理更好,否则记录集对象(以及所有相关资源 - 内存,句柄等)在方法结束之前不会被释放.
  6. 打开ms访问表单,直到条件"user_defined(duser)"返回true

希望这可以帮助.


fla*_*yto 5

  1. 函数Now()有什么作用?

Now()返回当前系统的日期和时间

  1. ADODB.Recordset只是一种连接表的方法吗?

是的 - 更重要的是,它是一种单独迭代数据集记录的好方法.就像SQL Server中的游标一样.你可以做点什么

While not rstOrder.EOF
'a.k.a. while there are still records left to iterate through
   'Do something
End While
Run Code Online (Sandbox Code Playgroud)
  1. adOpenStatic,adLockOptimistic这些是什么?

来自http://www.dotnetspider.com/forum/16958-In-VB-What-difference-between-adopendynamic.aspx

adOpenForwardOnly - 如果未指定其他游标,则这是默认游标.此光标仅允许通过记录集向前移动

adOpenKeyset - 此游标支持前向和后向导航.它还允许您更新记录集,所有更改将反映在其他用户记录集中.光标还支持书签

adOpenDynamic - 此游标支持向前和向后导航,但可能不支持书签(即Access).对数据所做的任何更改都会立即可见,而无需将光标与数据库重新同步

adOpenStatic - 此游标使用数据库中的数据的静态副本,因此不会显示对数据的更改,并支持向前和向后导航

  1. 为什么我们检查这个:if rstOrder.Supports(adAddNew)?

这是编写更强大代码的一种方式 - 即在尝试添加新记录之前,首先检查记录集是否支持添加新记录.

  1. 为什么我们需要这样做:设置rstOrder =没什么?

从记忆中释放记录集.不是绝对必要但是再次提供更强大的代码.

  1. 这是做什么的?Do While Not user_defined(duser)DoCmd.OpenForm"define_user_frm",,,,,, acDialog Loop

检查用户是否存在,如果不存在,则打开一个名为"define_user_frm"的表单,我假设该表单允许创建新用户.