【问题标题】:ASP.NET VB Web Site that open .accdb database with command line parameters使用命令行参数打开 .accdb 数据库的 ASP.NET VB 网站
【发布时间】:2016-11-07 11:37:36
【问题描述】:

是否可以打开包含命令行参数的 .mdb/.accdb 文件(客户端或服务器端)?

我最终要完成的是在 Outlook 电子邮件中嵌入一个链接(带参数)(通过按钮的 OnClick VBA 在另一个 Access db 中生成),当收件人单击该链接时,它会自动打开 .mdb/ .accdb 文件,他们可以在其中根据这些参数打印报告的当前版本。

第一次尝试

最初,我使用位于我们其中一台服务器上的批处理文件执行此操作(在生成的电子邮件中嵌入指向该批处理文件的链接):

@echo off
xcopy "\\server\share\thisdb.accdb" "C:\local\*.*" /Y
start msaccess.exe "C:\local\thisdb.accdb" /cmd "param1;param2"

...但是,这显然会导致 UAC 和整体电子邮件安全问题。

第二次尝试

因此,在与大学讨论后,他们建议建立一个网站。不是问题!在同一天就建立并运行了一个 ASP.NET VB 网站,并弄清楚了如何从链接传递和获取查询字符串。

当尝试在客户端和/或服务器上打开 Access 时,问题就开始了......

我试过了……

  • 壳牌
  • System.Diagnostics.Process(带/不带 System.Diagnostics.ProcessStartInfo)
  • 等等...等等...(我不记得我从在线资源中尝试过的所有方法)

我为什么要这样做

很长一段时间以来,我只是在 VBA 中完成了以下操作:

  1. 自动生成电子邮件
  2. 将多个报告导出(并附加)为 PDF 文件
  3. 显示了电子邮件

随着时间的推移,这会占用我们服务器上的大量空间,并导致最终用户查看过时的信息。我的最终目标是创建一个实现以下目标的解决方案:

  1. 更小的电子邮件大小(大大有利于我们的电子邮件服务器)
  2. 最终用户能够单击电子邮件中的嵌入链接(无需任何 安全问题)并打开当前版本的报告
  3. 在打开鼠标的同时单击鼠标(单击鼠标或单击鼠标)即可完成所有操作 Outlook 电子邮件中的附件 PDF

非常感谢任何帮助/建议:)

【问题讨论】:

标签: asp.net vb.net visual-studio-2015 ms-access-2007 outlook-2007


【解决方案1】:

您不应复制应用程序(前端)数据库。将其保留在本地并仅复制后端数据库,其表链接到前端。

有关在本地托管前端的指南:

Deploy and update a Microsoft Access application in a Citrix environment

找到后,您可以从命令行使用/x 开关调用它以运行内部宏:

Command-line switches for Access

【讨论】:

  • 即使使用this,有没有办法从本地托管的网站 URL 打开本地托管的前端?
  • 据我所知,浏览器不具备此功能。您可以下载文件(可能是快捷方式),甚至是可执行文件,但它会被标记为来自不安全区域(这是真的),因此用户必须接受通过通常的 UAC 对话运行它。
  • 在 Outlook 电子邮件中链接时,您是否推荐任何不标记为不安全(默认情况下)的替代方法?还是我们只需要返回附加 PDF 文件。
  • 我会将 PDF 存储在 OneDrive 中,然后发布一封包含这些链接的电子邮件。更新只需要更新远程 PDF 和一封新的电子邮件通知。
  • 我 +1 你的回答,因为它帮助激发了我回答的“对于那些仍然想这样做的人......”部分
【解决方案2】:

对于那些仍然想这样做的人..

对于那些仍然想这样做的人,我能够做到以下几点:

  • 创建通过 cmd 和参数删除、重新创建和运行计划任务的 SQL 存储过程(对 xp_cmdshell 具有锁定的管理员权限)(链接 herehere

    select @cmdstring = 'SchTasks /Delete /TN ""tt_' + @param1 + 'SCExport' + @param2 + 'PDF"" /F' exec master.dbo.xp_cmdshell @cmdstring, NO_OUTPUT

    select @cmdstring = 'SchTasks /Create /S ' + @@SERVERNAME + ' /RU useru /RP userp /XML "' + @xmlfilename + '" /TN "tt_' + @param1 + 'SCExport' + @param 2 + 'PDF"' exec master.dbo.xp_cmdshell @cmdstring, NO_OUTPUT

    select @cmdstring = 'SchTasks /Run /TN "tt_' + @param1 + 'SCExport' + @param2 + 'PDF"' exec master.dbo.xp_cmdshell @cmdstring, NO_OUTPUT

    • 计划任务是通过生成的 XML 文件生成的(用于从 XML 字符串 here 创建文件的函数),因此我可以通过它正确地将参数传递给我正在使用的批处理文件(创建和导出虚拟任务将为您提供完成此操作所需的 XML 字符串)

      + ' <Exec>' + ' <Command>"C:\pathtobat\batfile.bat"</Command>' + ' <Arguments>' + @param1 + ' ' + @param2 + '</Arguments>' + ' </Exec>'

    • 批处理文件打开并将参数传递到我的 Access 前端数据库的命令行

      start "" "C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE" "C:\pathtoAccessdb\Accessdb.accdb" /cmd "%1;%2"

我决定做什么...

由于我们公司拥有完整版本的 SQL Server 2008 R2 Standard(正确设置了 SSRS),我决定简单地在 SSRS 中重建三个报告,并在 VBA 生成的电子邮件中放置一个链接到 SSRS 托管报告(包括 URL 中的参数):

http://thisserver/ReportServer/Pages/ReportViewer.aspx?%2fMyReportApp2%2fMyReport&rs:Command=Render&Param1=Value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2012-10-01
    • 2017-10-22
    • 2021-03-12
    • 2016-10-09
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多