www.cantechs.com.cn/aspsos网站有一篇文章你看看
使用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以上.
使用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以上.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货