所有浏览器中的TreeView都使用JQuery而不是ActiveX控件中的VBScript

时间:2011-09-13 17:10:56

标签: jquery ms-access vbscript treeview activex

我们的团队现在已经使用了TreeView三年或四年,这使我们的Internet Explorer用户能够在一个TreeView列表中简单地查看来自MS Access数据库和MSSQL 2005 Server的数据。

自从这一发展以来,我们就陷入了两难境地。用户开始被允许使用原始用例中未包含的Google Chrome和Firefox,并且与此对象在Internet Explorer外部编码的TreeView ActiveX控件不兼容。我认为最初的想法来自this type of Windows Common Control

使用JQuery或其他技术实现这一目标的简单替代方法是什么,前提是当前没有服务器端脚本可用

同样,这里的目标是使其与大多数主流浏览器兼容。

注意:我试图获得服务器端脚本,这不是此项目的选项。因此,使用JSPPHPASP等等,目标的答案应该...而不是这里的尝试是找出一种方法来做到这一点< strong>在共享网络上使用本地文件。

是的,我知道此类设置涉及的安全漏洞......无论如何,这都是方向。

例如,这是使用中的对象:

 <body onload="SetupPage()">
      <object classid="CLSID:C74190B6-8589-11D1-B16A-00C0F0283628" id="MainTree" width="100%" height="290" style="font-family: times new roman; font-size: 16px; Visibility: visible">
        <param name="Style" value="7">
        <param name="_ExtentX" value="5292">
        <param name="_ExtentY" value="10583">
        <param name="_Version" value="393217">
        <param name="HideSelection" value="0">
        <param name="Indentation" value="767">
        <param name="LabelEdit" value="0">
        <param name="LineStyle" value="1">
        <param name="PathSeparator" value="\">
        <param name="Sorted" value="0">
        <param name="Checkboxes" value="0">
        <param name="FullRowSelect" value="0">
        <param name="HotTracking" value="1">
        <param name="Scroll" value="1">
        <param name="SingleSel" value="0">
        <param name="ImageList" value="ImgList">
        <param name="BorderStyle" value="1">
        <param name="Appearance" value="1">
        <param name="MousePointer" value="0">
        <param name="Enabled" value="1">
        <param name="OLEDragMode" value="0">
        <param name="OLEDropMode" value="0">
      </object>
      <object classid="CLSID:2C247F23-8591-11D1-B16A-00C0F0283628" id="ImgList" width="0" height="0" style="visibility: hidden"></object>
  <IFrame id="PrtFrame" style="width: 0px; height: 0px">
  </IFRAME>
 </body>

将此对象放置在网页主体后,对某些VBScript的调用允许使用以下内容填充此对象:

 <script language="vbscript">

    Sub SetupPage()

        Call MainTree.Nodes.Clear
        Call PopulateImageList
        Call PopulateTree

    End Sub

    Sub PopulateTree()

        Dim rs       ' RecordSet
        Dim i        ' Index
        Dim ndParent ' Parent Node

        ' Assign the main html form to a variable xfrm
        Set xfrm = document.MainForm

        ' Setup a connection with the Database
        Set AccessConn = CreateObject("ADODB.Connection")
        AccessConn.open AccessConnectionString
        strSQL = "SELECT..."
        Set rs = AccessConn.Execute(strSQL) 

        ' Manually set the parent nodes
        i = 1
        Set ndActive = MainTree.Nodes.Add(, 2, "IDC" & i, "Active", ImageIndex("active"))

        ' Move one forward, since the parent node was set manually
        i = i + 1
        Do While rs.EOF = False

            ' Add the detail to each parent node for each record returned...
            rs.MoveNext
        Loop
        ' etc...
    End Sub

    Sub PopulateImageList()

      Dim lst
      set lst = ImgList.ListImages.Add(1,"header",LoadPicture(DirectoryPath & "TreeImages\header.gif"))
      set lst = ImgList.ListImages.Add(2,"hold",LoadPicture(DirectoryPath & "TreeImages\hold.gif"))
      set lst = ImgList.ListImages.Add(3,"reviewed",LoadPicture(DirectoryPath & "TreeImages\reviewed.gif"))
      set lst = ImgList.ListImages.Add(4,"completed",LoadPicture(DirectoryPath & "TreeImages\completed.gif"))
      set lst = ImgList.ListImages.Add(5,"rejected",LoadPicture(DirectoryPath & "TreeImages\rejected.gif"))
      set lst = ImgList.ListImages.Add(6,"printed",LoadPicture(DirectoryPath & "TreeImages\printer.gif"))
      set lst = ImgList.ListImages.Add(7,"active",LoadPicture(DirectoryPath & "TreeImages\active.gif"))
      set lst = ImgList.ListImages.Add(8,"archived",LoadPicture(DirectoryPath & "TreeImages\archived.gif"))
      set lst = ImgList.ListImages.Add(9,"emailed",LoadPicture(DirectoryPath & "TreeImages\emailed.gif"))
      set lst = ImgList.ListImages.Add(10,"assigned",LoadPicture(DirectoryPath & "TreeImages\assigned.gif"))

    End Sub
 </script>

一旦数据在源数据库中可用,用户需要做的就是打开共享网络上的本地文件,他们会看到如下内容: TreeView Picture Example

任何实现这一目标的想法或方法都将非常感激。

2 个答案:

答案 0 :(得分:1)

好吧,让我们从不同角度看待问题...忘记从客户端[JavaScript]访问数据库。那又如何?只需使用SQL Server作为Web服务器来提取数据。它被称为HTTP End Point。这样,您就可以在SQL Server端实现数据访问逻辑(包括通过任何可用接口进行MS Access)。所以,现在SQL Server的Web服务返回可以使用jQuery(read this for some info)在客户端(AJAX)上操作的数据。

以下是我为终点部分找到的一些链接:

http://www.simple-talk.com/sql/database-administration/sql-server-endpoints-soup-to-nuts/

http://mscerts.programming4.us/sql_server/sql%20server%202008%20%20sql%20server%20web%20services%20-%20building%20web%20services%20(part%201).aspx

我从未实现过SQL Server端点,因此无法判断这是否容易。但是,我在InterSystems Cache database中做了类似的工作并且效果非常好。

无论如何,这就是我看到的......

P.S。 我对你的本地文件方法有点困惑

答案 1 :(得分:1)

您可以使用Access处理数据绑定,然后使用动态填充所需内容的Web浏览器控件(即Internet Explorer)。使用document.write,您可以填充所有内容,而无需在主机上实际创建任何HTML / JS / CSS。对于图像,您可以嵌入DataURI。

您可以根据用户交互的需要绑定事件,它不是很漂亮但保证受控环境(强制它们使用IE而不给它们任何源代码)并且不需要特殊的数据库交互(因为MS Access可以完成所有操作)对你而言)。

MSDN上有几篇关于控件的文章:http://msdn.microsoft.com/en-us/library/aa752041(v=vs.85).aspx

我是现役空军为欧洲一个单位的“网络应用程序”工作,限制非常相似。我最终做的是使用MS Access启动IE并拦截Navigate2事件进行处理。在网络方面,我有一种基于jQuery的模板语言,我正在构建它来处理所有的SQL乐趣。这允许我完全用HTML / JS / CSS编写应用程序,而Access处理实际的JET绑定。它仍处于开发阶段,但是当我完成后,我将打一个我编写的C ++启动器,这样用户就可以从运行Access的不可见实例的网络运行我的EXE,用户只能看到IE实例和应用程序

https://github.com/jeff-mccoy/EET-Scenario-Builder