Al desarrollar sitios web de ASP, a veces los datos de la base de datos MSSQL deben imprimirse en el cliente, no lo repitirán aquí. . Si necesita llamar a una gran cantidad de datos, puede instanciar el objeto rds.dataSpace (servicio de datos remoto) en el script del cliente y usar un proveedor remoto para acceder a la base de datos MSSQL a través del sitio web de ASP (establecido solo a través de RDS Manitador predeterminado o objetos comerciales personalizados. El código es el siguiente:
< html > < Cabeza > < meta content = text/html; < Título > Impresión de hoja de cálculo del cliente </Título > </cabeza > < Body BgColor = SkyBlue Topmargin = 5 LeftMargin = 20 OnContextMenu = return False RightMargin = 0 BottomMargin = 0 > < Div Align = Center >< Centro > < Tabla Border = 1 BGColor =#FFE4B5 estilo = altura: 1px; < TR > < TD align = Middle bgcolor =#ffffff borderColor =#000080 > < Color de fuente =#000080 Tamaño = 3 > Impresión de hoja de cálculo del cliente </fuente > </TD > </tr > </tabla > </div > < Nombre de formulario = myForm > < Div Align = Izquierda > < Tipo de entrada = Botón Valor = Excel Report Name = Report Language = VBScript OnClick = Fun_excel () Style = Height: 32px; </div > </forma > </cuerpo > </html > < Language de script = VBScript > Sub Fun_excel () Dim RDS, RS, DF Dim strcn, strsql, strrs Dim xlapp, xlbook, xlsheet1 establecer rds = createObject (rds.dataSpace) Establecer df = rds.createObject (rdsserver.dataFactory, http://192.168.0.1) '192.168.0.1 es la dirección IP del servidor web Strcn = Provider = MS Remote; Remote Server = Http: //192.168.0.1; Handler = MSDFMAP.Handler; Data Source = PUBSDATABASE; strsql = getAllJobs Establecer rs = df.query (strcn, strsql) Establecer xLApp = createObject (Excel.Application) 'Nota no: Server.CreateObject (Excel.Application) Establecer xlbook = xlapp.workbooks.add Establecer xlsheet1 = xlbook.worksheets (1) xlsheet1.cells (1,1) .value = tabla de trabajo 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 haz mientras no 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 bucle xlsheet1.application.visible = true final </script > |
También puede instanciar RDS DataControl, simplemente modificar el código anterior:
establecer rds = createObject (rds.dataSpace) Establecer df = rds.createObject (rdsserver.dataFactory, http://192.168.0.1) '192.168.0.1 es la dirección IP del servidor web Strcn = Provider = MS Remote; Remote Server = Http: //192.168.0.1; Handler = MSDFMAP.Handler; Data Source = PUBSDATABASE; strsql = getAllJobs Establecer rs = df.query (strcn, strsql) |
Modificado a:
establecer dc = createObject (rds.datacontrol) dc.executeOptions = 1 'establecido para ejecutar sincrónicamente, lo que puede simplificar el siguiente código dc.fetchoptions = 1 Con DC .Server = http://192.168.0.1 .Handler = msdfmap.handler .Connect = data fuente = pubSdatabase; .Sql = getAllJobs .Refrescar Terminar con establecer rs = dc.Recordset |
Modifique el archivo msdfmap.ini (si está en win98, c: /windows/msdfmap.ini; si está en win2000, d: /winnt/msdfmap.ini; si está en el servidor Win2000, D: /winnts/msdfmap.ini).
[SQL GetAllJobs] Sql = select * de trabajos [Conectar pubsdatabase] Acceso = Readonly Connect = Provider = Sqloledb; Data Source = SQL Server; inicial catálogo = pubs; uid = userId; pwd = contraseña |
Abra el Registro HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlset/Services/W3SVC/Parameters/ADClaunch Si no hay rdsserver.dataFactory, agregue. Este ejemplo usa el controlador predeterminado RDS para acceder a la base de datos. Tenga en cuenta que si no se accede a la base de datos a través del manejador RDS o los objetos comerciales personalizados, representará un riesgo de seguridad para la base de datos, el autor recomienda encarecidamente que la base de datos solo se pueda acceder a través del controlador RDS o los objetos comerciales personalizados.
El siguiente es un objeto comercial personalizado en VB, con el siguiente código:
'Escribir Dll ActiveX, nombre: rsget.dll, que contiene clase rsreturn, método return rs Función pública returnRS (strdb como variante, strsql como variante) como ADODB.Recordset 'Devuelve un conjunto de registros ADODB. En error goto ehgetRecordset Dim CN como nueva ADODB.Connection Dim RS como nuevo ADODB.Recordset Seleccionar Caso STRDB Caso ydjjspdatabase strdb = ydjjsp Case pubsdatabase strdb = pubs Final seleccionar Si strsql = getallbuy entonces strsql = select * de buyuser GOTO NextStep Final si Si se deja (strsql, instr (strsql, () - 1) = getPubsbyid entonces Si instrer (strsql ,,) < = 0 entonces Dim str como cadena Str = Mid (STRSQL, INSTR (STRSQL, () + 2, INSTR (STRSQL,)) - INSTR (STRSQL, () - 3) strsql = seleccionar * de trabajos donde job_id = '& str &' Demás Dim strstart, Strenda como cadena strstart = mid (strsql, instr (strsql, () + 2, instr (strsql ,,) - instr (strsql, () - 3) strend = Mid (strsql, instr (strsql ,,) + 2, instr (strsql,)) - instr (strsql ,,) - 3) strsql = seleccionar * de trabajos donde job_id> = '& strstart &' y job_id <= '& strend &' Final si Final si NextStep: Dim strconnect como cadena strconnect = proveedor = sqloledb; server = ddk; uid = ydj; pwd = ydj; cn.open strconnect Rs.CursorLocation = aduseclient Rs.open Strsql, CN, Adopenstatic, AdlockOptimist, adcmdText Establecer returnrs = rs Función de salida EhgetRecordSet: Err.raise Err.Number, Err.Source, Err.Description Función final |
Copie rsget.dll a c:/windows o d:/winnt, inicio/ejecución, ingrese regsvr32.exe c: /windows/rsget.dll o regsvr32.exe d: /winnt/rsget.dll, presione el botón Aceptar para registrarse Para ser un componente del servidor web y agregar rsget.rsreturn en el registro HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlset/Services/W3SVC/Parameters/ADCLAUNCH.
Si usa un objeto comercial personalizado, modifique el código de archivo ASP anterior:
establecer rds = createObject (rds.dataSpace) Establecer df = rds.createObject (rdsserver.dataFactory, http://192.168.0.1) '192.168.0.1 es la dirección IP del servidor web Strcn = Provider = MS Remote; Remote Server = Http: //192.168.0.1; Handler = MSDFMAP.Handler; Data Source = PUBSDATABASE; strsql = getAllJobs Establecer rs = df.query (strcn, strsql) |
Cambio a:
establecer rds = createObject (rds.dataSpace) Establecer df = rds.createObject (rsget.rsreturn, http: //192.168.0.1) establecer rs = df.returnrs (PubSdatabase, getPubsByID ('2', '10'))) |
Además, se requiere la siguiente configuración en el lado del navegador:
Abrir panel de control -> Opciones de Internet -> Seguridad -> Nivel personalizado -> Inicializar y script que se ejecuta para controles ActiveX que no están marcados como seguros -> Activar