Delphi在C/S架构项目中考虑到SQLServer客户端断电的用户登录问题

本文介绍了一种在C/S架构下实现同一账号仅允许单次登录的方法。通过使用临时表来记录已登录的用户状态,并提供了两个核心函数:检查用户是否已登录及注册已登录用户的记录。
在C/S架构项目中,往往限制同一时间一个账号只能登录一次,考虑到客户端突然断电的情况。
登录前要验证临时表是否存在,登录后要创建临时表。
// 注册已经登录的账户
function TfrmLogin.RegUserLogined(AdoConn: TADOConnection;
  AUserID: string): Boolean;
var
  Qry: TADOQuery;
  SQLStr: string;
begin
  //
  try
    QryCreate(Qry,AdoConn);
    try
      SQLStr := Format('CREATE TABLE ##XXX%s(%s INT); ', [AUserID, AUserID]);
      Qry.SQL.Text := SQLStr;
      Qry.ExecSQL;
    finally
      Qry.Free;
    end;
  except
    Result := False;
    Exit;
  end;
  Result := True;
end;
// 判断账户是否已经登录
function TfrmLogin.ThisUserHadLogined(AdoConn: TADOConnection;
  AUserID: string): Boolean;
var
  Qry: TADOQuery;
  SQLStr: string;
begin
  //
  try
    QryCreate(Qry,AdoConn);
    try
      SQLStr := Format('SELECT OBJECT_ID(N''tempdb..##XXX%s'', N''U'') AS TabID', [AUserID]);
      Qry.SQL.Text := SQLStr;
      Qry.Open;
      result := not Qry.FieldByName('TabID').IsNull;
    finally
      Qry.Free;
    end;
  except
    Result := False;
    Exit;
  end;
end;

procedure TfrmLogin.QryCreate(var aQuery: TADOQuery; Connecion: TAdoConnection);
begin
  aQuery := TADOQuery.create(nil);
  aQuery.Connection := Connecion;
end;




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值