动态SQL怎么才能被执行(50分)

  • 主题发起人 主题发起人 ma_hongbing
  • 开始时间 开始时间
M

ma_hongbing

Unregistered / Unconfirmed
GUEST, unregistred user!
我动态传给服务端的SQL语句怎么不执行!
返回给客户端的数据总是第一次写入的静态SQL的执行结果
 
客户端也要重新读一次数据吧!
 
用的什么数据组建?
假设是clientdataset
clientdataset.close;
clientdataset.commandtext:='***you sql***';
clientdataset.open;
 
我在客户端也读了!不行!
我是客户端调用业务逻辑MTS对象的数据模块的方法,其中一个参数就是输入的SQL语句;逻辑MTS对象在调用协调MTS数据模块的方法,其中一个参数就是输入的SQL语句,在调用协调MTS数据模块Query执行传入的SQL,但客户端的不到新的SQL语句执行的结果,而总是第一次写入协调MTS数据模块Query的静态SQL的结果。
 
如果用的是:query组件,那你在写:SQL语句时,最好加入以下的语句:query1.sql.clear;
或者如果是用的ADOQuery的话:就写:ADOQuery1.sql.clear;后再写其它语句就行了
 
第一个MTS数据模块(协调对象)代码:
procedure TdmoCF_customer_info.Get_Customers(const vSql_Str: WideString;
var vDatas: OleVariant);
begin
try
ADOQry_F_customer_info.Close;
ADOQry_F_customer_info.SQL.Clear;
ADOQry_F_customer_info.SQL.Text := vSql_Str;
ADOQry_F_customer_info.Open;
SetComplete ;
except
SetAbort;
end;
// try/except
end;
第二个MTS数据模块(逻辑对象)代码:
procedure TdmoQF_customer_info.Get_Customers(const vSql_Str: WideString;
var vDatas: OleVariant);
var
execObj:IdmoCF_customer_info;
begin
try
try
execObj:= CodmoCF_customer_info.CreateRemote('ly2001038');
execObj.Get_Customers(vSql_Str,vDatas) ;
ClientDataSet_F_customer_info.Active := True;
(下面这一句也试过了)
//ClientDataSet_F_customer_info.CommandText :='select * from f_customer_info where customer_id='+''''+'00002583'+'''';
ClientDataSet_F_customer_info.Open;
vDatas := ClientDataSet_F_customer_info.Data;
SetComplete ;
except
SetAbort ;
end;
finally // wrap up
ClientDataSet_F_customer_info.Active := False;
end;
// try/finally
end;
第三个MTS对象(逻辑对象,客户端就调用他的方法)代码:
(FMyDM : TdmoQF_customer_info;)
procedure TmtsQF_customer_info.GetOrg_Customers( const vOrgID: WideString;
var vData: OleVariant);
var Sql_str : String;

begin
try
Sql_str := 'select a.*, b.* from f_customer_info a, code_trade b '
+ ' where b.trade_id = substring(a.trade_id,1,8)+''' + '0000' ;
{if ( vOrgID <> '') then
begin
Sql_str := Sql_str +' and customer_id in (select customer_id from ' + vOrgID +')';
end ;
}
if ( vOrgID <> '') then
begin
Sql_str := Sql_str +' and customer_id in ('+''''+'00002583'+ ''''+')';
end ;
Sql_str := Sql_str +' order by a.bookin_id ';
FMyDM.Get_Customers(Sql_str,vData);
SetComplete ;
except
SetAbort ;
end;

end;

客户端代码:
procedure TForm1.GetCustomers(const vFilter: WideString;
var vData: OleVariant);
var
qObj : ImtsQF_customer_info;
begin
qObj:= ComtsQF_customer_info.CreateRemote('ly2001038');
qObj.GetOrg_Customers(vFilter,vData ) ;
showmessage(vData);
end;
 
ClientDataSet_F_customer_info.close;//先关一下。 (下面这一句也试过了)
//ClientDataSet_F_customer_info.CommandText :='select * from f_customer_info where customer_id='+''''+'00002583'+'''';
ClientDataSet_F_customer_info.Open;
 
远程数据模块的
dataprovide的allcommandtext要为true
客户端才能动态传入sql去修改远程的tadoquery
 
多人接受答案了。
 
后退
顶部