Ao desenvolver sites ASP, às vezes os dados do banco de dados MSSQL precisam ser impressos no cliente. . Se você precisar chamar uma grande quantidade de dados, poderá instanciar o objeto RDS.DataSpace (Serviço de Dados Remoto) no script do cliente e usar um provedor remoto para acessar o banco de dados MSSQL através do site ASP (definido como apenas através do RDS RDS Manipulador padrão ou objetos comerciais personalizados. O código é o seguinte:
< Html > < Cabeça > < Meta content = texto/html; < Título > Impressão da planilha do cliente </Título > </Head > < Body bgcolor = Skyblue topmargin = 5 leftMargin = 20 oContextMenu = return false RightMargin = 0 BottomMargin = 0 > < Div Align = Centro >< Centro > < Borda da tabela = 1 bgcolor =#ffe4b5 estilo = altura: 1px; < TR > < td align = meio bgcolor =#ffffff borderColor =#000080 > < Font Color =#000080 Tamanho = 3 > Impressão da planilha do cliente </Fonte > </td > </tr > </Tabela > </div > < Nome do formulário = MyForm > < Div alinhado = esquerda > < Tipo de entrada = Valor do botão = Nome do relatório Excel = Relatório Language = VBScript OnClick = FUN_EXCEL () estilo = altura: 32px; </div > </forma > </corpo > </html > < Idioma do script = VBScript > Sub fun_excel () Dim RDS, RS, DF Dim STRCN, STRSQL, STRRS Dim XLAPP, XLBOOK, XLSHEET1 set rds = createObject (rds.dataspace) Set df = rds.createObject (rdSserver.datafactory, http://192.168.0.1) '192.168.0.1 é o endereço IP do servidor da web strcn = provedor = MS remoto; servidor remoto = http: //192.168.0.1; handler = msdfmap.handler; fonte de dados = pubsdatabase; strSQL = getAllJobs Definir rs = df.Query (STRCN, StrSQL) Set xlapp = createObject (Excel.Application) 'Nota Not: Server.CreateObject (Excel.Application) Set xlbook = xlapp.workbooks.add Set xlsheet1 = xlbook.worksheets (1) xlSheet1.Cells (1,1) .Value = Tabela de trabalho 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 Faça enquanto não é 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 laço xlsheet1.application.visible = true final sub </script > |
Você também pode instanciar o RDS DATAControl, basta modificar o código acima:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rdSserver.datafactory, http://192.168.0.1) '192.168.0.1 é o endereço IP do servidor da web strcn = provedor = MS remoto; servidor remoto = http: //192.168.0.1; handler = msdfmap.handler; fonte de dados = pubsdatabase; strSQL = getAllJobs Definir rs = df.Query (STRCN, StrSQL) |
Modificado para:
set dc = createObject (rds.datacontrol) dc.executeOptions = 1 'definido para executar síncrona, o que pode simplificar o próximo código dc.FetchOptions = 1 Com dc .Server = http://192.168.0.1 .Handler = msdfmap.handler .Connect = Data Source = PubsDatabase; .Sql = getAllJobs .Refresh Termine com Definir rs = dc.recordset |
Modifique o arquivo msdfmap.ini (se em Win98, c: /windows/msdfmap.ini; se no win2000, d: /winnt/msdfmap.ini; se no servidor win2000, d: /winnts/msdfmap.ini).
[SQL GetallJobs] Sql = selecione * de Jobs [Connect PubsDatabase] Access = readonly Connect = provider = sqloledb; fonte de dados = servidor sql; catálogo inicial = pubs; uid = userID; pwd = senha |
Abra o registro hkey_local_machine/system/currentControlset/Services/w3svc/parâmetros/adclaunch Se não houver rdsServer.datafactory, adicione -o. Este exemplo usa o manipulador padrão do RDS para acessar o banco de dados. Observe que se o banco de dados não for acessado através do manipulador de RDS ou objetos comerciais personalizados, ele representará um risco de segurança para o banco de dados.
A seguir, é apresentado um objeto comercial personalizado em VB, com o código a seguir:
'Escrevendo o ActiveX DLL, nome: rsget.dll, contendo a classe RSRETURN, Método retorna Rs Função pública Returnrs (strdb como variante, strsql como variante) como adodb.recordset 'Retorna um ADODB RecordSet. ON ERRO GOTO EHGETRECORDSET Dim CN como novo Adodb.Connection Dim RS como novo Adodb.recordset Selecione o caso STRDB Caso ydjjspdatabase strdb = ydjjsp Case PubsDatabase STRDB = pubs Final Selecione Se strsql = getAllbuy então strsql = selecione * do comprador Goto Nextstep Final se Se deixado (strsql, instrum (strsql, () - 1) = getpubsbyId então Se Instr (StrSQL,) < = 0 então Dim str como string STR = MID (STRSQL, Instr (StrSQL, () + 2, Instr (StrSQL,)) - Instr (StrSQL, () - 3) strsql = selecione * FRO Outro Dim Strstart, se esforça como corda strstart = MID (StrSQL, Instr (StrSQL, () + 2, Instr (StrSQL ,,) - Instr (StrSQL, () - 3) sequência = MID (StrSQL, Instr (StrSQL ,,) + 2, Instr (StrSQL,)) - Instr (StrSQL ,,) - 3) strsql = selecione * de Jobs Where Job_id> = '& strstart &' e Job_id <= '& Strand &' Final se Final se Nextstep: Dim StrConnect como string strConnect = provedor = sqloledb; server = ddk; uid = ydj; pwd = ydj; CN.OPEN STRCONNECT rs.cursorLocation = aduseclient rs.open strsql, CN, adotomstático, adlockOptimistic, adcmdText Set returnrs = rs Função de saída ehgetRecordSet: Err.raise err.number, err.source, err.description Função final |
Copie o rsget.dll para c:/windows ou d:/winnt, start/run, digite regsvr32.exe c: /windows/rsget.dll ou regsvr32.exe d: /winnt/rsget.dll, pressione o botão OK para registrar Para ser um componente do servidor da web e adicionar rsget.rsreturn no registro hkey_local_machine/system/currentControlSet/Services/w3svc/parâmetros/adclaunch.
Se você usar um objeto comercial personalizado, modifique o código do arquivo ASP acima:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rdSserver.datafactory, http://192.168.0.1) '192.168.0.1 é o endereço IP do servidor da web strcn = provedor = MS remoto; servidor remoto = http: //192.168.0.1; handler = msdfmap.handler; fonte de dados = pubsdatabase; strSQL = getAllJobs Definir rs = df.Query (STRCN, StrSQL) |
Mudar para:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rsget.rsreturn, http: //192.168.0.1) set rs = df.returnrs (pubsdatabase, getpubsbyid ('2', '10')) |
Além disso, a seguinte configuração é necessária no lado do navegador:
Painel de controle aberto -> Opções da Internet -> Segurança -> Nível personalizado -> Inicializar e script em execução para controles ActiveX que não são marcados como seguros -> Ativar