起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 286|回复: 15

【结】SQL语句获取登陆时间**

[复制链接]
发表于 2008-5-21 10:25:26 | 显示全部楼层 |阅读模式
[B]我在标准风格主窗体上获取了登陆时间等:看代码:[/B]
  lLogID :=TSystemCore.Operator.Positions[0].Operator.LoginID;
  lOprID :=TSystemCore.Operator.Positions[0].PersonMember.ID;
  lOprName :=TSystemCore.Operator.Positions[0].PersonMember.DisplayName;
  lOprDept :=TSystemCore.Operator.Positions[0].PositionMember.Parent.DisplayName;
  lOprPos :=TSystemCore.Operator.Positions[0].PositionMember.DisplayName;
  dsMySet :=TSQLDataSet.Create(Self);
  dsMaxSet :=TSQLDataSet.Create(Self);
  try
    dsMaxSet.Database.URL :='Biz:OABGZDHXTBGZDHSJK.DATABASE';
    dsMaxSet.Close;
    dsMaxSet.SQL.Text :='Select Max(DLRZB_ID) as DLRZB_ID from DLRZB';
    dsMaxSet.Open;
    MaxID :=dsMaxSet.FieldByName['DLRZB_ID'].AsString;
    if MaxID='' then
    begin
      MaxID :='1000';
    end else
    begin
      MaxID :=SysUtils.IntToStr(SysUtils.StrToInt(MaxID)+1);
    end;

    lID :=MaxID;
    dsMySet.Database.URL :='Biz:OABGZDHXTBGZDHSJK.DATABASE';
    dsMySet.Close;
    dsMySet.SQL.Text :='Select * From DLRZB';
    dsMySet.Open;
    dsMySet.Insert;
    dsMySet.FieldValues['DLRZB_XZ'] :=0;      //选择
    dsMySet.FieldValues['DLRZB_ID'] :=lID;      //ID
    dsMySet.FieldValues['DLRZB_XM'] :=lOprName;  //姓名
    dsMySet.FieldValues['DLRZB_BM'] :=lOprDept;        //部门
    dsMySet.FieldValues['DLRZB_GW'] :=lOprPos;              //岗位
    dsMySet.FieldValues['DLRZB_DLZH'] :=lLogID;              //
    dsMySet.FieldValues['DLRZB_IPDZ'] :=JSSysUtils.GetLocalIPStr;  //IP地址
    dsMySet.FieldValues['DLRZB_DLSJ'] :=Business.Data.SysSrv.SysService.Time;  //登陆时间
    dsMySet.ApplyUpdates;


[B]在系统初始化功能获取退出时间:[/B]
static procedure TINIT.Uninit;
var
  F: TForm;
   lQuery : TQuery;
  // lOprName,lOprDept,lLogID,lOprID,MaxID,lID:string;
  // dsMySet:TSQLDataSet;
begin
    if FInitInstance <> nil then
  begin
    TSystemCore.FuncManager.TerminateAllFuncs(True);

    F := FInitInstance.MainForm;
    FInitInstance.MainForm := nil;
    if F <> nil then
      F.Free;
    end;

    Forms.Application.ProcessMessages;
    lQuery := TQuery.Create(nil);
    lQuery.ConnectionString := 'DATABASEURL=Biz:OPERATIONOPERATIONDB.DATABASE';
    lQuery.CommandText :='Select * From DLRZB';
    lQuery.Open;
    lQuery.Edit;
    // lQuery.Append;
    //lQuery.FieldByName('DLRZB_ID').AsString :='222';
    lQuery.FieldByName('DLRZB_TCSJ').AsString :=Sysutils.DateTimeToStr(Sysutils.Now) ;
    lQuery.Close;
   // lQuery.Post;
    lQuery.ApplyUpdates;
    lQuery.Free;
    BizRtSrvr.BusinessRuntimeServer.UnregisterMethod(CreateFunc);
    CreateFunc.Free;
//  CommonComponentLibrary.TCommonComponentLibrary.Uninit; {兼容性保留}

  TComponentsLib.Uninit;

  TSystemCore.Uninit;

end;

这样的话就只能给1条记录有退出时间。其他记录都没退出时间。。我认为是以下的代码有问题:
    lQuery.ConnectionString := 'DATABASEURL=Biz:OPERATIONOPERATIONDB.DATABASE';
    lQuery.CommandText :='Select * From DLRZB';  
应该该为:lQuery.CommandText :=?????;这里该写什么?

未命名.jpg

32.61 KB, 下载次数: 164

回复

使用道具 举报

发表于 2008-5-21 10:43:21 | 显示全部楼层
退出时   lQuery.CommandText :='Select * From DLRZB';  这里的sql应该加一个条件,选出登录时插入的那条记录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 10:46:15 | 显示全部楼层
呵呵。。我的思路也是这样啊。但是不懂写。都没写对。。哎~~~sql应该加一个条件要怎么写。看完我上面的代码你能帮我写下么~~~
回复 支持 反对

使用道具 举报

发表于 2008-5-21 11:04:27 | 显示全部楼层

[color=red][/color]0

query写到
Forms.Application.ProcessMessages;
end;之后
不要写在里面,你设个断点,退出有没有断点那里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 11:24:50 | 显示全部楼层
看一楼上的代码是写在END后面了啊。。
      F.Free;
    end;
    Forms.Application.ProcessMessages;


    lQuery := TQuery.Create(nil);
    lQuery.ConnectionString := 'DATABASEURL=Biz:\OPERATION\OPERATIONDB.DATABASE';
    lQuery.CommandText :='Select * From DLRZB';
    lQuery.Open;
    lQuery.Edit;
    // lQuery.Append;
    //lQuery.FieldByName('DLRZB_ID').AsString :='222';
    lQuery.FieldByName('DLRZB_TCSJ').AsString :=Sysutils.DateTimeToStr(Sysutils.Now) ;
    lQuery.Close;
   // lQuery.Post;
    lQuery.ApplyUpdates;
    lQuery.Free;
    BizRtSrvr.BusinessRuntimeServer.UnregisterMethod(CreateFunc);
    CreateFunc.Free;
//  CommonComponentLibrary.TCommonComponentLibrary.Uninit; {兼容性保留}

  TComponentsLib.Uninit;

  TSystemCore.Uninit;

它可以读出退出时间了。但是是不关联的。。现在的问题是:退出时   lQuery.CommandText :='Select * From DLRZB';  这里的sql应该加一个条件,选出登录时插入的那条记录。

这里的条件要怎么写。。。。哎。。。不好意思了。。。都没写对。
回复 支持 反对

使用道具 举报

发表于 2008-5-21 11:28:18 | 显示全部楼层
按你的思路,应该在登录往DLRZB表中插入记录时把这条记录的唯一标识比如主键的值记录下来,可以用一个参数来记录,退出时再用这个值来做条件筛选记录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 11:29:23 | 显示全部楼层
这里的end在Forms.Application.ProcessMessages;之后了。

  (  F.Free;

    Forms.Application.ProcessMessages;
     end;    )
设置断点到lQuery.Free;
代码都执行了。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 11:32:23 | 显示全部楼层
回6楼的:我在标准风格主窗体上定义了个参数TTT。获取的是登陆的ID。。。在系统初始化功能那里怎么做条件。。我都没写对。就是说lQuery.CommandText :=?????;这里该写什么?
回复 支持 反对

使用道具 举报

发表于 2008-5-21 11:40:01 | 显示全部楼层
用登录者ID不行吧,同一ID是可以多次登录的啊,那样你的表里同一ID就有多条记录了,这样无法用ID定位到本次登录的记录,应该用主键定位。登录时用个参数记录当前插入的记录的主键值
sql就应该是 Select * From DLRZB where 主键 = 取主键参数的值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 12:03:54 | 显示全部楼层
上面说错了。。对不起。我用的是(自动编号的ID)这个应该得的吧。
我用的是自动编号的ID。。。不是登陆者ID。。。我要从标准风格主窗体传 这个(自动编号的ID)到系统初始化窗体下。因为登陆时候我获取(自动编号的ID)这个。现在是我获取不到。

  protected
    procedure DoRun; override;
    procedure DoTerminate; override;
  public
    static ID11:string;
    constructor Create(AContext: TContext);
    destructor Destroy; override;

    { 系统初始化功能的实例 }
    static function InitInstance: TInit;
    { 提供给主界面注销用的方法 }
    static procedure LogoffByUser;
在这里定义的DI11编译不通过。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 19:23 , Processed in 0.047710 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表