三层结构中的Clientdataset的提交问题(50分)

  • 主题发起人 主题发起人 ztliuyun
  • 开始时间 开始时间
Z

ztliuyun

Unregistered / Unconfirmed
GUEST, unregistred user!
三层结构,中间用 Corba,数据库用ORACLE.
我在应用服务器上设一 Query数据集,SQL属性为空。然后在客户端用CLientdataset的
CommandText属性把一Select语句传到应用服务器上,数据可以准确传回客户端,但是在
客户端做修改后,进行ClientDataSet.ApplyUpdatas(-1)或(0)都出错,错误信息是
“找不到Yable”。
但是如果把SQL语句放到Query的SQL中,就可以读取和修改了。
但我很希望能动态传递SQL语句,这样做到底哪里出错?请大虾们指教
 
上面内容的 “找不到Yable”应改为“找不到Table”
 
添加一个Query.SQL.Add('''Edit1.text''');试试呢?
 
这是因为更新数据时要从SQL属性中解析出表名来。
可以考虑在服务器端增加一个服务“设置SQL”来实现动态SQL。
 
利用DataSetProvider的DataRequest事件可以实现传参数问题,具体方法你可以查阅一下DELPHI的帮助示例
 
在服务器添加
Function TRDM.OpenSQL(const SqlStr: WideString): OleVariant
var
dsp:TDataSetProvider;
TQ:TADOQuery;
begin
TQ:=TADOQuery.Create(nil);
TQ.Conntion:=?;
UC_OpenSqlStrEx(TQ,SqlStr,VG_WorkerID,'U_SearchAllRecord',VG_ComputerName);
if TQ.Active
then
begin
dsp:=TDataSetProvider.Create(Self);
dsp.DataSet:=TQ;
Result :=dsp.Data;
dsp.Free;
dsp := Nil;
end
else
Result := '';
TQ.Free;
end;

在客户端添加
ClienctDataSet.Data:=Dcom.AppServer.OpenSQL('....');
 
我用的是 BDE,设置了"设置SQL"的服务,不过好像不行
 
Bde把ADOQuery换成Query就行了
 
多人接受答案了。
 
后退
顶部