工程文件如下:
  Application.Initialize;
  Application.CreateForm(TFmain, Fmain);
  Application.CreateForm(TDB_Module, DB_Module);
  Application.ShowMainForm:=false;
  Frmlogon:=TFrmlogon.Create(Frmlogon);
  Frmlogon.Show();
  Application.Run;Fmain为主窗口,DB_Module为数据窗口,frmlogon为登录窗口为什么在登录窗口frmlogon中的数据控件无法使用DB_Module中的数据库连接控件,也不可以设置主窗口Fmain中各功能菜单的属性,即设定权限;要如何设计?

解决方案 »

  1.   

    登录窗口Frmlogon
    procedure TFrmlogon.btlogonClick(Sender: TObject);
    var
       action:array[1..100] of TAction;
       i:integer;
    begin
    with DBuserlogon do
      begin
        close;
        sql.Clear;
        if trim(yhm.Text)<>'' then
        begin
          sql.Add('select * from T_users where userid='+''''+trim(yhm.Text)+'''');
          open;
        end
        else
        if trim(zwm.Text)<>'' then
        begin
          sql.Add('select * from T_users where username='+''''+trim(zwm.Text)+'''');
          open;
        end
        else
          begin
            bsSkinMessage1.MessageDlg('请输入登录帐户或用户名!',mtwarning, [mbYes], 0);
            exit;
          end;
      end;
    if ErrTime>=2 then
      begin
        Application.Terminate;
      end;
    if password.Text <> Explain(DBuserlogon.fieldbyname('password').AsString) then
      begin
        inc(ErrTime);
        bsSkinMessage1.MessageDlg('密码错误,请重新输入!',mtWarning,[mbyes],0);
        password.Text:='';
        Exit;
      end;  application.ShowMainForm:=true;
      Fmain.Show();end;没问题可是在  application.ShowMainForm:=true;
      Fmain.Show();前后对Fmain增加actionlist的设置就出现错误
      

  2.   

    我是把Application.CreateForm(TDB_Module, DB_Module);放到Application.CreateForm(TFmain, Fmain); 前面的。
    Login窗体在MainForm.Create的时候显示。
      

  3.   

    你把datamodule放第一个create,然后
      Frmlogon:=TFrmlogon.Create(Frmlogon); 
      Frmlogon.Showmodle;
    最后再
    Application.CreateForm(TFmain, Fmain);
    去掉 application.ShowMainForm看看
      

  4.   

      Application.Initialize;
      Application.CreateForm(TDB_Module, DB_Module);
      Application.CreateForm(TFmain, Fmain);
      Frmlogon:=TFrmlogon.Create(Frmlogon);
      Frmlogon.ShowModal;
      Application.Run;这样以后,登录窗口显示之前已经提示出错
      

  5.   

    {$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TDB_Module, DB_Module);
      Application.CreateForm(TFmain, Fmain);  Application.ShowMainForm:=false;
      Frmlogon:=TFrmlogon.Create(Frmlogon);
      Frmlogon.Show;
      Application.Run;
    end.
    运行后提示 Access violation at address 007BF02A  错误提示换过来下面的代码就一切正常
    begin
      Application.Initialize;
      Application.CreateForm(TFmain, Fmain);
      Application.CreateForm(TDB_Module, DB_Module);
      Application.ShowMainForm:=false;
      Frmlogon:=TFrmlogon.Create(Frmlogon);
      Frmlogon.Show;
      Application.Run;
    end.郁闷哦
      

  6.   

    但如果在登录窗体Frmlogon中引用数据模块DB_Module中的adoquery同样提示Access violation 错误
      

  7.   

    把 Frmlogon:=TFrmlogon.Create(Frmlogon); 
      Frmlogon.Show; 
    这个写到你的主窗体的OnShow事件看看
      

  8.   

    begin
      Application.Initialize;
      //frmlogin:=tfrmlogin.Create(nil);
      Application.Title := '信息平台';
      Application.CreateForm(Tcdm, cdm);
      Application.CreateForm(TFrmMain, FrmMain);
      Application.CreateForm(Tfrmlogin, frmlogin);
      if frmlogin.ShowModal=mrOk then
      begin   Application.CreateForm(TFrmAbout, FrmAbout);
       Application.CreateForm(TFrmHis, FrmHis);
       Application.CreateForm(TFrmDdgl, FrmDdgl);  Application.Run;
       FrmDdgl.Show;
       FrmDdgl.BringToFront;
       FrmDdgl.ActiveMDIChild; end
     else
      application.Terminate;
    end.
      

  9.   

    路过...不知道你的LOGIN里有没有生成 数据库操作对象呢 
      

  10.   

    要将登录窗口读取数据的代码写在窗体的onshow事件中,在窗体创建前读取数据才行
      

  11.   

    将登录窗口做成对话框。。
    然后在main窗口中调用:
    我的代码是这样的:function getuserid(var zname,dname:string;var ldate:tdate;var usercode,username:string):boolean;
    begin
      with TLoginform.Create(Application) do
      begin
        Result :=ShowModal = mrOK;
        if result then
        begin
          usercode:=u;
          zname:=z;
          dname:=d;
          username:=un;
          ldate:=cbdate.Date;
        end;
      end;
    end;
    上面的是登录窗口中用于被访问的函数。  if getuserid(zname,dname,ldate,usercode,username) then
      begin
        StatusBar1.Panels.Items[0].Text:='帐套:'+zname;
      end;  下面是在main窗口的show事件中写的。
    这样的话,在登录窗口打开的时候,实际上main窗口已经显示 ,只是看不到。。
      

  12.   

    我一般是这样写得:
    project2 :program Project2;uses
      Forms,
      ZConnection,
      DB,
      ZAbstractRODataset,
      ZAbstractDataset,
      ZDataset,
      Controls,
      SysUtils,
      DCPcrypt2,
      DCPblockciphers,
      DCPdes,
      iniFiles,
      DCPsha1,
      login in 'login.pas' {loginForm},
      main in 'main.pas' {mainForm},
      systemSet in 'systemSet.pas' {systemSetForm},
      usersManage in 'usersManage.pas' {UserManageForm},
      addUser in 'addUser.pas' {AddUserForm},
      modifyUser in 'modifyUser.pas' {ModifyUserForm},
      productionsManage in 'productionsManage.pas' {productionsManageForm},
      addproduction in 'addproduction.pas' {addProductionForm},
      modifyproduction in 'modifyproduction.pas' {modifyProductionForm},
      newCustomer in 'newCustomer.pas' {newCustomerForm},
      addMoney in 'addMoney.pas' {AddMoneyForm},
      modifycustomer in 'modifycustomer.pas' {ModifyCustomerForm},
      changCard in 'changCard.pas' {changCardForm},
      balanceQuery in 'balanceQuery.pas' {balanceQueryForm},
      tradeListQuery in 'tradeListQuery.pas' {tradeListQueryForm},
      customerPasswordChang in 'customerPasswordChang.pas' {customerPasswordChangForm},
      deleteCustomer in 'deleteCustomer.pas' {deleteCustomerForm};{$R *.res}
    begin  Application.Initialize;
      loginForm := TloginForm.Create(application);
      SystemDataBaseConnect := Tzconnection.Create(application);
      SystemDataBaseQuery := Tzquery.Create(application);  myIniFile := TiniFile.Create(extractfilepath(application.ExeName) + 'config.ini');
      databaseAddress := myIniFile.ReadString('SystemSet', 'DatabaseAddress', 'tqscsxRabnsB');
      databaseName := myIniFile.ReadString('SystemSet', 'DatabaseName', 'UzhbseyL');
      databaseUser := myIniFile.ReadString('SystemSet', 'DatabaseUser', 'KENjbQ==');
      databasePassword := myIniFile.ReadString('SystemSet', 'DatabasePassword', 'l5JrBKDaZ3+i');
      databaseProtocol := myIniFile.ReadString('SystemSet', 'DatabaseProtocol', '9bigWGEnVxo=');  Encrypt := TDCP_3des.Create(application);
      Encrypt.InitStr('SystemSet DatabaseAddress', TDCP_sha1);
      databaseAddress := Encrypt.DecryptString(databaseAddress);
      databaseName := Encrypt.DecryptString(databaseName);
      databaseUser := Encrypt.DecryptString(databaseUser);
      databasePassword := Encrypt.DecryptString(databasePassword);
      databaseProtocol := Encrypt.DecryptString(databaseProtocol);
      Encrypt.Burn;
      Encrypt.Free;
      myiniFile.Free;
      with SystemDataBaseConnect do
      begin
        HostName := databaseAddress;
        Database := databaseName;
        User := databaseUser;
        Password := databasePassword;
        Protocol := databaseProtocol;
      end;
      SystemDataBaseQuery.Connection := SystemDataBaseConnect;
      if loginform.ShowModal = mrok then
      begin
        loginform.Free;
        Application.Title := 'XXXXXX系统';
        Application.CreateForm(TmainForm, mainForm);
        Application.Run;
      end;
    end.login.pas
    unit login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls, jpeg, ZSqlMonitor, ZConnection, DB,
      ZAbstractRODataset, ZAbstractDataset, ZDataset, iniFiles, DCPcrypt2,
      DCPblockciphers, DCPdes, DCPsha1;type
      TloginForm = class(TForm)
        Image1: TImage;
        UserNameEdit: TLabeledEdit;
        UserPassWordEdit: TLabeledEdit;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      loginForm: TloginForm;
      SystemDataBaseConnect: TZconnection;
      SystemDataBaseQuery: TZquery;  myinifile: TiniFile;
      Encrypt: TDCP_3des;
      databaseAddress, databaseName, databaseUser, databasePassword, databaseProtocol: string;
      DatabaseBackUpSet: integer;
      DatabaseBackUpSetTime: TTime;
      userName, userPassword, userTrueName: string;
      userCapacity: integer;implementation{$R *.dfm}procedure TloginForm.BitBtn1Click(Sender: TObject);
    begin
      userName := trim(UserNameEdit.Text);
      userPassword := trim(UserPassWordEdit.Text);
      if ((userName <> '') and (userPassword <> '')) then
      begin    SystemDataBaseQuery.Close;
        SystemDataBaseQuery.SQL.Clear;
        SystemDataBaseQuery.SQL.Add('SET NAMES GBK');
        SystemDataBaseQuery.ExecSQL;    SystemDataBaseQuery.SQL.Clear;
        SystemDataBaseQuery.SQL.Add('select md5(''' + userPassword + ''')from users ');
        SystemDataBaseQuery.Open;
        userPassword := SystemDataBaseQuery.Fields[0].AsString;
        SystemDataBaseQuery.SQL.Clear;
        SystemDataBaseQuery.SQL.Add('select userPassword,userCapacity,userTrueName from users where userName= ''' + userName + ''' and userStatus =1');
        SystemDataBaseQuery.Open;    if SystemDataBaseQuery.Fields[0].AsString = userPassword then
        begin
          userCapacity := SystemDataBaseQuery.Fields[1].AsInteger;
          userTrueName := SystemDataBaseQuery.Fields[2].Asstring;
          modalResult := mrok;
        end
        else
          MessageDlg('用户名密码错误!!', mtError, [mbok], 0);    SystemDataBaseQuery.Close;
      end  else
        MessageDlg('请输入用户名和密码', mtError, [mbok], 0);end;procedure TloginForm.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
      if modalresult <> mrok then
      begin
        if MessageDlg('确定退出本系统?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
          canclose := true
        else
          canclose := false;
      end;
    end;end.
      

  13.   

       如果你的问题没有解决的话,你可以在你的登陆窗口添加连接数据组件(与DB_Module独立)
    不一定非要把数据库连接组件放在数据模块中.
      

  14.   

      loginForm := TLoginForm.Create(Application);
      try
        loginForm.ShowModal;
      finally
        loginForm.Free;
      end;  if not loginForm.bIfLoginSuccess then
      begin
        Application.Terminate;
      end;  //调用主窗口
      Application.CreateForm(TFormMain, FormMain);
      Application.Run;