用户登录及记录用户信息
type
  TUserInfo = class
  private
    FUserID : Integer;
    ……
    ……
  public
    constructor Create;
    procedure setUserID(UID : Integer);
    ……
    ……
    function UserLogin(InputNumber,InputPW : String;QuerySet : TADOQuery): Boolean;   //登录函数    property UserID : Integer read FUserID;
  end;当用户要登录时,用登录函数来查找,如果正确,就把比如ID等信息放入FUserID等变量中,但是不管怎么样,只要想Private中的私有变量(如FUserID)赋植,就会出错,请问是为什么?谢谢

解决方案 »

  1.   

    user:TUserInfo;
    用user.SetUserId(UID);这样使用不会出问题的。
    可能你在其他地方对UserId赋值了,这里声明的是私有的变量,并且是只读的变量。
        property UserID : Integer read FUserID write FUserID;
      

  2.   


    property UserID : Integer read FUserID write FUserID;
      

  3.   

    如果后面加上write FUserID,那属性UserID还是只读吗?我想让属性UserID是只读属性
      

  4.   

    property UserID : Integer read FUserID;
      

  5.   

    没有Write当然也就是只读属性了。//只要想Private中的私有变量(如FUserID)赋植,就会出错是不是没有创建TUserInfo实例啊
      

  6.   

    我是在TUserInfo自己的登录函数里对FUserID赋值的,就是说,如果登录成功,就把各种信息记到TUserInfo的私有变量里(比如FUserID),这个时候应该不需要实例吧?难道在TUserInfo内部的函数里声明一个UserInfo : TUserInfo?
      

  7.   

    全部代码在这:type
      TUserInfo = class
      private
        FUserID :      Integer;
        FUserNumber :  String;
        FUserName :    String;
        FUserPurv :    String;
        FUserMemo :    String;
        FUserLogined : Boolean;
      public
        constructor Create;
        function UserLogin(InputNumber,InputPW : String;QuerySet : TADOQuery): Boolean;   //登录
        function ChangeUserPW(UPW : String):Boolean;    property UserID : Integer read FUserID;
        property UserNumber : String read FUserNumber;
        property UserName : String read FUserName;
        property UserPurv : String read FUserPurv;
        property UserMemo : String read FUserMemo;
        property UserLogined : Boolean read FUserLogined;
      end;constructor TUserInfo.Create;
    begin
      FUserID := -1;
      FUserNumber := '';
      FUserName := '';
      FUserPurv := '';
      FUserMemo := '';
      FUserLogined := False;
    end;function TUserInfo.UserLogin(InputNumber, InputPW: String;QuerySet : TADOQuery): Boolean;
    begin
      Result := False;
      QuerySet.Close;
      QuerySet.SQL.Clear;
      QuerySet.SQL.Add('SELECT * FROM tUser WHERE UserNumber=' + '''' + InputNumber + '''' + ' AND UserPW=' + '''' + InputPW + '''');
      QuerySet.Open;
      if QuerySet.Recordset.RecordCount < 1 then
        Result := False
      else
      begin
        FUserID      := QuerySet.FieldByName('UserNumber').AsInteger;   //这里出错
        FUserNumber  := QuerySet.FieldByName('UserNumber').AsString;
        FUserName    := QuerySet.FieldByName('UserName').AsString;
        FUserPurv    := QuerySet.FieldByName('UserPurv').AsString;
        FUserMemo    := QuerySet.FieldByName('UserMemo').AsString;
        FUserLogined := True;
        Result := True;
      end;
    end;ADOQuery应该没有问题,各种设置都是好了的
      

  8.   

    [Error] dbData.pas(19): Cannot override a static method
      

  9.   

    创建了,然后调用登录函数来登录,但是在向FUserID等Private私有变量里赋值时出错。
      

  10.   

    哦 弄錯了你是直接 繼承自 TObject得 TObject的 構造函數不是vitrual/dynamic的 不能被改寫....
    不好意思...
    constructor TUserInfo.Create;
    begin
      inherited;
     
      FUserID := -1;
      FUserNumber := '';
      FUserName := '';
      FUserPurv := '';
      FUserMemo := '';
      FUserLogined := False;
    end;
      

  11.   

    不行,这样的话直接就说[Error] dbData.pas(56): Undeclared identifier: 'FUserID'
      

  12.   

    和搂住类似的代码,测试过了没有问题.D7...
    而且我确信这和delphi的版本应该没什么关系..
    不知道编译出现的错误提示是什么?
    自己觉得数据库错的可能性比较大.
      

  13.   

    FUserID      := QuerySet.FieldByName('UserNumber').AsInteger;  数据库中UserNumber是整型?
      

  14.   

    FUserID      :=strtoint(QuerySet.FieldByName('UserNumber').Asstring); 
    试一下
      

  15.   

    错误信息好象是一个内存错误:Access violation at address 00476b00 in module 'DocManage.exe'.Write of address 00000004
      

  16.   

    另外再顺便问一句,怎么用一个循环把ActionList里的Action设置成可用或不可用?for i := 0 to ActionList1.ActionCount - 1 do
      (********).Enable := False;括号里面该怎么写啊?
      

  17.   

    这类错误应该是你的类没有申请实例,没有Create就赋值,造成的内存错误。
      

  18.   

    哎呀呀!!!!!真是的!!!我忘记UserInfo := TUserInfo.Create了!!!!
    多谢各位大哥了!!惭愧~~~不过还是希望大家还是帮到底,那个Actionlist1.Actions[i].Enable不对,说没有Enable,我以前看过一篇文章介绍这个的,好象也不是这样写的,我记不清了~~
      

  19.   

    TCustomAction(ActionList1.Actions[1]).Enabled:=false;