bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Delphi 利用GUID來做資料庫應用程式的用戶端連線列表 ...
查看: 2859|回復: 0
go

利用GUID來做資料庫應用程式的用戶端連線列表 [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2010-7-23 16:18 |只看該作者 |倒序瀏覽 |打印
  1. AppSessionTimer: TTimer;

  2. procedure TMainForm.AppSessionInit;
  3. begin
  4.   try
  5.     qyTemp.Close;
  6.     qyTemp.SQL.Clear;
  7.     qyTemp.SQL.Add('select GUID=Convert(VarChar(36),newID())');
  8.     qyTemp.Open;
  9.     SessionGUID := qyTemp.FieldByName('GUID').AsString;
  10.     qyTemp.Close;

  11.     qyTemp.SQL.Clear;
  12.     qyTemp.SQL.Add('select * from SESSION where GUID=:GUID');
  13.     qyTemp.ParamByName('GUID').AsString := SessionGUID;
  14.     qyTemp.RequestLive := true;
  15.     qyTemp.Open;
  16.     if qyTemp.IsEmpty then
  17.     begin
  18.       qyTemp.Insert;
  19.       qyTemp.FieldByName('GUID').AsString := SessionGUID;
  20.       qyTemp.FieldByName('STARTTIME').AsDateTime := gsStartTime;
  21.       qyTemp.FieldByName('LASTTIME').AsDateTime := now;
  22.       qyTemp.FieldByName('HOSTNAME').AsString := GetPCName;
  23.       qyTemp.FieldByName('USERID').AsString   := '';
  24.       qyTemp.FieldByName('USERNAME').AsString := '';
  25.       qyTemp.Post;
  26.     end else begin
  27.       MyMsg('資料庫 SESSION_GUID 問題請重新連線');
  28.       Self.Close;
  29.     end;
  30.     qyTemp.Close;
  31.     qyTemp.RequestLive := False;
  32.   except
  33.   end;
  34. end;

  35. procedure TMainForm.AppSessionUpdateUser;
  36. begin
  37.   try
  38.     qyTemp.SQL.Clear;
  39.     qyTemp.SQL.Add('update SESSION set USERNAME = :USERNAME,USERID = :USERID where GUID=:GUID');
  40.     qyTemp.ParamByName('GUID').AsString := SessionGUID;
  41.     qyTemp.ParamByName('USERID').AsString   := gsUser_num;
  42.     qyTemp.ParamByName('USERNAME').AsString := gsUser_nam;
  43.     qyTemp.ExecSQL;
  44.   except

  45.   end;
  46. end;

  47. procedure TMainForm.AppSessionUpdateLastTime;
  48. begin
  49.   try
  50.     qyTemp.SQL.Clear;
  51.     qyTemp.SQL.Add('update SESSION set LASTTIME = :LASTTIME where GUID=:GUID');
  52.     qyTemp.ParamByName('GUID').AsString := SessionGUID;
  53.     qyTemp.ParamByName('LASTTIME').AsDateTime := Now;
  54.     qyTemp.ExecSQL;
  55.   except

  56.   end;
  57. end;

  58. procedure TMainForm.AppSessionClear;
  59. begin
  60.   try
  61.     qyTemp.SQL.Clear;
  62.     qyTemp.SQL.Add('delete from SESSION');
  63.     qyTemp.SQL.Add('where LASTTIME is null ');
  64.     qyTemp.SQL.Add('   or (datediff(minute,LASTTIME,getDate())>5)');
  65.     qyTemp.SQL.Add('   or (GUID=:GUID)');
  66.     qyTemp.ParamByName('GUID').AsString := SessionGUID;
  67.     qyTemp.ExecSQL;
  68.   except

  69.   end;
  70. end;

  71. procedure TMainForm.FormShow(Sender: TObject);
  72. begin
  73.     AppSessionInit;
  74.     AppSessionTimer.Interval := 1000 * 60 * 2;
  75.     AppSessionTimer.Enabled := true;
  76. end;

  77. procedure TMainForm.FormActivate(Sender: TObject);
  78. begin
  79.         AppSessionUpdateUser;
  80. end;

  81. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  82. begin
  83.   AppSessionClear;
  84. end;

  85. procedure TMainForm.AppSessionTimerTimer(Sender: TObject);
  86. begin
  87.   AppSessionUpdateLastTime;
  88. end;
複製代碼
資料表 Schema
  1. CREATE TABLE [dbo].[SESSION] (
  2.         [GUID] [char] (36) NOT NULL ,
  3.         [STARTTIME] [datetime] NOT NULL ,
  4.         [LASTTIME] [datetime] NOT NULL ,
  5.         [HOSTNAME] [varchar] (15) NULL ,
  6.         [USERID] [varchar] (15) NULL ,
  7.         [USERNAME] [varchar] (15) NULL
  8. ) ON [PRIMARY]
  9. GO

  10. ALTER TABLE [dbo].[SESSION] ADD
  11.         CONSTRAINT [PK_SESSION] PRIMARY KEY  CLUSTERED
  12.         (
  13.                 [GUID]
  14.         ) WITH  FILLFACTOR = 90  ON [PRIMARY]
  15. GO
複製代碼
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2025-5-3 03:41 , Processed in 0.012762 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.