1

我对 Access 完全陌生(对 SQL 服务器有一些经验)。

我不确定它在 MS Access 2010 中是否可能:如果 table.dateField 之一是今天或更早 - 需要发送有关该记录的电子邮件。

广泛挖掘并没有带来任何结果,似乎不可行,但希望对此有集体意见。谢谢

4

2 回答 2

1

Microsoft Access应用程序没有任何内置功能来自动扫描数据库并根据表中记录的状态发送电子邮件。但是,这并不意味着这样的功能对于存储在 Access 数据库中的信息“不可行”。事实上,实现这样的功能可以像这样简单:

下面的 VBScript 代码可以cscript.exe在 Windows 下作为计划任务每​​天早上运行(通过 )。它将扫描一个名为 [Patients] 的表,并向当天过生日的每个人发送一条“生日快乐”消息。

Option Explicit

Dim con  ' As ADODB.Connection
Dim rst  ' As ADODB.Recordset
Dim msg  ' As CDO.Message

Set con = CreateObject("ADODB.Connection")  ' New ADODB.Connection
con.Open _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=C:\Users\Gord\Desktop\Database1.accdb;"
Set rst = CreateObject("ADODB.Recordset")  ' New ADODB.Recordset
rst.Open _
        "SELECT FirstName, Email " & _
        "FROM Patients " & _
        "WHERE Month(DOB) = Month(Date()) " & _
            "AND Day(DOB) = Day(Date())", _
        con
Do Until rst.EOF
    Set msg = CreateObject("CDO.Message")  ' New CDO.Message
    msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.example.com"
    msg.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    msg.Configuration.Fields.Update

    msg.To = rst("Email").Value
    msg.From = "admin@example.com"
    msg.Subject = "Happy Birthday!"
    msg.TextBody = "Hi, " & rst("FirstName").Value & ". We hope you have a great birthday today!"
    msg.Send

    Set msg = Nothing
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
于 2013-10-25T16:20:24.867 回答
0

如果您的意思是您需要在表上执行一个查询,并且该查询将管理针对每个违规行发送电子邮件的执行 - 那么我认为您不会有太多运气;

您可以从访问中打开电子邮件窗口,但这不会自行发送电子邮件。

你用什么做你的后端?如果它很灵活,并且您使用 SQL Server 作为后端,那么您可以使用一个实际的触发器来调用存储过程来发送所需的电子邮件。

除此之外,我能想到的就是

  • 创建一个查询来查找要发送电子邮件的行;
  • 创建一个 .net 可执行文件,它接收一组信息作为参数并根据该数据发送您需要的电子邮件,
  • 在应用程序的表单上,使用计时器事件定期执行打开查询的逻辑,使用类似 adodb.recordset 并循环遍历记录集并为查询返回的每一行调用 .net 可执行文件。

希望这可以帮助

于 2013-10-25T02:12:37.597 回答