我在服务器端新建了一个remotedatamodule,和一个objclass的单元文件,objclass单元文件中有这么一句话:
remotedatamodule.ADOQuery1.Close;
....
编译时在这一行出错,[Error] UntObj.pas(41): Undeclared identifier: 'remotedatamodule'
请问我该怎么做,才能在其他单元文件中使用remotedatamodule中的控件啊??
如果不能用,那么我该怎么做
remotedatamodule.ADOQuery1.Close;
....
编译时在这一行出错,[Error] UntObj.pas(41): Undeclared identifier: 'remotedatamodule'
请问我该怎么做,才能在其他单元文件中使用remotedatamodule中的控件啊??
如果不能用,那么我该怎么做
可是不行,提示的错误一样。
#############untmyremoteserver#########################
unit UntMyRemoteServer;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, ProServer_TLB, StdVcl, Provider, DB, ADODB;type
TmyRemoteServer = class(TRemoteDataModule, ImyRemoteServer)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSetProvider1: TDataSetProvider;
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;implementation{$R *.DFM}class procedure TmyRemoteServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
initialization
TComponentFactory.Create(ComServer, TmyRemoteServer,
Class_myRemoteServer, ciMultiInstance, tmApartment);end.
###############unit objclass#################
{###################################################
类的声明
###################################################
}
unit UntObj;interface Type TPerson = class(Tobject)
private
{ Private declarations }
public
name : string[25];
sex : string[4];
{ Public declarations }
end; type TUser = class(TPerson)
private
{ Private declarations }
public
user_id : string[20];
bumen : string[20];
//根据user_id从数据库取得用户信息
procedure createUserFromId(user_id : string);
procedure insertToDB(str: string);
//将user信息插入表中,str格式:'user_id',user_id_value,'name',name_value
{ Public declarations }
end;implementationuses UntMyRemoteServer;
procedure Tuser.createUserFromId(user_id: string);
var
str : string;
begin
str:='select * from user_db where user_id='''+user_id+'''';
//datamodule1.
//remoteServer:=Tremoteserver.Create();
myRemoteServer.ADOQuery1.Close;
datamodule1.ADOQuery1.SQL.Clear;
datamodule1.ADOQuery1.SQL.Add(str);
datamodule1.ADOQuery1.Open;
self.user_id:=datamodule1.ADOQuery1.FieldValues['user_id'];
self.bumen:=datamodule1.ADOQuery1.FieldValues['bumen'];
self.name:=datamodule1.ADOQuery1.FieldValues['name'];
self.sex:=datamodule1.ADOQuery1.FieldValues['sex'];
end;
procedure Tuser.insertToDB(str : string);
var
str : string;
begin
str:='insert into user_db (';
str:=str+' where user_id='''+user_id+'''';
//datamodule1.
//remoteServer:=Tremoteserver.Create();
datamodule1.ADOQuery1.Close;
datamodule1.ADOQuery1.SQL.Clear;
datamodule1.ADOQuery1.SQL.Add(str);
datamodule1.ADOQuery1.Open;
self.user_id:=datamodule1.ADOQuery1.FieldValues['user_id'];
self.bumen:=datamodule1.ADOQuery1.FieldValues['bumen'];
self.name:=datamodule1.ADOQuery1.FieldValues['name'];
self.sex:=datamodule1.ADOQuery1.FieldValues['sex'];
end;end.
你先新建一个带有remotedatamodule的项目,仔细看看:
1.在form的单元中:
var
form1:Tform1;
2.在remotedatamodule中没有var定义 道理很简单,服务器程序会初始化一个Tform1类的实例form1,
但任何remotedatamodule的实例,
都是由客户程序动态激活,而产生的.
你在写服务器程序时,只有form1的实例可用,你如何去控制还
没有建立的remotedatamodule呢?
相反,你在remotedatamodule中可以引用form1. 也就是说,form1作为服务器主窗体,与他共存的是程序运行后,
由客户程序激活的一些数据模块,但form1自己却不能直接直到有几个module~~~
我已经注意到了,可是问题是,我的tuser.createUserFromId方法需要调用里面的adoconnection啊,难道可以不调用???
如果我想实现在别的类中调用remotedatamodule中的组件,我该怎么做呢???谢谢。