IntraWeb程序多用户访问可以分成两种,一种是用数据模块DM的,一种是没有用DM的,
一、先说用DM的情况,当你创建IW程序时选择了DM时,把你需要用到数据访问控件如ADOConnection,ADODATAset,ADOQuery放到DM的FORM上,从工程选择里移除DM的自动创建,
然后打开单元UseSessionUnit,引用uses dataModuleUnit;在public部分申明DM:TDataModule;
在IWUseSession上双击,在procedure TIWUserSession.IWUserSessionBaseCreate(Sender: TObject);事件里写入
procedure TIWUserSession.IWUserSessionBaseCreate(Sender: TObject);
begin
DM:=TDataModule.create(WebApplication);
end;
引用 如下:
uses ServerController;//注意不是UseSessionUnit;原因 下面解释
Procedure TIWForm1.IWButton1Click(Sender:TObject);
begin
UseSession.DM.AdoDataSet1.connection:=ADOConnection;
end;
二、不用DM的情况,这种情况最简单了(本人推荐使用),创建IW工程时不选择数据模块( 弹出选项界面时直接[确定]),那我们喜欢用DM的同志们怎样和原来一样使用DM一样的功能呢?别急,下面告诉你。
我们不用DM,但我们可以找一个DM的替代品,找谁呢,打开UseSessionUnit时它有一个form不就是一个容器吗,我们就用它,把IWUseSession作为DM来用,把你需要用到数据访问控件如ADOConnection,ADODATAset,ADOQuery放到IWUseSession的FORM上,就可以引用了,
引用如下,
uses ServerController;//注意不是UseSessionUnit;
Procedure TIWForm1.IWButton1Click(Sender:TObject);
begin
UseSession.AdoDataSet1.connection:=ADOConnection;//哈哈,比第一种方法省事吧。
end;
“uses ServerController;//注意不是UseSessionUnit;原因 下面解释”:
IW工程中并不像delphi标准工程一样自动为每个form申明一个窗体的全局变量(var Form1:TForm1),但IW在单元ServerController里申明了一个全局类型函数
function UserSession: TIWUserSession;(它的详细请看ServerController单元)
这个UserSession就是 TIWUserSession的全局变量,我们要引用TIWUserSession上的控件,则要这样UserSession.控件.方法/属性。
注:这是本人凭记忆写的可能上面有此英文有错误(本人的E文差得要命).
另有的朋友经常问:我的IW工程有DM,把IWDBGRID放到IWForm1时设置好数据源等,但运行时就是没有显示数据?
答:原因是你的DM并没有创建(自动创建里是存在,但它在IWMain的后面,不行,错误),你可以按上面的方法解决,还可以把DM的创建提前,打开工程.dpr文件,把DM的创建移动到IWMain的前面。就可以解决,但不能进行多用户访问。