请大侠帮忙,
我做的一个关于数据库的客户端小程序,用的是Embarcadero RAD Studio2010 开发,是关于WebService的,服务端数据库是DB2,经测试只能在安装过Embarcadero RAD Studio2010的计算机能使用,并且非常正常看,但是不能再别的计算机使用,请问各大侠,客户端到底需要哪些支持文件:如DLL、BPL等。
我做的一个关于数据库的客户端小程序,用的是Embarcadero RAD Studio2010 开发,是关于WebService的,服务端数据库是DB2,经测试只能在安装过Embarcadero RAD Studio2010的计算机能使用,并且非常正常看,但是不能再别的计算机使用,请问各大侠,客户端到底需要哪些支持文件:如DLL、BPL等。
2.你用了什么数据引擎,不同的数据引擎需要不同的发布方式(ODBC/ADO不用发布)
3.你的客户机上要安装DB2的客户端
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml
// >Import : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml>0
// >Import : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml>1
// Version : 1.0
// (2010-02-25 9:54:59 - - $Rev: 24171 $)
// ************************************************************************ //unit IEPCS_IIS_WebSCoorSpplyIsapi1;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type // ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Embarcadero types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"[Gbl]
// !:double - "http://www.w3.org/2001/XMLSchema"[Gbl]
// !:TDoubleDynArray - "http://www.borland.com/namespaces/Types"[GblCplx]
// !:int - "http://www.w3.org/2001/XMLSchema"[] TSampleStruct = class; { "urn:EPCS_IIS_WebSCoorSpplyIsapi"[GblCplx] } {$SCOPEDENUMS ON}
{ "urn:EPCS_IIS_WebSCoorSpplyIsapi"[GblSmpl] }
SampleEnum = (etNone, etAFew, etSome, etALot); {$SCOPEDENUMS OFF} // ************************************************************************ //
// XML : TSampleStruct, global, <complexType>
// Namespace : urn:EPCS_IIS_WebSCoorSpplyIsapi
// ************************************************************************ //
TSampleStruct = class(TRemotable)
private
FLastName: string;
FFirstName: string;
FSalary: Double;
published
property LastName: string read FLastName write FLastName;
property FirstName: string read FFirstName write FFirstName;
property Salary: Double read FSalary write FSalary;
end;
// ************************************************************************ //
// Namespace : urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi
// soapAction: urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi#%operationName%
// transport : http://schemas.xmlsoap.org/soap/http
// style : rpc
// binding : IEPCS_IIS_WebSCoorSpplyIsapibinding
// service : IEPCS_IIS_WebSCoorSpplyIsapiservice
// port : IEPCS_IIS_WebSCoorSpplyIsapiPort
// URL : http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi
// ************************************************************************ //
IEPCS_IIS_WebSCoorSpplyIsapi = interface(IInvokable)
['{719EE96A-92B7-C8C2-BE22-AA38D4C68C0B}']
function SpplyVanDataBySQL(const sSQL: string): string; stdcall;
function SpplyVanDataBySQLs(const sSQLs: string): string; stdcall;
function SpplyEpcDataBySQL(const sSQL: string): string; stdcall;
function ApplyVanDataBySQL(const sSQL: string; const sDelta: string): Integer; stdcall;
function ApplyVanDataBySQLupKeyChanged(const sSQL: string; const sDelta: string; const sKey: string): Integer; stdcall;
function ApplyEpcDataBySQLupKeyChanged(const sSQL: string; const sDelta: string; const sKey: string): Integer; stdcall;
function echoEnum(const eValue: SampleEnum): SampleEnum; stdcall;
function echoDoubleArray(const daValue: TDoubleDynArray): TDoubleDynArray; stdcall;
function echoStruct(const pEmployee: TSampleStruct): TSampleStruct; stdcall;
function echoDouble(const dValue: Double): Double; stdcall;
end;function GetIEPCS_IIS_WebSCoorSpplyIsapi(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IEPCS_IIS_WebSCoorSpplyIsapi;
implementation
uses SysUtils;function GetIEPCS_IIS_WebSCoorSpplyIsapi(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IEPCS_IIS_WebSCoorSpplyIsapi;
const
defWSDL = 'D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml';
defURL = 'http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi';
defSvc = 'IEPCS_IIS_WebSCoorSpplyIsapiservice';
defPrt = 'IEPCS_IIS_WebSCoorSpplyIsapiPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IEPCS_IIS_WebSCoorSpplyIsapi);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(IEPCS_IIS_WebSCoorSpplyIsapi), 'urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi', '');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IEPCS_IIS_WebSCoorSpplyIsapi), 'urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi#%operationName%');
RemClassRegistry.RegisterXSClass(TSampleStruct, 'urn:EPCS_IIS_WebSCoorSpplyIsapi', 'TSampleStruct');
RemClassRegistry.RegisterXSInfo(TypeInfo(SampleEnum), 'urn:EPCS_IIS_WebSCoorSpplyIsapi', 'SampleEnum');end.
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml
// >Import : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml>0
// >Import : D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml>1
// Version : 1.0
// (2010-02-25 9:54:59 - - $Rev: 24171 $)
// ************************************************************************ //unit IEPCS_IIS_WebSCoorSpplyIsapi1;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type // ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Embarcadero types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"[Gbl]
// !:double - "http://www.w3.org/2001/XMLSchema"[Gbl]
// !:TDoubleDynArray - "http://www.borland.com/namespaces/Types"[GblCplx]
// !:int - "http://www.w3.org/2001/XMLSchema"[] TSampleStruct = class; { "urn:EPCS_IIS_WebSCoorSpplyIsapi"[GblCplx] } {$SCOPEDENUMS ON}
{ "urn:EPCS_IIS_WebSCoorSpplyIsapi"[GblSmpl] }
SampleEnum = (etNone, etAFew, etSome, etALot); {$SCOPEDENUMS OFF} // ************************************************************************ //
// XML : TSampleStruct, global, <complexType>
// Namespace : urn:EPCS_IIS_WebSCoorSpplyIsapi
// ************************************************************************ //
TSampleStruct = class(TRemotable)
private
FLastName: string;
FFirstName: string;
FSalary: Double;
published
property LastName: string read FLastName write FLastName;
property FirstName: string read FFirstName write FFirstName;
property Salary: Double read FSalary write FSalary;
end;
// ************************************************************************ //
// Namespace : urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi
// soapAction: urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi#%operationName%
// transport : http://schemas.xmlsoap.org/soap/http
// style : rpc
// binding : IEPCS_IIS_WebSCoorSpplyIsapibinding
// service : IEPCS_IIS_WebSCoorSpplyIsapiservice
// port : IEPCS_IIS_WebSCoorSpplyIsapiPort
// URL : http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi
// ************************************************************************ //
IEPCS_IIS_WebSCoorSpplyIsapi = interface(IInvokable)
['{719EE96A-92B7-C8C2-BE22-AA38D4C68C0B}']
function SpplyVanDataBySQL(const sSQL: string): string; stdcall;
function SpplyVanDataBySQLs(const sSQLs: string): string; stdcall;
function SpplyEpcDataBySQL(const sSQL: string): string; stdcall;
function ApplyVanDataBySQL(const sSQL: string; const sDelta: string): Integer; stdcall;
function ApplyVanDataBySQLupKeyChanged(const sSQL: string; const sDelta: string; const sKey: string): Integer; stdcall;
function ApplyEpcDataBySQLupKeyChanged(const sSQL: string; const sDelta: string; const sKey: string): Integer; stdcall;
function echoEnum(const eValue: SampleEnum): SampleEnum; stdcall;
function echoDoubleArray(const daValue: TDoubleDynArray): TDoubleDynArray; stdcall;
function echoStruct(const pEmployee: TSampleStruct): TSampleStruct; stdcall;
function echoDouble(const dValue: Double): Double; stdcall;
end;function GetIEPCS_IIS_WebSCoorSpplyIsapi(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IEPCS_IIS_WebSCoorSpplyIsapi;
implementation
uses SysUtils;function GetIEPCS_IIS_WebSCoorSpplyIsapi(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IEPCS_IIS_WebSCoorSpplyIsapi;
const
defWSDL = 'D:\EPCS_ARCH\IIS\WebService\Web.ISAPI\WSDL\IEPCS_IIS_WebSCoorSpplyIsapi.xml';
defURL = 'http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi';
defSvc = 'IEPCS_IIS_WebSCoorSpplyIsapiservice';
defPrt = 'IEPCS_IIS_WebSCoorSpplyIsapiPort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IEPCS_IIS_WebSCoorSpplyIsapi);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(IEPCS_IIS_WebSCoorSpplyIsapi), 'urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi', '');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IEPCS_IIS_WebSCoorSpplyIsapi), 'urn:EPCS_IIS_WebSCoorSpplyIsapi-IEPCS_IIS_WebSCoorSpplyIsapi#%operationName%');
RemClassRegistry.RegisterXSClass(TSampleStruct, 'urn:EPCS_IIS_WebSCoorSpplyIsapi', 'TSampleStruct');
RemClassRegistry.RegisterXSInfo(TypeInfo(SampleEnum), 'urn:EPCS_IIS_WebSCoorSpplyIsapi', 'SampleEnum');end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, InvokeRegistry, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel,
dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinFoggy, dxSkinGlassOceans,
dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky,
dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue,
dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver,
dxSkinPumpkin, dxSkinSeven, dxSkinSharp, dxSkinSilver, dxSkinSpringTime,
dxSkinStardust, dxSkinSummer2008, dxSkinsDefaultPainters, dxSkinValentine,
dxSkinXmas2008Blue, cxGraphics, cxControls, cxLookAndFeels,
cxLookAndFeelPainters, cxStyles, dxSkinscxPCPainter, cxCustomData, cxFilter,
cxData, cxDataStorage, cxEdit, DB, cxDBData, cxContainer, cxDropDownEdit,
cxTextEdit, cxMaskEdit, cxCalendar, StdCtrls, cxPC, cxGridLevel, cxClasses,
cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
cxGrid, cxNavigator, dxSkinsForm, DBClient, Rio, SOAPHTTPClient,IEPCS_IIS_WebSCoorSpplyIsapi1,Comobj;type
TForm1 = class(TForm)
SpplyHTTPRIO: THTTPRIO;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
dxSkinController1: TdxSkinController;
cxPageControl1: TcxPageControl;
cxTabSheet1: TcxTabSheet;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label10: TLabel;
Edit3: TEdit;
Edit1: TEdit;
Button1: TButton;
Button3: TButton;
Edit10: TEdit;
Edit4: TEdit;
Button10: TButton;
Button4: TButton;
Button18: TButton;
cxTabSheet2: TcxTabSheet;
Label7: TLabel;
Edit7: TEdit;
Button8: TButton;
Button2: TButton;
Button5: TButton;
cxTabSheet3: TcxTabSheet;
Label14: TLabel;
Label33: TLabel;
Label34: TLabel;
Label16: TLabel;
Edit14: TEdit;
Edit16: TEdit;
Button20: TButton;
Button54: TButton;
Button19: TButton;
cxDateEdit2: TcxDateEdit;
cxDateEdit1: TcxDateEdit;
Button6: TButton;
Button7: TButton;
Button9: TButton;
cxTabSheet4: TcxTabSheet;
Label8: TLabel;
Label9: TLabel;
Label2: TLabel;
Edit8: TEdit;
Button11: TButton;
Edit9: TEdit;
Button12: TButton;
Button16: TButton;
Edit2: TEdit;
Button13: TButton;
cxTabSheet5: TcxTabSheet;
Label17: TLabel;
Label18: TLabel;
Edit17: TEdit;
Button21: TButton;
Edit18: TEdit;
Button23: TButton;
Button22: TButton;
Button14: TButton;
cxTabSheet6: TcxTabSheet;
Label19: TLabel;
Label23: TLabel;
Label20: TLabel;
Label24: TLabel;
Edit23: TEdit;
Edit19: TEdit;
Button24: TButton;
Edit20: TEdit;
Button31: TButton;
Button32: TButton;
Button27: TButton;
Button15: TButton;
Button17: TButton;
Button25: TButton;
Button26: TButton;
cxDateEdit3: TcxDateEdit;
cxTabSheet7: TcxTabSheet;
Label5: TLabel;
Label6: TLabel;
Label11: TLabel;
Edit5: TEdit;
Button28: TButton;
Button29: TButton;
Button30: TButton;
Button33: TButton;
Edit6: TEdit;
cxDateEdit4: TcxDateEdit;
Button34: TButton;
Button35: TButton;
cxTabSheet8: TcxTabSheet;
Label35: TLabel;
Edit35: TEdit;
Button58: TButton;
Button64: TButton;
cxTabSheet9: TcxTabSheet;
Label12: TLabel;
Label13: TLabel;
Label15: TLabel;
Label21: TLabel;
Label22: TLabel;
Label26: TLabel;
Label25: TLabel;
Label27: TLabel;
Label31: TLabel;
cxDateEdit5: TcxDateEdit;
cxDateEdit6: TcxDateEdit;
Edit11: TEdit;
Button37: TButton;
Edit12: TEdit;
Edit13: TEdit;
Button36: TButton;
cxComboBox1: TcxComboBox;
Edit15: TEdit;
cxComboBox2: TcxComboBox;
cxTabSheet10: TcxTabSheet;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label32: TLabel;
cxDateEdit7: TcxDateEdit;
cxDateEdit8: TcxDateEdit;
Edit21: TEdit;
Button38: TButton;
Button39: TButton;
cxNavigator1: TcxNavigator;
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
SpplyProxy:IEPCS_IIS_WebSCoorSpplyIsapi;
procedure BGDK(cxGridDBTableView:TcxGridDBTableView);
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.BGDK(cxGridDBTableView:TcxGridDBTableView);
var j,k:integer;
begin
if cxGridDBTableView.ColumnCount<>ClientDataSet1.FieldCount then
begin
for j:=0 to cxGridDBTableView.ColumnCount-1 do
begin
cxGridDBTableView.Columns[0].Free;
next;
end;
end;
if cxGridDBTableView.ColumnCount<1 then
begin for j:=0 to ClientDataSet1.FieldCount-1 do
begin
cxGridDBTableView.CreateColumn;
cxGridDBTableView.Columns[j].Caption:=ClientDataSet1.Fields.Fields[j].FieldName;
cxGridDBTableView.Columns[j].DataBinding.FieldName:=ClientDataSet1.Fields.Fields[j].FieldName;
next;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
// ClientDataSet1.XMLData:=SpplyProxy.SpplyVanDataBySQL('select * from MTS_ITEM where ITEMID like '''+ Edit1.Text+'%''') ;
// BGDK(cxGrid1DBTableView1);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Application.Initialize;
SpplyProxy:=GetIEPCS_IIS_WebSCoorSpplyIsapi;try
//OleCheck( SpplyHTTPRIO.QueryInterface(SpplyProxy));
// SpplyProxy:=GetIEPCS_IIS_WebSCoorSpplyIsapi(false, 'http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi');
ClientDataSet1.XMLData:=SpplyProxy.SpplyVanDataBySQL('Select * From AAA') ;
if ClientDataSet1.Active=false then
begin
SpplyProxy:=GetIEPCS_IIS_WebSCoorSpplyIsapi(false, 'http://192.168.1.9:2002/WebServicesSpply/EPCS_IIS_WebSCoorSpply.dll/soap/IEPCS_IIS_WebSCoorSpplyIsapi');
ClientDataSet1.XMLData:=SpplyProxy.SpplyVanDataBySQL('Select * From AAA') ;
end;
finally
if ClientDataSet1.Active=false then
ShowMessage('数据库连接不成功! ');
end;
end;end.
2.你用了什么数据引擎,不同的数据引擎需要不同的发布方式(ODBC/ADO不用发布)
3.你的客户机上要安装DB2的客户端 回:不需要db2客户端,也不需要数据引擎。数据库那边是没问题的。
看了一下你的程序,不知你的SpplyProxy是什么控件,另外,你用了大量的第三方控件(cx开头的),但估计这个不是主要原因,主要还是数据引擎的问题,db2我用的很少,但一般情况下,BCB缺省是没有直接支持DB2的,它还是应该有db2客户端支持的
这个接口是本公司外委一个软件公司开发的大型软件做的接口,他们的软件都是通过这个接口存取数据。只是用C++Builder开发,不过程序开发的不怎么地,我想自己利用这个端口,开发我们自己的程序,在原来的程序上作补充。
少什么.dll,就拷什么dll进去。反正就根据提示一步步来,