P
pizixiao
Unregistered / Unconfirmed
GUEST, unregistred user!
第一个form是用户登陆form,用户登陆成功后,将用户的信息作为全局参数在其它若干个form中使用,因为用户名不同,其所操作的功能也不一样,所以在其它若干个form中都需要判断当前是什么类型的用户,程序是这样的:
TformUserlogin = class(TForm)
public
{ Public declarations }
intYhlx:integer;//用户类型作为全局变量
strDwmc:string;//单位名称也是用户信息,用户不同,单位名称也不同,需要传递的参数
end;
procedure TformUserlogin.btnOkClick(Sender: TObject);
var
strUsername,strPassword,strServername,strSql:string;
begin
strUsername:=trim(teUsername.Text);
strPassword:=trim(tePassword.Text);
strServername:=trim(cbServername.Text); //获取参数
with queryLogin do//ADOQuery
begin
close;
ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID'
+'=sa;Password=sa;Initial Catalog=scxxgl;Data Source='''+strServername+'''';
strSql:='select yhm,mm,[red]yhlx,dwmc [/red]from Tyhgl where yhm='''+strUsername+''' and mm=''' +strPassword+'''';
sql.Clear;
sql.Add(strSql);
open;
if (FieldByName('yhlx').AsString='') then begin
Application.MessageBox('用户不存在或输入有误,请重新输入!','用户登录',0);
exit;
end
else begin//用户登陆成功!
strDwmc:=trim(fieldbyname('dwmc').AsString);
intYhlx:=fieldbyname('yhlx').AsInteger;
case intYhlx of
1:
begin
with formScxxglxt do
begin
//miUserlogin.Enabled:=true;
miUsermodify.Enabled:=true;//用户修改
//miQuit.Enabled:=true;
miProduce.Enabled:=true;//生产数据
miLowtemp.Enabled:=true;//低温情况
miUserrepair.Enabled:=true;//用户报修
miUserpour.Enabled:=true;//用户投诉
miDatamanage.Enabled:=true;//生产数据管理
end;
end;
end;
end;
end;
close;
end;
//这是菜单form,这里面是动态创建form,用到传过来的用户信息。
TformScxxglxt = class(TForm)
procedure miProdcollectClick(Sender: TObject);
end;
uses unitUserlogin,unitProdcollect1;
procedure TformScxxglxt.miProdcollectClick(Sender: TObject);
var
yhlx:integer;
dwmc:string;
begin
showmessage(formUserlogin.strDwmc);//这里出错,显示的是空,不是传递过来的值
showmessage(inttostr(formUserlogin.intyhlx));//这个正确,但是当以同样的用户名重复登陆后,值就变了,比如说由1变成了0
yhlx:=formUserlogin.intYhlx;
dwmc:=formUserlogin.strDwmc;//值为空
case yhlx of
1:
begin
Application.CreateForm(TformProdcollect,formProdcollect);
formProdcollect.ShowModal;
formProdcollect.Free;
end;
6:
begin
Application.CreateForm(TformProdcollect1,formProdcollect1);
formProdcollect.ShowModal;
formProdcollect.Free;
end;
end;
end;
TformProdcollect = class(TForm)
procedure FormCreate(Sender: TObject);
end;
uses unitUserlogin;
procedure TformProdcollect.FormCreate(Sender: TObject);
var
dwmc,strSql:string;
begin
showmessage(inttostr(formUserlogin.intyhlx));//值为0,当重复登陆后,反而不执行这条语句了。
dwmc:=formUserlogin.strDwmc;//值为空
with DM.adoQuery do
begin
close;
sql.Clear;
strSql:='select typevalue from Tdropdown where typename='''+dwmc
+''' and typeheat=1';
sql.Add(strSql);
open;
//提取出该分公司所有的燃油锅炉房名称
cbGlfmc.Properties.Items.Clear;
while not eof do
begin
cbGlfmc.Properties.Items.Add(trim(trim(fieldbyname('typename').AsString)));
next;
end;
cbGlfmc.ItemIndex:=0;
end;
end;
这是什么原因呢?还有,为了让用户的信息在很多个form中使用,用户重复登陆后,用户的信息保持正确,最好用什么方法呢?
TformUserlogin = class(TForm)
public
{ Public declarations }
intYhlx:integer;//用户类型作为全局变量
strDwmc:string;//单位名称也是用户信息,用户不同,单位名称也不同,需要传递的参数
end;
procedure TformUserlogin.btnOkClick(Sender: TObject);
var
strUsername,strPassword,strServername,strSql:string;
begin
strUsername:=trim(teUsername.Text);
strPassword:=trim(tePassword.Text);
strServername:=trim(cbServername.Text); //获取参数
with queryLogin do//ADOQuery
begin
close;
ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID'
+'=sa;Password=sa;Initial Catalog=scxxgl;Data Source='''+strServername+'''';
strSql:='select yhm,mm,[red]yhlx,dwmc [/red]from Tyhgl where yhm='''+strUsername+''' and mm=''' +strPassword+'''';
sql.Clear;
sql.Add(strSql);
open;
if (FieldByName('yhlx').AsString='') then begin
Application.MessageBox('用户不存在或输入有误,请重新输入!','用户登录',0);
exit;
end
else begin//用户登陆成功!
strDwmc:=trim(fieldbyname('dwmc').AsString);
intYhlx:=fieldbyname('yhlx').AsInteger;
case intYhlx of
1:
begin
with formScxxglxt do
begin
//miUserlogin.Enabled:=true;
miUsermodify.Enabled:=true;//用户修改
//miQuit.Enabled:=true;
miProduce.Enabled:=true;//生产数据
miLowtemp.Enabled:=true;//低温情况
miUserrepair.Enabled:=true;//用户报修
miUserpour.Enabled:=true;//用户投诉
miDatamanage.Enabled:=true;//生产数据管理
end;
end;
end;
end;
end;
close;
end;
//这是菜单form,这里面是动态创建form,用到传过来的用户信息。
TformScxxglxt = class(TForm)
procedure miProdcollectClick(Sender: TObject);
end;
uses unitUserlogin,unitProdcollect1;
procedure TformScxxglxt.miProdcollectClick(Sender: TObject);
var
yhlx:integer;
dwmc:string;
begin
showmessage(formUserlogin.strDwmc);//这里出错,显示的是空,不是传递过来的值
showmessage(inttostr(formUserlogin.intyhlx));//这个正确,但是当以同样的用户名重复登陆后,值就变了,比如说由1变成了0
yhlx:=formUserlogin.intYhlx;
dwmc:=formUserlogin.strDwmc;//值为空
case yhlx of
1:
begin
Application.CreateForm(TformProdcollect,formProdcollect);
formProdcollect.ShowModal;
formProdcollect.Free;
end;
6:
begin
Application.CreateForm(TformProdcollect1,formProdcollect1);
formProdcollect.ShowModal;
formProdcollect.Free;
end;
end;
end;
TformProdcollect = class(TForm)
procedure FormCreate(Sender: TObject);
end;
uses unitUserlogin;
procedure TformProdcollect.FormCreate(Sender: TObject);
var
dwmc,strSql:string;
begin
showmessage(inttostr(formUserlogin.intyhlx));//值为0,当重复登陆后,反而不执行这条语句了。
dwmc:=formUserlogin.strDwmc;//值为空
with DM.adoQuery do
begin
close;
sql.Clear;
strSql:='select typevalue from Tdropdown where typename='''+dwmc
+''' and typeheat=1';
sql.Add(strSql);
open;
//提取出该分公司所有的燃油锅炉房名称
cbGlfmc.Properties.Items.Clear;
while not eof do
begin
cbGlfmc.Properties.Items.Add(trim(trim(fieldbyname('typename').AsString)));
next;
end;
cbGlfmc.ItemIndex:=0;
end;
end;
这是什么原因呢?还有,为了让用户的信息在很多个form中使用,用户重复登陆后,用户的信息保持正确,最好用什么方法呢?