使用RDS技术 RDS(Remote Data Services),和ADC(Advanced Data Connector)提供一种通过HTTP来访问 商业对象和ADO的方法。RDS调用msadco.dll . RDS的DataSpace一共有两个属性可供使用。 1。InternetTimeout属性 该属性提供了客户端等待服务端回应的时间长短。 如果时间到,那么客户端返回错误如下: Request Timeout . (Error number -2147012894 ). 2。CreateObject 有两个参数:ProgID 和server name . 使用RDS的好处在于能够使用CreateObject方法指定一个Internet上的服务器名。 (例如:Http://www.MyServer.com ). 注意: RDS 不仅仅局限与HTTP协议。它也能够使用在DCOM上,并且 可以进行Intranet和Internet(中间有防火墙)的通信。 RDS的CreateObject函数实际上是在客户端建立一个代理,在服务器端建立一个桩(stub) 代理是用来连接到服务器上的商业对象的。 而服务器上的桩(在IIS中的DataStub)从客户端代理中接受HTTP的请求 这个代理不同于COM使用的代理,COM使用的代理仅仅支持调用IDispatch的接口。 而其它对business object的调用必须要通过RDS. 所有使用RDS的CreateObject生成的对象都被绑定到IDispatch接口上. 它允许客户端调用服务器端的business objects而不用在本地机器上进行注册 而对于COM/DCOM就必须要求客户端注册同样的库。 注意: 在调用CreateObject函数时,RDS并不检查客户定义的ProgId和server name是否合理 这些信息仅仅是在客户调用对象的方法时才被检查。 如果客户定义了一个非法的server name,RDS会出现以下错误: Cannot Connect to Server ( -2147012867 ). 如果客户定义了一个非法的ProgId,RDS会出现以下错误: Unable to create business object ( 4100 ). 如果客户非法调用了对象中的方法,RDS会出现以下错误: Unable to invoke method on business object ( 4101 ). 如何调用RDS呢?代码如下: Dim objRDS Dim objMyBusObj Set objRDS = CreateObject("RDS.DataSpace") Set objMyBusObj = objRDS.CreateObject("MyComponent.MyObject", "Http://MyServer") 下面给出具体实现的例子来: RDS在DHTML的运用: 在DHTML中使用RDS允许用户在不刷新页面的情况下访问数据库。 传统的方法,是用户在页面上编辑数据,然后数据被送到服务器端,然后 被保存到数据源中。(这个过程中将会使用到多个页面) 而在DHTML中使用RDS所有数据的装载,编辑,保存都是在一个页面中完成的。 下面的代码是写在HTML <SPAN>标志中的. Sub btnRun_OnClick() Dim objDataSpace Dim rsAuthors Dim objAuthor Dim strTable Dim objField
Set objDataSpace = CreateObject("RDS.DataSpace") Set objAuthor = objDataSpace.CreateObject("MyRDSServer.Author", "Http://www.MyServer.com") Set rsAuthors = objAuthor.Fetch() If rsAuthors.EOF And rsAuthors.BOF Then MsgBox "没有记录." Else strTable = "<CENTER>" & Chr(13) & "<TABLE BORDER=1>" & Chr(13) strTable = strTable & "<TR>" & Chr(13) For Each objField In rsAuthors.Fields strTable = strTable & "<TD><STRONG>" & rsAuthors.Name & "</TD></STRONG>" & Chr(13) Next strTable = strTable & "</TR>" & Chr(13) strTable = strTable & "<TR><TD>" & Chr(13) strTable = strTable & rsAuthors.GetString(2, -1, "</TD><TD>", "</TD></TR><TR><TD>", Chr(13)) strTable = strTable & "</TD></TR>" & Chr(13) strTable = strTable & "</TABLE>" & Chr(13) & "</CENTER>" & Chr(13) spnResult.innerhtml = strTable End If Set rsAuthors = Nothing Set objAuthor = Nothing Set objDataSpace = Nothing End Sub
<OBJECT ID="dspDataSpace" CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36"> </OBJECT>
RDS和ActiveX 下面的代码是从数据库中得到数据后并把它载入到一个列表ActiveX控件中. Private Sub cmdExecute_Click() Dim objAuthor As Object Dim objDataSpace As RDS.DataSpace Dim rsAuthors As Object Dim objField As ADOR.Field Dim ltmListItem As ListItem
Dim intCount On Error GoTo Error_Handler
Set objDataSpace = New RDS.DataSpace Set objAuthor = objDataSpace.CreateObject("MyRDSServer.Author", "Http://www.MyServer.com") Set rsAuthors = objAuthor.Fetch()
With rsAuthors If .Fields.Count > 0 Then For Each objField In .Fields lsvData.ColumnHeaders.Add , , objField.Name Next If .Fields.Count > 1 Then Do Until .EOF Set ltmListItem = lsvData.ListItems.Add(, , .Fields(1).Value) intCount = 1 For intCount = 1 To .Fields.Count ltmListItem.SubItems(intCount) = .Fields(intCount).Value & "" intCount = intCount + 1 Next .MoveNext Loop ElseIf .Fields.Count = 1 Then Do Until .EOF lsvData.ListItems.Add , , .Fields(1).Value .MoveNext Loop End If '.Fields.Count > 1 End If '.Fields.Count > 0 End With End Sub
配置RDS 1。IIS 4.0以上. 2。ADO 1.5以上.
|