Lors du développement de sites Web ASP, les données de la base de données MSSQL doivent parfois être imprimées sur le client. . Si vous devez appeler une grande quantité de données, vous pouvez instancier l'objet RDS.Dataspace (service de données distant) dans le script client et utiliser un fournisseur distant pour accéder à la base de données MSSQL via le site Web ASP (défini uniquement via RDS Le gestionnaire par défaut ou les objets commerciaux personnalisés. Le code est le suivant:
< html > < tête > < Meta Content = Text / Html; Charset = GB2312 HTTP-Equiv = Content-Type > < Titre > Impression de feuille de calcul du client < / titre > < / tête > < Body bgColor = SkyBlue Topmargin = 5 Leftmargin = 20 onContextMenu = return false Rightmargin = 0 BottomArgin = 0 > < div aligne = centre >< Centre > < Table Border = 1 bgColor = # ffe4b5 style = hauteur: 1px; < tr > < TD Align = Middle BgColor = # ffffff borderColor = # 000080 > < Color de police = # 000080 Taille = 3 > Impression de feuille de calcul des clients < / police > < / td > < / tr > < / Tableau > < / div > < Nom du formulaire = Myform > < div align = gauche > < Type d'entrée = Button Value = Excel RAPPORT NOM = RAPPORT Langue = VBScript OnClick = Fun_Excel () Style = Height: 32px; < / div > < / Form > < / corps > < / html > < Langue de 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 est l'adresse IP du serveur Web strcn = prestat = MS Remote; Remote Server = http: //192.168.0.1; handler = msdfmap.handler; data source = pubsDatabase; strSql = getalljobs SET RS = DF.Query (Strcn, StrSQL) Définir xlapp = CreateObject (Excel.Application) 'Remarque Not: Server.CreateObject (Excel.Application) Définir xlbook = xlapp.workbooks.add Définir xlsheet1 = xlbook.Worksheets (1) xlsheet1.cells (1,1) .value = Tableau de travail XLSHEet1.Range (A1: D1) .Merge xlsheet1.cells (2,1) .value = job_id xlsheet1.cells (2,2) .value = job_descs xlsheet1.cells (2,3) .value = max_lvl xlsheet1.cells (2,4) .value = min_lvl cnt = 3 faire tout en pas 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 boucle xlsheet1.application.visible = true Sub-Sub < / script > |
Vous pouvez également instancier RDS DataControl, il suffit de modifier le code ci-dessus:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rdsServer.Datafactory, http://192.168.0.1) '192.168.0.1 est l'adresse IP du serveur Web strcn = prestat = MS Remote; Remote Server = http: //192.168.0.1; handler = msdfmap.handler; data source = pubsDatabase; strSql = getalljobs SET RS = DF.Query (Strcn, StrSQL) |
Modifié à:
set dc = createObject (rds.datacontrol) dc.execcuteOptions = 1 'set pour exécuter de manière synchrone, ce qui peut simplifier le code suivant dc.fetchoptions = 1 Avec DC .Server = http://192.168.0.1 .Handler = msdfmap.handler .Connect = Source de données = pubsDatabase; .Sql = getalljobs .Rafraîchir Se terminer avec Définir RS = DC.RecordSet |
Modifiez le fichier msdfmap.ini (si dans win98, c: /windows/msdfmap.ini; if in win2000, d: /winnt/msdfmap.ini; if in win2000 server, d: /winnts/msdfmap.ini).
[SQL GetAllJobs] SQL = SELECT * dans les travaux [Connecter Pubsdatabase] Access = ReadOnly Connect = Provider = SQLOLEDB; Data Source = SQL Server; Catalogue initial = pubs; uid = userId; pwd = mot de passe |
Ouvrez le Registry HKEY_LOCAL_MACHINE / System / CurrentControlset / Services / W3SVC / Paramètres / Adclaunch S'il n'y a pas de rdsserver.datafactory, veuillez l'ajouter. Cet exemple utilise le gestionnaire par défaut RDS pour accéder à la base de données. Veuillez noter que si la base de données n'est pas accessible via le gestionnaire RDS ou les objets commerciaux personnalisés, il pose un risque de sécurité à la base de données.
Ce qui suit est un objet commercial personnalisé dans VB, avec le code suivant:
«Écriture de dll activex, nom: rsget.dll, contenant la classe rsreturn, méthode return rs Fonction publique returnrs (strdb as variant, strSql as variant) que adodb.recordset 'Renvoie un ensemble de disques ADODB. Sur l'erreur goto ehgetRecordset DIM CN en tant que nouvel ADODB.Connection DIM RS comme nouveau ADODB.Recordset Sélectionnez Case Strdb Cas ydjjspdatabase strdb = ydjjsp Cas pubsdatabase strdb = pubs Fin de sélection Si strSql = getAllBuy alors strSql = SELECT * dans BuyUser Goto NextStep Terminer si Si vous êtes laissé (strSql, instr (strSql, () - 1) = getpubsbyid puis Si instr (strSql,,,) < = 0 alors Dim Str comme chaîne str = mid (strSql, instr (strSql, () + 2, instr (strSql,)) - instr (strSql, () - 3) strSql = select * dans les travaux où job_id = '& str &' Autre Dim StrStart, Sdrend comme String strStart = mid (strSql, instr (strSql, () + 2, instr (strSql ,,) - instr (strSql, () - 3) STREND = MID (STRSQL, INSTR (STRSQL ,,) + 2, INSTR (STRSQL,)) - instant (StrSQL ,,) - 3) strSql = select * dans les travaux où job_id> = '& strStart &' et job_id <= '& sdrend &' Terminer si Terminer si NextStep: Dim strconnect comme chaîne strConnect = provider = sqloledb; server = ddk; uid = ydj; pwd = ydj; database = & strdb &; cn.open strconnect Rs.CursorLocation = Aduseclient Rs.Open STRSQL, CN, AdoptenStatic, Adlockoptimist, AdcmdText Définir Retourrs = RS Fonction de sortie ehgetRecordset: Err.raise err.number, err.source, err.description Fonction finale |
Copiez rsget.dll sur c: / windows ou d: / winnt, start / run, entrez regsvr32.exe c: /windows/rsget.dll ou regsvr32.exe d: /winnt/rsget.dll, appuyez sur le bouton OK pour vous inscrire Pour être un composant de serveur Web, et ajouter RSGET.RSreturn dans le Registry HKEY_LOCAL_MACHINE / System / CurrentControlset / Services / W3SVC / Paramètres / Adclaunch.
Si vous utilisez un objet professionnel personnalisé, modifiez le code de fichier ASP ci-dessus:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rdsServer.Datafactory, http://192.168.0.1) '192.168.0.1 est l'adresse IP du serveur Web strcn = prestat = MS Remote; Remote Server = http: //192.168.0.1; handler = msdfmap.handler; data source = pubsDatabase; strSql = getalljobs SET RS = DF.Query (Strcn, StrSQL) |
Passer à:
set rds = createObject (rds.dataspace) Set df = rds.createObject (rsget.rsreturn, http: //192.168.0.1) set rs = df.returnrs (pubsdatabase, getpubsbyid ('2', '10')) |
De plus, la configuration suivante est requise du côté du navigateur:
Panneau de configuration ouvrir -> Options Internet -> Sécurité -> Niveau personnalisé -> Initialiser et le script en cours d'exécution pour les contrôles ActiveX qui ne sont pas marqués comme sûr -> Activer