首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过以delphi VLC形式编码通过delphi webservice返回的代码来使用TDatasource组件

如何通过以delphi VLC形式编码通过delphi webservice返回的代码来使用TDatasource组件
EN

Stack Overflow用户
提问于 2013-07-31 18:41:51
回答 1查看 342关注 0票数 0

我做了一个cgi web服务。代码如下:

代码语言:javascript
复制
unit MyServicesImpl;

interface

uses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns, MyServicesIntf,
  Data.DB,
  Data.SqlExpr, SQLConnection1, Data.Win.ADODB;

type
  { TMyServices }
  TMyServices = class(TInvokableClass, IMyServices)
  public
    function TestFunction(): TADODataSet; stdcall;
  end;

var
  ConnString: string;
  objTADOQuery: TADOQuery;
  objTSQLDS: TDataSource;
  objDS: TADODataSet;
  objTable :TADOTable;

implementation


function TMyServices.TestFunction: TADODataSet;
var
  objTSQLConnection1: TADOConnection;
var
  conStr: string;
begin

  objTSQLConnection1 := TADOConnection.Create(nil);
  conStr := 'Provider=sqloledb;' + 'Data Source=Kays-serv64-01;' +
    'Initial Catalog=Test;' + 'User Id=sa;Password=Kays@India';
  objTSQLConnection1.ConnectionString := conStr;
  objTSQLConnection1.LoginPrompt := False;

  objTSQLConnection1.Connected := True;

  if (objTSQLConnection1.Connected) then
  begin
    objTADOQuery := TADOQuery.Create(nil);
    objTSQLDS := TDataSource.Create(nil);
    objDS:= TADODataSet.Create(nil);
    objTable:= TADOTable.Create(nil);
    objTable.TableName:='expediads';
    objTADOQuery.Connection := objTSQLConnection1;
    objTADOQuery.SQL.Text := 'select * from expediads';
    objTADOQuery.Prepared := True;
    objTADOQuery.Active := True;
    objTSQLDS.DataSet := objTADOQuery;
    objDS.DataSource:=objTSQLDS;
    Result := objDS;
  end
  else
  begin
    Result := objDS;
  end;
end;

initialization

{ Invokable classes must be registered }
InvRegistry.RegisterInvokableClass(TMyServices);

end. 

现在我正在尝试使用这个wsdl服务,我已经使用了一个导入的wsdl。但当我使用它时,LIke:

代码语言:javascript
复制
Procedure TForm3.TestFunction;
var
  vMyService: IMyServices;
var
  objDataSource: TDataSource;
var
  objNewDS: IMyServices1.TADODataSet;
  var
  objTSQLConnection1: TADOConnection;
var
  conStr: string;
begin

  vMyService := GetIMyServices;
  objNewDS :=vMyService.TestFunction();
  end;

测试函数返回IMyservice1.TADODataset nad,因此与Data.DB.TADODataset不兼容。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2013-07-31 20:49:08

您不能这样做,因为TADODataSet不能被远程处理,因为它在客户端和服务器上都需要TADOConnectionConnectionString之类的东西。

使用Delphi删除数据的方法我们使用DataSnap,在服务器端使用一个TSoapDataModule,其中包含一个使用TDataSetProviderTADODataSet填充的TClientDataSet,在客户端使用一个TSoapConnection加上客户端的TClientDataSet

然后,DataSnap将使用SOAP (即XML over HTTP)为您执行所有读取/更新流量。

要了解如何设置,请参阅DataSnap videos from Pawel Glowacki,然后阅读Creating multi tiered applications Index上的文档。

请注意,对于DataSnap,您需要将Delphi Enterprise作为最低版本,这不适用于CGI webservices。

另一种解决方案(选择较少,但将数据从服务器端传递到客户端)是将TClientDataSet的内部数据公开为可扩展标记语言,通过CGI Web Service上的方法提供,而不是在客户端将该可扩展标记语言再次放入TClientDataSet中。

我不确定这是否在Delphi许可条款内(他们可能禁止使用TClientDataSet做多层工作),但它应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17968164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档