ASP Webサイトを開発する場合、MSSQLデータベースのデータをクライアントに印刷する必要があります。大量のデータを呼び出す必要がある場合は、クライアントスクリプトにrds.dataspace(リモートデータサービス)オブジェクトをインスタンス化し、リモートプロバイダーを使用してASP Webサイトを介してMSSQLデータベースにアクセスできます(RDSのみを介して設定しますデフォルトのハンドラーまたはカスタム商用オブジェクトは、データベースのセキュリティを確実にすることができます。コードは次のとおりです。
html> <ヘッド> meta content = text/html; <タイトル>クライアントスプレッドシート印刷/タイトル> </head> <body bgcolor = skyblue topmargin = 5 leftmargin = 20 oncontextmenu = return false rightmargin = 0 bottommargin = 0> <div align =センター><センター> table境界線= 1 bgcolor =#ffe4b5 style = height:1px:0px bordercolor =#0000ff> <tr> <TD align = middle bgcolor =#ffffff bordercolor =#000080> <フォント色=#000080サイズ= 3> クライアントスプレッドシート印刷 </フォント> </td> </tr> </表> </div> form form name = myform> <div align =左> <入力タイプ=ボタン値= excel name = vbscript onclick = fun_excel()style = heigh:32px> </div> </form> </ボディ> </html> <スクリプト言語= vbscript> sub fun_excel() DIM RDS、RS、DF dim strcn、strsql、strrs Dim Xlapp、xlbook、xlsheet1 rds = createObject(rds.dataspace)set df = rds.createobject(rdsserver.datafactory、http://192.168.0.1) '192.168.0.1はWebサーバーIPアドレスです strcn = provider = ms remote; remote server = http://192.168.0.1; handler = msdfmap.handler; data source = pubsdatabase; strsql = getalljobs rs = df.query(strcn、strsql)を設定します xlapp = createObject(excel.application) 'not:server.createobject(excel.application) xlbook = xlapp.workbooks.addを設定します xlsheet1 = xlbook.worksheets(1)を設定します xlsheet1.cells(1,1).value =ジョブテーブル xlsheet1.range(a1:d1).merge xlsheet1.cells(2,1).value = job_id xlsheet1.cells(2,2).value = job_desc xlsheet1.cells(2,3).value = max_lvl xlsheet1.cells(2,4).value = min_lvl CNT = 3 rs.eofではありません xlsheet1.cells(cnt、1).value = rs(job_id) xlsheet1.cells(cnt、2).value = rs(job_desc) xlsheet1.cells(cnt、3).value = rs(max_lvl) xlsheet1.cells(cnt、4).value = rs(min_lvl) rs.movenext CNT = CINT(CNT) + 1 ループ xlsheet1.application.visible = true End Sub </スクリプト> |
また、RDS DataControlをインスタンス化して、上記のコードを変更するだけです。
rds = createObject(rds.dataspace)set df = rds.createobject(rdsserver.datafactory、http://192.168.0.1) '192.168.0.1はWebサーバーIPアドレスです strcn = provider = ms remote; remote server = http://192.168.0.1; handler = msdfmap.handler; data source = pubsdatabase; strsql = getalljobs rs = df.query(strcn、strsql)を設定します |
修正:
dc = createObject(rds.datacontrol)をset dc.executeoptions = 1 '同期を実行するように設定します。これにより、次のコードを簡素化できます dc.fetchoptions = 1 DCで .server = http://192.168.0.1 .handler = msdfmap.handler .connect = data source = pubsdatabase; .sql = getalljobs .refresh で終わります rs = dc.recordsetを設定します |
ファイルmsdfmap.iniを変更する(win98の場合、c: /windows/msdfmap.ini; win2000の場合、d:/winnt/msdfmap.ini; win2000サーバーの場合、d:/winnt/msdfmap.ini)。
[sql getalljobs] sql = select * from jobs [pubsdatabaseを接続] Access = Readonly connect = provider = sqloledb; data source = sql server; initeral catalog = pubs; uid = userId; pwd = password |
レジストリhkey_local_machine/system/currentcontrolset/services/w3svc/parameters/adclaunchを開き、rdserver.dataFactoryがない場合は追加してください。この例では、RDSデフォルトハンドラーを使用してデータベースにアクセスしている場合は、RDSハンドラーを介してアクセスしていない場合は、レジストリhkey_local_machine/software/microsoft/datafactory/handlerinfo set = 1 to handlerrequired = 0を変更します。データベースがRDSハンドラーまたはカスタム商用オブジェクトを介してアクセスされない場合、データベースにセキュリティリスクをもたらすことを強く推奨しています。
以下は、VBのカスタムビジネスオブジェクトで、次のコードがあります。
'ActiveXDLLの書き込み、名前:rsget.dll、クラスrsreturnを含む、メソッドリターンrs public function returnrs(variantとしてのstrdb、variantとしてのstrsql)adodb.recordset 'ADODBレコードセットを返します。 エラーについては、ehgetRecordset 新しいadodb.ConnectionとしてのDIM CN 新しいadodb.RecordsetとしてのDIM RS ケースSTRDBを選択します ケースydjjspdatabase strdb = ydjjsp ケースPubsdatabase strdb = pubs [選択]を終了します strsql = getallbuyの場合 strsql = select * from buyuser goto nextstep ifを終了します 残っている場合(strsql、strsql(strsql、() - 1)= getPubsbyid then IF IF IF(strsql、、、)<= 0 then 文字列としての薄暗いstr str = mid(strsql、strsql(strsql、() + 2、strsql、)) - strsql、() - 3) strsql = select * jobs where where job_id = '&str&' それ以外 dim strtart、stringとして伸びます strstart = mid(strsql、strsql、() + 2、strsql 、、、) - strsql、() - 3) strend = mid(strsql、strsql(strsql 、、、) + 2、strsql())-inst(strsql、、)-3) strsql = select * from jobs where where where job_id> = '&strstart&'およびjob_id <= '&strend&' ifを終了します ifを終了します NextStep: dim strconnect as string strconnect = provider = sqloledb; server = ddk; uid = ydj; pwd = ydj; cn.open strconnect rs.cursorlocation = aduseclient rs.open strsql、cn、採用、adlockoptimistic、adcmdtext returnrs = rsを設定します 出口機能 ehgetRecordset: err.raise err.number、err.source、err.description エンド関数 |
rsget.dllをc:/windowsまたはd:/winnt、start/run、regsvr32.exe c:/windows/rsget.dllまたはregsvr32.exe d:/winnt/rsget.dllにコピーして、okボタンを押して登録Webサーバーコンポーネントになり、レジストリhkey_local_machine/system/currentcontrolset/services/w3svc/parameters/adclaunchにrsget.rsreturnを追加します。
カスタムビジネスオブジェクトを使用する場合は、上記のASPファイルコードを変更します。
rds = createObject(rds.dataspace)set df = rds.createobject(rdsserver.datafactory、http://192.168.0.1) '192.168.0.1はWebサーバーIPアドレスです strcn = provider = ms remote; remote server = http://192.168.0.1; handler = msdfmap.handler; data source = pubsdatabase; strsql = getalljobs rs = df.query(strcn、strsql)を設定します |
変更:
rds = createObject(rds.dataspace)set df = rds.createobject(rsget.rsreturn、http://192.168.0.1)をset rs = df.returnrs(pubsdatabase、getpubsbyid( '2'、 '10')を設定します) |
さらに、ブラウザ側で次の構成が必要です。
オープンコントロールパネル - >インターネットオプション - >セキュリティ - >カスタムレベル - >安全としてマークされていないActiveXコントロールの初期化とスクリプト - > activate