抢分问题,快,,,请问如何用DataSetProvider和CliendDataSet的DataRequest让客户端向服务端发出SQL命令?举个例子(20分)

  • 主题发起人 主题发起人 xhyph
  • 开始时间 开始时间
X

xhyph

Unregistered / Unconfirmed
GUEST, unregistred user!
这是我在李维的书上看见的例子
客户端
self.m_ClientDataSet.Data:=self.m_ClientDataSet.DataRequest( self.Sql_Edit_Advance.Text);
服务端
function TWatchSever.WS_DataSetProviderDataRequest(Sender: TObject;
Input: OleVariant): OleVariant;
var
i:Integer;
begin
self.WS_ADOQuery.Close;
self.WS_ADOQuery.SQL.Clear;
self.WS_ADOQuery.SQL.Add( Input);
self.WS_ADOQuery.Open;
self.WS_DataSetProvider.Reset(true);
//Reset怎么没有这个方法?
Result:=self.WS_DataSetProvider.GetRecords(-1,i);
//GetRecords怎么只有两个参数?
end;

好像不行啊,谁能举个例子
 
设置DataSetProvider的ALLOWCOMMANDTEXT TRUE
 
DataSetProvider的ALLOWCOMMANDTEXT 当然是TRUE
 
服务端应为:
function TWatchSever.WS_DataSetProviderDataRequest(Sender: TObject;
Input: OleVariant): OleVariant;
begin
self.WS_ADOQuery.Close;
self.WS_ADOQuery.SQL.Clear;
self.WS_ADOQuery.SQL.Add( Input);
self.WS_ADOQuery.Open;
Result := WS_DataSetProvider.Data;
end;

或:
function TWatchSever.WS_DataSetProviderDataRequest(Sender: TObject;
Input: OleVariant): OleVariant;
var
Recs: Integer;
Options: TGetRecordOptions;
begin
self.WS_ADOQuery.Close;
self.WS_ADOQuery.SQL.Clear;
self.WS_ADOQuery.SQL.Add( Input);
self.WS_ADOQuery.Open;
Options := [grMetaData];
Result := WS_DataSetProvider.GetRecords(-1, Recs, Byte(Options));
end;

另:GetRecords有两种参数:
function GetRecords(Count: Integer;
out RecsOut: Integer;
Options: Integer): OleVariant;
overload;
function GetRecords(Count: Integer;
out RecsOut: Integer;
Options: Integer;
const CommandText: WideString;
var Params,
OwnerData: OleVariant): OleVariant;
overload;
 
注:如果需要RESET:
Options := [grReset,grMetaData];
Result := WS_DataSetProvider.GetRecords(-1, Recs, Byte(Options));
(RESET是私有方法,不允许直接使用的,GetRecord可以自动RESET并打开DATASET)。
 
DELPHI的DEMO程序有一个用COMMANDTEXT来实现的,是在DEMOS/MIDAS/AdHoc
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部