如何在三层结构的应用中在网络间传递记录集? 需要原理和代码。
请给完整的代码,简单就可以,但是要能说明问题。 问题点数:60、回复次数:20Top
1 楼astroboy()回复于 2003-12-01 11:45:35 得分 0
什么意思?就是返回记录集?Top
2 楼jingsg0(舞为鹤)回复于 2003-12-01 11:49:58 得分 0
我要能象在本地一样使用记录集,来实现增、删、查、改,要能更新,能做到吗?请给具体的代码!Top
3 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-01 11:52:12 得分 10
http://www.ourfly.com/bbs/dispbbs.asp?boardID=5&ID=71
这篇不行吗???
其实和本地的没有什么区别
定义成函数或者过程即可
Top
4 楼jingsg0(舞为鹤)回复于 2003-12-01 12:14:47 得分 0
这篇文章我有的,但是没有讲能不能在网络之间传数据集,我要做的就是给远程的组件传个sql语句,需要返回一个数据集,但是我试了很多此都没有成功。有个精通delphi的朋友说这样的功能是vb做不到的:能传字符串,但是不能传记录集。Top
5 楼jingsg0(舞为鹤)回复于 2003-12-01 12:41:23 得分 0
upTop
6 楼davidlv(断刀客)回复于 2003-12-01 13:29:09 得分 10
可以做到的
写一个DLL(也就是类啦,但是放在服务端的),如下原理
'定义外部接口,用于接收外部传进来的SQL语句
private mSql as string
public property let SqlString (byval v as string)
mSql=v
end property
'定义一个外部接口,传回得到的结果合集
public function GetRst as adodb.recordset
dim rst as adodb.recordset
'在这里写入一些代码,调用msql这个外部
'传进来的Sql语句,去得到相应的结果集
set getrst=rst '将得到的结果集赋给函数,这样外部就得到了
end functionTop
7 楼davidlv(断刀客)回复于 2003-12-01 13:30:46 得分 0
客户端调用这个类时,要用createobject()来建立对象,即set nObject=createobject("类名",服务器名)Top
8 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-01 13:31:07 得分 0
我要做的就是给远程的组件传个sql语句,需要返回一个数据集
public testrs(strsql as string) as adodb.recordset
dim rs as new adodb.recordset
rs.open strsql
set testrs=rs
end sub
代码仅仅是举例而已,
绝对没有问题Top
9 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-03 12:35:27 得分 0
同意楼上2位Top
10 楼Rick110AAA(海牛猪猪 And HerosⅢ之比蒙)回复于 2003-12-03 13:57:36 得分 0
学习啦~~~Top
11 楼kimurakenshin(浪客)回复于 2003-12-03 14:14:28 得分 0
UP UP 关注.........Top
12 楼jingsg0(舞为鹤)回复于 2003-12-03 15:16:51 得分 0
to 回复人:online(龙卷风(白学了,重新充电中))
你说的方法是可以,但是有个缺点,因为我每次用到记录集的时候都要调用组件层的函数类重新构件新的记录集,速度很慢。我试过用属性来返回,但是又不能实现修改和更新、删除等。 有没有好的解决办法? 今天结贴!Top
13 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-03 15:51:30 得分 0
我试过用属性来返回,但是又不能实现修改和更新、删除等
能举个例子吗?
Top
14 楼Apple200228(Apple)回复于 2003-12-03 16:21:50 得分 0
关注!学习!Top
15 楼davidlv(断刀客)回复于 2003-12-03 16:45:33 得分 10
有点不清楚楼主的意思,如果只要返回一个记录集,用属性或方法均可,且这个是在服务端做的,客户端不会觉得慢。如果你想给服务端一个SQL让它去更新数据表,也可以用这个方法呀,让DLL public 一个方法接收SQL语句字符串,可一个public property 也可以呀,在服务端上(也就是DLL)去做就是了,不知道你想要的是不是这个意思。
我的MSN:yongliang_lv@msn.comTop
16 楼jingsg0(舞为鹤)回复于 2003-12-03 17:45:53 得分 0
dll代码:
Private mSqlString As String
Private rs As New ADODB.Recordset
Private connectString As String
Public Property Get gStrSqlstring() As Variant
gStrSqlstring = mSqlString
End Property
Public Property Let gStrSqlstring(ByVal vNewValue As Variant)
mSqlString = vNewValue
End Property
Public Function ExecuteSql()
connectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Pubs;Data Source=(local)"
On Error GoTo errh:
If rs.State = 0 Then
rs.Close
End If
rs.Open mSqlString, connectString, adOpenDynamic, adLockOptimistic, 0
'Set rs = Nothing
Exit Function
errh:
Set rs = Nothing
Set ExecuteSql = Nothing
End Function
Public Property Get gRecordset() As Variant
Set gRecordset = rs
End Property
Public Property Get gStrConnectionString() As String
gStrConnectionString = connectString
End Property
Public Property Let gStrConnectionString(ByVal vNewValue As String)
connectString = vNewValue
End Property
客户界面:
Set OX = CreateObject("qqq.test", "192.168.2.89") '组件的引用是没有问题的
strConnecting = Text1.Text
OX.gStrSqlstring = strConnecting
OX.gStrConnectionString = strCnn
Call OX.ExecuteSql ’现在也可以的
with OX.gRecordset
.fields(0)="1234" '出错,说‘该对象不支持此属性或方法’,如果用来返回记录集是可以更新的,但是要多次访问服务器来取得记录集,很费时。 怎么办??
.update
End With
Top
17 楼jingsg0(舞为鹤)回复于 2003-12-03 17:50:04 得分 0
写掉了 : “如果用ExecuteSql()来返回记录集是可以更新的”。Top
18 楼maskzha(MaskZha)回复于 2003-12-03 18:14:41 得分 0
用方法可以更新吧?Top
19 楼jingsg0(舞为鹤)回复于 2003-12-03 18:18:32 得分 0
是的。 你有什么高见?快,我要下班了Top
20 楼davidlv(断刀客)回复于 2003-12-05 10:34:29 得分 30
楼主,你把从服务端得到的记录想在本地直接修改是有问题的,三层结构的写法是服务端将获得的记录交给一个对象中的属性(如collection或object),客户端从这个属中获得相应的值,再将值赋给这个属性,并操作对象中的一个方法来完成对数据表的修改。
我写的三层就是这样的,客户端非常简单,几乎没有什么代码的。
我的MSN:yongliang_lv@msn.comTop




