2011-09-13 30 views
2

私たちのチームが3年または4年間使用しているTreeViewがあります。これはInternet ExplorerユーザーにMS Accessデータベースと1つのTreeViewリストにMSSQL 2005 Server。ActiveXコントロールでVBScriptの代わりにJQueryを使用しているすべてのブラウザのツリービュー

これの開発以来、私たちはジレンマを形成しています。ユーザーは、元のユースケースには含まれていなかったGoogle ChromeとFirefoxを使用することができ始めており、このオブジェクトはInternet Explorerの外部でコード化されたTreeView ActiveXコントロールと互換性がありません。私はこれの元の考えはthis type of Windows Common Controlから来たと信じています。

JQueryまたは別のテクノロジを使用して、これを可能にする簡単な方法は、サーバ側のスクリプトがないという現在の制約があります。

ここでも、主要なブラウザのほとんどと互換性を持たせることを目的としています。

注:私はサーバー側のスクリプトを利用できるようにしようとしましたが、これはこのプロジェクトのオプションではありません。したがって、JSPPHPASPなどを使用してターゲットではありません。代わりに、を共有ネットワークのローカルファイルを使用してこれを行う方法を見つけます。

はい、私はこのタイプの設定に関係するセキュリティ上の脆弱性を知っています...これには関係なく、これが方向です。例えば

、ここでオブジェクトが使用されている:このオブジェクトは、Webページの本文に配置された後

<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

これを達成するためのアイデアや方法は、非常に高く評価されます。

+0

この質問では、MS-ACCESSに固有のものは何もありません。なぜそこにタグがありますか? –

+0

解決策は、MS AccessデータベースとMSSQL 2005データベースにリンクできる必要があります。これは、両方とも連携してクライアントのみのオプションを提供する必要があるためです。 –

+0

私はこのプラグインを見つけましたが、これは私が探しているものですが、IEでしか動作しないという同じ問題があります。 http://plugins.jquery.com/project/ACCESSdb –

答えて

1

さて、さまざまな角度からの問題を見てみましょう...クライアントサイド[データベース]からデータベースにアクセスすることは忘れてしまいます。何より? 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. ローカルファイルへのアプローチと少し混乱しています

+0

明確にするために、私のローカルファイルのアプローチは、サーバー側のスクリプトを許可しない制限が原因です。言い換えれば、Tomcat/Apache/IIS/etcなどのWebサーバーを使用してこのコードを実行するオプションはありません。したがって、私のソリューションはエンドユーザーのデスクトップで実行できるものに限定されます。私はすべてのユーザーのデスクトップに実行可能ファイルをインストールする必要がないように、ブラウザにソリューションを保存することを好みます。これまで、私はVBScriptとIEブラウザで利用可能なTreeViewオブジェクトを使ってこれを達成することができましたが、他のテクノロジを使ってこの代替方法を見つけることはできません。 –

+0

もう1つの制約は、MSSQL 2005を使用するターゲットソリューションと、環境に対する制御がほとんどないDBA管理者のみがアクセスできるという制約です。 –

+0

JavaScriptからデータベースやローカルファイルシステムに直接アクセスすることはできません。期間。そして、あなたの質問の投票数が多いことは、単なる純粋なクライアント側の回答であることに驚くばかりではないことを示唆しています。 –

1

データバインディングを処理して、必要なコンテンツで動的に埋め込まれたWebブラウザコントロール(Internet Explorer)を使用することができます。 document.writeを使用すると、実際にホストマシン上にHTML/JS/CSSを作成することなく、すべてのコンテンツを埋め込むことができます。イメージの場合は、DataURIを埋め込むことができます。

ユーザーの操作に必要なイベントをバインドすることはできますが、制御された環境(ソースコードを与えずにIEを使用するように強制します)と特殊なデータベースのやり取りは必要ありませんあなたのためのすべて)。

MSDNには、コントロールに関するいくつかの記事があります:http://msdn.microsoft.com/en-us/library/aa752041(v=vs.85).aspx

私は現役の空軍で、非常に似た制限のあるヨーロッパのユニットの「ウェブアプリケーション」を扱っています。私がやったことは、MS Accessを使ってIEを起動し、Navigate2イベントをインターセプトして処理することでした。 Web側では、私はすべてのSQLの楽しみを処理するために構築しているjQueryベースのテンプレート言語の一種を持っています。これは、Accessが実際にJETバインディングを処理する間、私はHTML/JS/CSSでアプリケーションを完全に書くことができます。それはまだ開発中ですが、終わったらC++ランチャーを叩いて、ユーザーがネットワークのEXEを実行して、目に見えないAccessのインスタンスを実行し、ユーザーにはIEインスタンスとアプリケーションのみが表示されるようにします。

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

+0

これはどのように機能しましたか? –

+0

実際にはまあまあです。私は、同じコードベースに基づいたいくつかの他のプロジェクトに取り組んでおり、すぐにそのための新しいgithubプロジェクトを投稿します。私は、空軍が私が共有していないデータのためにプロジェクトを非公開にしなければなりませんでした。 AccessはJSONを返します。クライアント側のアプリケーションからクライアント/サーバー(.Net/SQL)アプリケーションにほとんど同じコードで移行すると、テンプレート部分をRESTfulな要求に徐々に変換しています。現在、ヨーロッパのいくつかの拠点でこのアプリをテストしています。 – Jeff

+1

文書は完全ではありませんが、最終的にgithubサイトには例があります:https://github.com/jeff-mccoy/Access-Web-Viewer。私は今、いくつかの新しい内部プロジェクトにライブラリを使用しました。 – Jeff

関連する問題