Office中国论坛/Access中国论坛

标题: 我这样理解对吗?部分代码求指导 [打印本页]

作者: 1122wen    时间: 2016-1-11 11:50
标题: 我这样理解对吗?部分代码求指导
     各位前辈好:今天学习一个实例,但部分代码着实看不懂,实在迷糊,求指导,谢谢啦!
     另外想咨询下,论坛上有没有示例学习ACCESS的,就是通过对一个个开发系统的讲解(对系统的每步作详细说明、代码详解、系统搭建的思路等,详细点的,而不是只给过程、代码,而没有解析和思路),感觉这样学习起来应该比较快。收费的也行,只要有资源。

Private Sub cmdSave_Click()
Dim rst As Object
Dim strSQL As String
Dim currentID As String
Dim strFrm As String '前面四句是定义变量类型
If IsNull(Me.txtygxm) Then
    MsgBox "员工姓名不允许空缺,请录入相关数据!", vbCritical, "提示" ‘文本框不能为空
    Me.txtygxm.SetFocus ‘光标焦点在文本框内
    Exit Sub
End If
currentID = Form_frmYg_sg_List.Form.ygID  ‘currentID变量的值来源于LIst窗体中的ygID
strSQL = "select * from tblCodeyg where ygID='" & currentID & "'"   ‘通过查询tblCodeyg数据源表,返回ygID等于currentID的数值,strSQL可以看作在内存中的数据,问题来了,为什么不直接:strSQL=select ygid from tblCodeyg
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)      ‘打开strSQL这个数据
rst.MoveFirst   ‘默认光标置于数据第一行
rst.Edit  ‘需要编辑的数据,即光标处于行
rst!ygxm = Me.txtygxm    ‘ygxm调整为txtygxm
rst.Update  ‘数据刷新,但为什么是刷新的rst,而不是数据的窗体
rst.Close
Set rst = Nothing
DoEvents 这是干嘛的?求指导
strFrm = Form_frmYg_sg_Main!frmChild.SourceObject
Form_frmYg_sg_Main!frmChild.SourceObject = strFrm
MsgBox "您提交的数据更新已完成!", vbInformation, "消息"
DoCmd.Close acForm, "frmYg_sg_Edit"   ‘这句不是很清楚,求指导
End Sub


作者: 先下车选4    时间: 2016-1-11 13:13
如果说的不客气 请见谅 但无恶意
看你问的 你连基本的东西都不是很了解啊,
为什么不直接:strSQL=select ygid from tblCodeyg :
你这样 将只能得到表tblxxx中的所有的  字段ygid的数据
原句中 是 取 表tbl中字段 ygid为窗体中控件ygid(currentId就是控件ygid的值)的值的 所有字段 的数据
但为什么是刷新的rst,而不是数据的窗体:
你修改的是窗体上的文本框的数据, 其对应数据集rst中相应的字段的数据,update是让数据集rst真正将这个修改保存到表tblxxx中, 他注释里的'刷新'是口语说法,是表中数据的保存\缓存中的数据真正写入表\ 的意思, 不是refresh(这个就只是取原有数据 没真正保存到表的取到的还是旧数据),
这句不是很清楚,求指导
这个 字面简单明了 啊, DoCmd.Close 一个系统方法 ,close什么呢,acForm对象(所有的窗体对象都是这个统称,)啊,这个挨千刀的对象什么名字?" frmYg_sg_Edit" 是它啊
例子 DoCmd.杀   人, "1122wen"
作者: 1122wen    时间: 2016-1-11 13:53
先下车选4 发表于 2016-1-11 13:13
如果说的不客气 请见谅 但无恶意
看你问的 你连基本的东西都不是很了解啊,
为什么不直接:strSQL=select ...

感谢,确实很不多了解,特别是VBA很多控件东西
作者: todaynew    时间: 2016-1-11 17:24
1、where子句控制数据集的范围,因为需要在特定的记录中进行处理。

2、update是要求数据库立刻更新前面的修改。

3、DoEvents是要求所有在运行的命令执行完毕后,再执行后续的语句。

4、DoCmd.Close acForm是关闭窗体。
作者: 先下车选4    时间: 2016-1-11 18:02
本帖最后由 先下车选4 于 2016-1-11 18:11 编辑

doevents 是在长时间处理中 腾出只手来 响应 系统 窗口 显示什么的 这样理解吧, 长时间的某个vba代码短中 你回看见access界面显示为没响应的, 在这些长时间的代码处理中加入doevents 你就看到界面能正常显示了, 不过这样也导致那段代码耗时增加我理解的也很片面 ,你看看http://baike.baidu.com/link?url= ... WtGvq8VNtRb_OhO6ox_

作者: roych    时间: 2016-1-12 11:50
单纯地拿一个例子来学VBA,例子里的代码只使用了对象的一部分属性、方法和事件,而不是全部,因此即便我们把这部分代码解释清楚了,下次遇到一个稍有不同的问题,你也未必就会使用。更何况,一般一个例子都涉及很多对象。

这种囫囵吞枣的学习方式,会导致楼主根基不稳,对以后的编程毫无益处。

我建议,楼主最好系统地去学习这些对象。一开始不必非要去钻研ADO或者DAO,可以考虑系统自带的OpenQuery来完成增删改,绑定数据源来完成查询(请参考:刘小军常用窗体查询的第一种方法,代码相当少的)。至于导出/导入,则可以使用TransferSpreadsheet来处理。
掌握这些,对于自用的小程序,基本是够用的了。即便涉及到登录,在掌握ADO之前,用DLookup和DCount也是可以的。

在这些完成之后,再考虑ADO/DAO,还有一些其它组件(例如Excel组件)的对象属性等等……







欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3