请教写三层数据库的高手,你们写数据库时,客户端与应用服务器之间的数据传递是通过什么类型来传递的? (100分)

  • 主题发起人 主题发起人 徐凤华
  • 开始时间 开始时间

徐凤华

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写数据库时,发现:如果从客户端传递参数到应用服务器,那么一切都好说,
但是,要从应用服务器传递一些数据到客户端,除了Variant * 类型以外,好像
没有其它可用的类型,特向高手请教:
如何从应用服务器传递以下数据类型到客户端:
Integer;
String
TDate
Currency
Real
或者换一个思路,当我想把一个自定义的 record类型的数据,以参数形式送到应用服务
器时,我该怎样做?
我自己尝试着在Type Library中定义了一个Record类型,并且指定一个过程的参数为
这个Record类型,但在客户端调用应用服务器时,编译器提示:
Type not allowed in Variant Dispatch call.
救命!我该如何解决这个问题?
 
恐怕只有olevariant能实现双向传递(in,out)吧?
 
李维的《多层应用系统编》有,写的很清楚
 
参数不用传太多,我一般只传字符型和数值型的
 
soap基本上可以,除非复杂对象
 
如果是var的参数,注意在类型后面加*号
Integer Long *
String BSTR *
TDate Date *
Currency ??
Real do
uble *
 
请教 Dxcwxc:
在下刚学Delphi,不知Soap是何物?请指点一二.
最好能给个实现的例子,多谢!!!!!!
 
沙隆巴斯的主人:
你的方法我试了一下,可以实现多种类型数据的双向传递,谢谢.
但是应用服务器的过程参数实在太多,有40多个.如果不能传递自定义
Record类型的话,用起来还是很麻烦.天呐,难道就没有更好的方法了吗?
 
最简单常用的办法:不管是什么类型(RECORD,CLASS),都写到一个MEMORYSTREAM中,
然后创建VARARRAY的OleVariant,LOCK,把MEMORYSTREAM写入,UNLOCK,到对方后同样
LOCK,读到MEMORYSTREAM中,UNLOCK,从MEMORYSTREAM中读出。这种事我干得多了。
 
发展方向是xml
 
To Huzzz:
请发个简单的例子给我好吗? 在下一初学者,看了半天还是不知道你的方法该如何
实现.谢谢!
 
告诉你一个万能方法:
把你的数据变成流,把流变成VARIANT,用VARIANT传递,收到后再倒着变回来,
就什么都可以传了
祝你好运
function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0;
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;

function VariantToStream(const Data: OleVariant ):TStream;
var
p: Pointer;
Stream: TStream;
begin
p := VarArrayLock(Data);
try
Stream.Write(p^, VarArrayHighBound(Data,1) + 1);
finally
VarArrayUnlock(Data);
end;
Result:=Stream;
end;
 
请教fpsky:
李维的书是怎样做到传递自定义record类型的?
我这儿急着要用,一时半回从书中又未能找到,请告之传递Record类型的步骤.
 
我已搞定了,非常感谢大家,只是分太少((全部财产只剩10分了)),对不住大家,请多包涵.
 
那怎么样把自定义Record转换成流那?
 
用PCHAR把XML的格式封长起来
 
后退
顶部