找回密码
 FreeOZ用户注册
查看: 1378|回复: 8
打印 上一主题 下一主题

[经验分享] Access 实用 Tips

[复制链接]
跳转到指定楼层
1#
发表于 30-6-2015 15:41:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
本帖最后由 MICHELLE07 于 1-7-2015 09:13 编辑

关于Excel VBA的帖在这里。https://hioz.im/ibbs/thread-1131178-1-1.html

(但愿FreeOZ数据可以长久保存,至今还是觉得这里最方便 )

没精力从头整理由浅至深了,想到什么写什么。

按Shift 打开一个成品access文件后(或直接打开后点F11),可以看到所有的objects, 包括tables, queries, forms, reports, 以及 modules.

tables存取数据。
queries可以通过wizard 简单产生,也可以用各种expression.  queries用的是SQL-standard query language
forms是操作界面,可以指向table, queries,reports, 也有自身的计算功能,最强大便捷的是通过控件运作宏
reports也有公式
modules我理解为一种宏,就是单独定义一串动作,而不需要重复写code

我的理解:用Microsoft Office(word, excel, outlook, access 等等)软件时,跳过普通应用界面,通过运行后台code 来实现批量操作或者达到某些特定功能,这种应用就叫VBA,不是真正的编程,还是用现成的东西,
但有基础programming 的性质。怎么写code,可以通过各种实例来了解。



发邮件

module的实例:

Sub SendMessage(DisplayMsg As Boolean)
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment
    Dim mydate
    mydate = [Forms]![f_production].pDate
   
    ' Create the Outlook session.
    Set objOutlook = CreateObject("Outlook.Application")

    ' Create the message.
    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)

    With objOutlookMsg
        ' Add the To recipient(s) to the message.
        Set objOutlookRecip = .Recipients.Add("P&L-to")
        objOutlookRecip.Type = olTo

        ' Add the CC recipient(s) to the message.
        Set objOutlookRecip = .Recipients.Add("P&L-cc")
        objOutlookRecip.Type = olCC

        ' Add the BCC recipient(s) to the message.
        '              Set objOutlookRecip = .Recipients.Add("Andrew Fuller")
        '              objOutlookRecip.Type = olBCC

        ' Set the Subject, Body, and Importance of the message.
        .Subject = "Production Reports for week ending " & mydate
        .Body = "Please find the reports attached." & vbCrLf & vbCrLf
        '         .Importance = olImportanceHigh  'High importance

        ' Add attachments to the message.
        .Attachments.Add ("\\server01\Admin_Data\Accounts\Michelle\***\***.pdf")
        .Attachments.Add ("\\server01\Admin_Data\Accounts\Michelle\***\***.pdf")
      
        ' Resolve each Recipient's name.
        For Each objOutlookRecip In .Recipients
            objOutlookRecip.Resolve
        Next

        ' Should we display the message before sending?
        If DisplayMsg Then
            .Display
        Else
            .Save
            .Send
        End If
    End With
    Set objOutlook = Nothing

End Sub

DoCmd.SendObject acSendReport, "r_p_order", acFormatPDF, sEmail, , "accounts@xxxx.com.au", "Purchase Order", , True

评分

参与人数 1威望 +50 收起 理由
Lopemann + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

2#
 楼主| 发表于 30-6-2015 17:48:11 | 只看该作者
主页面设置用户名和密码

Private Sub Command4_Enter()
Dim uNameEnt, pWordEnt, rs

    uNameEnt = Forms![F_Logon].[uName]
    pWordEnt = Forms![F_Logon].[pWord]
   
    Set rs = CurrentDb.OpenRecordset("SELECT t_Users.u_Name, t_Users.u_Password, t_Users.u_DID FROM t_Users WHERE (((t_Users.u_Password)=""" & pWordEnt & """) AND ((t_Users.u_ID)=" & uNameEnt & "));")
    If rs.RecordCount = 1 Then
        DoCmd.OpenForm "f_Main"
        Forms![F_Logon].Visible = False
        Else:
        MsgBox "The username and password do not match.", vbCritical
        Exit Sub
    End If
   
    Me.DefDelID = rs.u_DID
   
    Call UserGLAccounts
   
    DoCmd.OpenForm "f_Main"
   
End Sub

从现有table提取数据,生成下拉菜单:
SELECT t_Users.u_ID, t_Users.u_Name FROM t_Users WHERE (((t_Users.u_Active)=Yes)) ORDER BY t_Users.u_Name;
回复  

使用道具 举报

3#
 楼主| 发表于 2-7-2015 12:06:25 | 只看该作者
SQL server是适用更大规模数据的数据库管理软件。如果超出数据库上限,Access文件可以Upsize 到SQL server,  SQL server只管理数据,没有queries ,forms 等,Access 通过link到SQL server 实现超大量数据库存取。
回复  

使用道具 举报

4#
 楼主| 发表于 2-7-2015 12:08:37 | 只看该作者
本帖最后由 MICHELLE07 于 2-7-2015 16:08 编辑

电脑上装一个ODBC 数据库管理软件的话,可以通过ODBC database driver取得其它软件里的数据(table),但要看那个软件是否支持ODBC,也有支持其它数据库管理软件的。

--这些就交给公司IT操心好了。

顺便说一句,不少澳洲公司的内部IT是归财务部的。
回复  

使用道具 举报

5#
发表于 2-7-2015 17:51:07 | 只看该作者
Macro一般我也是用VBA写code来做
record macro那个总是做不好...
回复  

使用道具 举报

6#
 楼主| 发表于 3-7-2015 10:26:37 | 只看该作者
Lopemann 发表于 2-7-2015 16:51
Macro一般我也是用VBA写code来做
record macro那个总是做不好...

那个Record Macro是挺啰嗦的,光标上下晃几下还能写出一串来,不过简单的指令就靠那个记住码了。用得少,我的spelling很差的,而且写code 一点灵感也没有。你有什么简单实用的好code,分享一下吧
回复  

使用道具 举报

7#
发表于 3-7-2015 10:34:35 | 只看该作者
MICHELLE07 发表于 3-7-2015 09:26
那个Record Macro是挺啰嗦的,光标上下晃几下还能写出一串来,不过简单的指令就靠那个记住码了。用得少, ...

赞叹

搞财务的还写vba代码

回复  

使用道具 举报

8#
 楼主| 发表于 3-7-2015 10:44:18 | 只看该作者
DDD888 发表于 3-7-2015 09:34
赞叹

搞财务的还写vba代码

你是高手吧,有机会请教你啊。我只是在初级的初级阶段,尝试几个基本功能而已,真的是隔行如隔山啊,自己不熟悉的看别人做似乎不难,真的做起来发现有很长的路要走。其实我想说,一个工作能做20年,就算有压力,还是挺幸运的。连丛林里的动物也不象我们看到的那么逍遥自在,它们也是每天面临重重危机。
回复  

使用道具 举报

9#
发表于 3-7-2015 10:45:32 | 只看该作者
MICHELLE07 发表于 3-7-2015 09:44
你是高手吧,有机会请教你啊。我只是在初级的初级阶段,尝试几个基本功能而已,真的是隔行如隔山啊,自己 ...

互相学习啦

评分

参与人数 1威望 +50 收起 理由
MICHELLE07 + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 21-10-2024 18:59 , Processed in 0.046203 second(s), 25 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表