www.pudn.com > Roulette.rar > DAU.pas
unit DAU;
interface
uses ADODB, DB, Types, classes, Forms, SyncObjs, Tltconst, rltSvr, SysUtils,
Variants, ActiveX, Registry, ScktCnst, Windows;
const
ckDBPath = 'DBPath';
ConnectString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s';
PlayerSQL = 'select * from player';
RoundSQL = 'select * from ';
function DAUInit(): boolean;
function DAUFinit(): boolean;
function DALoadPlayer(Player : TPlayer): boolean;
procedure DASavePlayer(Player : TPlayer);
procedure DADeletePlayer(Player : TPlayer);
function DACreatePlayer(Player: TPlayer):integer;
function DAEditPlayer(Player: TPlayer):integer;
function DAGetNewID(TableName, FieldName : String):integer;
function DAGetNewPlayerID : String;
procedure SaveWheel(Round : TRound);
function ReadRoundScord(RoundID : integer; RoundScordArray: array of TRoundScord):boolean;
procedure ReadGameSetting(var TimeSetting : TTimeSetting) ;
procedure SaveGameSetting(TimeSetting : TTimeSetting);
function GetPlayerCount: integer;
procedure DAReadPlayers(Data : PArrayOfPlayerInfo; StartIndex , Count : integer);
function DAReadLastChangePlayer(Data :PArrayOfPlayerInfo;var AfterTime : TDateTime):integer;
function DAReadPlayer(APlayerID : String): TPlayerInfo;
function DAReadGameParams(var AGameParams : TGameParams): boolean;
function DASaveGameParams(AGameParams : TGameParams): boolean;
function DASaveRoundScordInfo(AWheelInfo : TWheelInfo): boolean;
function DASavePlayerBetInfo(APlayerBetInfo : TPlayerBetInfo) : boolean;
function DAGetRoundInfoLog(var AArrayofRoundInfo : TArrayofRoundInfo) : integer;
function DAGetPlayerBetInfoLog(var AArrayofPlayerBetInfo : TArrayofPlayerBetInfo) : integer;
function DAClearPlayerBetInfoLog : boolean;
function DAClearRoundInfoLog : boolean;
function DAClearPlayerList : boolean;
var
CDBPath : String;
implementation
var
Connection : TADOConnection;
PlayerTable : TADOQuery;
Query : TADOQuery;
AccessCritical : TCriticalSection;
function GetPlayerCount: integer;
begin
Result := 0;
if (PlayerTable=nil)or(not PlayerTable.Active) then Exit;
Result := PlayerTable.RecordCount;
end;
procedure DAReadPlayers(Data : PArrayOfPlayerInfo; StartIndex , Count : integer);
var
I : integer;
CPlayerInfo :TPlayerInfo;
begin
if Count<=0 then Exit;
if Data = nil then Exit;
try
AccessCritical.Enter;
for I := StartIndex to Count+StartIndex-1 do
begin
PlayerTable.RecNo := I+1;
FillChar(CPlayerInfo, sizeof(CPlayerInfo), #0);
with CPlayerInfo do
begin
ID := VarToStr(PlayerTable['ID']);
Password := VarToStr(PlayerTable['password']);
UserName := VarToStr(PlayerTable['PlayName']);
Money := (PlayerTable['chip']);
LastActiveTime := PlayerTable.FieldByName('lastactive').AsDateTime;
end;
move(CPlayerInfo, Pointer(PChar(Data)+(I-StartIndex)*sizeof(TPlayerInfo))^, sizeof(TPlayerInfo));
end;
finally
AccessCritical.Leave;
end;
end;
function DAReadLastChangePlayer(Data :PArrayOfPlayerInfo;var AfterTime : TDateTime):integer;
var
I : integer;
CPlayerInfo :TPlayerInfo;
NowTime : TDateTime;
begin
Result := 0;
NowTime := AfterTime;
if Data = nil then Exit;
try
AccessCritical.Enter;
for I := 0 to PlayerTable.RecordCount-1 do
begin
PlayerTable.RecNo := I+1;
if PlayerTable.FieldByName('lastactive').AsDateTime > AfterTime then
begin
FillChar(CPlayerInfo, sizeof(CPlayerInfo), #0);
with CPlayerInfo do
begin
ID := VarToStr(PlayerTable['ID']);
Password := VarToStr(PlayerTable['password']);
Money := (PlayerTable['chip']);
UserName := varToStr(PlayerTable['playname']);
Memo := VarToStr(PlayerTable['memo']);
LastActiveTime := PlayerTable.FieldByName('lastactive').AsDateTime;
if NowTime Player.Money;
CModified :=CModified or( VarToStr(PlayerTable['password'])<> Player.Password);
PlayerTable['password'] := Player.Password;
PlayerTable['chip'] := Player.Money;
if CModified then PlayerTable['lastactive'] := now
else PlayerTable['lastactive'] := Player.LastActiveTime ;
PlayerTable['playname'] := Player.UserName;
PlayerTable['memo'] := Player.Memo;
PlayerTable.Post;
except
PlayerTable.Cancel;
try
PlayerTable.Close;
PlayerTable.Open;
except
end;
end;
end;
end;
procedure DADeletePlayer(Player : TPlayer);
begin
if (PlayerTable=nil)or(not PlayerTable.Active) then Exit;
if not PlayerTable.Locate('ID', Player.ID, []) then Exit;
PlayerTable.Delete;
end;
procedure SaveWheel(Round : TRound);
begin
end;
function ReadRoundScord(RoundID : integer; RoundScordArray: array of TRoundScord):boolean;
var
ADOQuery : TADOQuery;
i,j : integer;
begin
for i :=Low(RoundScordArray) to High(RoundScordArray) do
begin
with RoundScordArray[i] do
begin
for j :=0 to 50 do Number[j] := -1;
Count := 0;
end;
end;
ADOQuery.Create(Application);
ADOQuery.Connection := Connection;
ADOQuery.SQL.Text :=format('select * from round where ID = %d order by roundno, wheelno',[RoundID]);
AccessCritical.Enter;
try
ADOQuery.Open;
I := 0; J := 0;
ADOQuery.Next;
while not ADOQuery.Eof do
begin
with RoundScordArray[i] do
begin
Number[j] := ADOQuery['result'];
Count := j;
end;
inc(J);
if J>=50 then
begin
inc(i);
j := 0;
end;
ADOQuery.Next;
end;
finally
AccessCritical.Leave;
ADOQuery.Free;
end;
end;
procedure ReadGameSetting(var TimeSetting : TTimeSetting) ;
begin
end;
procedure SaveGameSetting(TimeSetting : TTimeSetting);
begin
end;
function DAGetNewID(TableName, FieldName : String):integer;
begin
end;
function DAGetNewPlayerID : String;
var
NewPlayerID : integer;
NewPlayerIDString : String;
begin
AccessCritical.Enter;
try
Query.SQL.Text := 'select max(ID) from player';
Query.Open;
NewPlayerIDString := VarToStr(Query.Fields[0].Value);
try
NewPlayerID := StrToInt(NewPlayerIDString)+1;
except
NewPlayerID := 10000;
end;
finally
Result := IntToStr(NewPlayerID);
AccessCritical.Leave;
end;
end;
function DAGetRoundInfoLog(var AArrayofRoundInfo : TArrayofRoundInfo) : integer;
var
LogQuery : TADOQuery;
begin
Result := 0;
LogQuery := TADOQuery.Create(nil);
try
LogQuery.Connection := Connection;
LogQuery.SQL.Text := 'select * from round';
LogQuery.Open;
LogQuery.First;
while (Result<10000) and (not LogQuery.Eof) do
begin
if LogQuery.IsEmpty then Exit;
with AArrayofRoundInfo[Result] do
begin
ID := LogQuery['id'];
Roundno :=LogQuery['Roundno'];
wheelno :=LogQuery['wheelno'];
dvalue := LogQuery['dvalue'];
value := LogQuery['value'];
r := LogQuery['r'];
g := LogQuery['g'];
b := LogQuery['b'];
result :=LogQuery['result'];
resultcolor :=LogQuery['resultcolor'];
datetime :=VarToDateTime(LogQuery['datetime']);
auto := LogQuery['auto'];
end;
LogQuery.Next;
inc(Result);
end;
finally
LogQuery.Free;
end;
end;
function DAGetPlayerBetInfoLog(var AArrayofPlayerBetInfo : TArrayofPlayerBetInfo) : integer;
var
LogQuery : TADOQuery;
begin
Result := 0;
LogQuery := TADOQuery.Create(nil);
try
LogQuery.Connection := Connection;
LogQuery.SQL.Text := 'select * from smartlog order by player, datetime ';
LogQuery.Open;
LogQuery.First;
while (Result<10000) and (not LogQuery.Eof) do
begin
if LogQuery.IsEmpty then Exit;
with AArrayofPlayerBetInfo[Result] do
begin
PlayerID := LogQuery['Player'];
r :=LogQuery['rsmart'];
b :=LogQuery['gsmart'];
g := LogQuery['bsmart'];
Settlement := LogQuery['settlement'];
Datetime := VarToDateTime(LogQuery['datetime']);
RoundNo := LogQuery['roundno'];
WheelNo := LogQuery['wheelno'];
Result :=LogQuery['result'];
ResultColor :=LogQuery['resultcolor'];
RoundMain :=(LogQuery['roundmain']);
PreMoney := LogQuery['premoney'];
end;
LogQuery.Next;
inc(Result);
end;
finally
LogQuery.Free;
end;
end;
function DAClearPlayerBetInfoLog : boolean;
var
LogQuery : TADOQuery;
begin
Result := false;
LogQuery := TADOQuery.Create(nil);
try
LogQuery.Connection := Connection;
LogQuery.SQL.Text := 'delete from smartlog';
LogQuery.ExecSQL;
Result := true;
finally
LogQuery.Free;
end;
end;
function DAClearRoundInfoLog;
var
LogQuery : TADOQuery;
begin
Result := false;
LogQuery := TADOQuery.Create(nil);
try
LogQuery.Connection := Connection;
LogQuery.SQL.Text := 'delete from round';
LogQuery.ExecSQL;
Result := true;
finally
LogQuery.Free;
end;
end;
function DAClearPlayerList : boolean;
var
LogQuery : TADOQuery;
begin
Result := false;
LogQuery := TADOQuery.Create(nil);
PlayerTable.Close;
try
LogQuery.Connection := Connection;
LogQuery.SQL.Text := 'delete from player';
LogQuery.ExecSQL;
Result := true;
finally
LogQuery.Free;
PlayerTable.Open;
end;
end;
end.