分享

ASP页面直接显示打印ACCESS报表

 创昕联合 2015-04-17
        某客户习惯使用ACCESS来制作报表,觉得用起来方便,平是都是直接在服务器上用,
直接通过ACCESS数据库来打印报表。
    他们有个很老的系统,是ASP做的,有一天,他们老板说想直接同过IE能看或能打印
ACCESS的报表。
    对于这个要求,我们做了分析,如果在ASP可以生成ACCESS对象的话,是不难做到的。
但从百度搜索的结果,国人一般都是直接通过ADO,DAO来连接ACCESS,只是当作数据库来用。
根本就没有现成的例子可以参照。国外倒是有个例子,但还是2000年的,在pws环境下做的。

一,遇到ASP 0178的错误
直接拿来根本连Server.CreateObject("Access.Application")都不成功,老是报ASP 0178
的错误。
    原因肯定是权限的问题,很多人说
1)要设置:C:\Program Files\Common Files\System这个文件夹的权限,
2)或者要运行dcomcnfg--下面是微软的帮助
您需要为 IUSR_ <machine_name> 启动并访问您使用 dcomcnfg 命令,通过执行以下的 OOP COM 对象的帐户权限:
  1. 通过单击开始按钮,选择运行,然后在运行对话框中键入"dcomcnfg",启动 dcomcnfg 命令。
  2. 在默认安全机制选项卡中单击在"编辑默认值"默认访问权限框中。在 注册表值权限 对话框。
  3. 添加该 IUSR_ <machine_name > 到帐户的帐户和该实例在注册表值权限 对话框框,然后单击 确定
  4. 默认安全机制 选项卡中单击在编辑默认值在默认启动权限框架。在 注册表值权限 对话框。
  5. 添加该 IUSR_ <machine_name > 帐户注册表值权限对话框 box0,然后单击OK.
对于1,肯定是不对,但也可以参考,应该给Access安装目录给IUSR_ <machine_name>设定执行的权限,
对于2,可能和服务器版本有关,开始我在windows server 2008测试,说的默认安全机制选项卡到底是
什么东西,根本没有弄清楚,

倒是下面的帮助直接修改对应的Object 权限才识对的。
  调用"server.createObject("mssearch.application")"的时候发生错误,解决如下:
  开始->运行->dcomcnfg 
   找到"mssearch"(这个名称取决于你调用的Object是什么),然后右键->Properties->security把三个权限都  给everyone即可,其实第一个即可.
windows server 2008里面根本找不到Access对应的项,后来偶然机会改在windows server 2003里面测试,终于
发现了有 microsoft office access对应的项目,根据提示修改后,就可以CreateObject了。

二,打开数据库出错
接来OpenCurrentDatabase打开数据库有出现了问题,一直出错,怀疑还是权限的问题,IUSR_ <machine_name > 帐没有相关的权限,对于操作数据库需要多少权限也懒得去查,有人说如果请求CreateObject的话改用Admin用户的话,可以解决问题,但是会有安全方面的问题。最后还是用了这个方法,只是建了一个普通用户,有打开access权限。

解决上面两个问题,基本就可以正常执行下去了。
下面把代码贴出来
<%
  'after declaring the variables....
       strDbName = Request.Form("db")  'Gets the database name
      Set objAccess = Server.CreateObject("Access.Application")
      objAccess.Visible = False
      objAccess.OpenCurrentDatabase Server.MapPath(strDbName)
     

 With objAccess.DoCmd
  .OpenReport strRptName, acViewPreview, strFilter, strWhere
  .OutputTo acOutputReport, , "Snapshot Format", _
                   Server.MapPath(".") & "\snapfiles\" & strSnapFile
  .Close
 End With

  objAccess.Quit acQuitSaveNone
  Set objAccess = Nothing
%>


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多