请看一下:
unit datamodule1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables;type
  Tdatamodule = class(TForm)
    database: TDatabase;
    q_login: TQuery;
  private
    { Private declarations }
  public
    { Public declarations }
    function login:boolean;
    procedure loginout;
  end;var
  datamodule: Tdatamodule;implementation
uses f_main,login;{$R *.dfm}
 function login:boolean;
  var server,user,passwd:string;   begin
    result:=false;
    if getloginparams(server,user,passwd) then
     begin
     with database do
       begin
      connected:=false;
      params.values['server name']:=server;
      params.values['user name']:='login';
      params.values['password']:='qingniao';
      connected:=true;
       end;
     with q_login do
      begin
       params.paramvalues['user']:=user;
       params.paramvalues['passwd']:=passwd;
       open;
       Result:=(RecordCount=1) and (FieldValues['COUNT']=1);
      end;
     if result then
      with database1 do
      begin
      connected:=false;
      params.values['user name']:='mater';
      params.values['password']:='qingniao';
      connected:=true;
      end;
    end;
  end;  procedure loginout;
   begin
    with database1 do
     begin
     connected:=false;
     params.values['user name']:='';
     params.values['password']:='';
     flogin.i_user.text:='';
     flogin.i_passwd.text:='';
     end;
    end;
该单元是一个数据模块。错误提示如下:
[Error] datamodule1.pas(35): Undeclared identifier: 'database'
[Error] datamodule1.pas(37): Undeclared identifier: 'connected'
[Error] datamodule1.pas(38): Undeclared identifier: 'params'
[Error] datamodule1.pas(43): Undeclared identifier: 'q_login'
[Error] datamodule1.pas(47): Undeclared identifier: 'open'

解决方案 »

  1.   

    implementationuses f_main,login;{$R *.dfm}
     function Tdatamodule.login:boolean;//加上Tdatamodule.
      

  2.   

    implementationuses f_main,login;{$R *.dfm}
     function Tdatamodule.login:boolean;//加上Tdatamodule.
    应该是这样的。
      

  3.   

    谢谢,不过我还是不明白,函数就在这个单元里。为什么要加TDATAMODULE。回答者都有分
      

  4.   

    再请看一下:
    var
      fmain: Tfmain;implementation
    uses  datamodule1;{$R *.dfm}procedure Tfmain.t_loginClick(Sender: TObject);
    begin
     if datamodule1.login then
      begin
       statusbar1.simpletext:='已经连接到服务器';
       m_maneger.enabled:=true;
       t_buy.enabled:=true;
       t_sale.enabled:=true;
       t_store.enabled:=true;
       t_maintain.enabled:=true;
       t_login.enabled:=false;
      end;  
        
    end;procedure Tfmain.t_loginoutClick(Sender: TObject);
    begin
     datamodule1.loginout;
      
    end;end.[Error] f_main.pas(50): Undeclared identifier: 'login'
    [Error] f_main.pas(65): Undeclared identifier: 'loginout'
      

  5.   

    上面两位就别误人子弟了,楼主最初出现的问题是在Login与LoginOut中引用DataBase时前面没有加上datamodule前缀,因为由于楼主是将Login,LoginOut声明为外部函数它们当然不认识Database等TDataModule类的子域。你们建议楼主将Login,LoginOut声明为TDataModule的成员函数就没有点中穴位。楼主第二次出现的错误是因为没有在Tdatamodule的类定义中加上Login与LoginOut的声明。
      

  6.   

    楼上说的很正确,我同意,使用外部函数时,要注意类子域问题,其实也就是namespace的问题,
    但是我觉得使用外部函数,容易增加软件的耦合度!~~~