
Ich bin an jeder Kritik interessiert. Falls man etwas prinzipiell anders macht, dann bedenke ich das gern. Das Programm läuft als Server auf einem Sheeva-Plug, multithreaded für parallelen Zugriff; es gibt keine visuellen Komponenten.
Der Code sieht in etwa so aus:
Code: Alles auswählen
uses ... Mysql50conn, sqldb, db,...
MySQL := TMySQL50Connection.Create(nil);
Trans := TSQLTransaction.Create(nil);
with MySQL do
begin
HostName := '127.0.0.1';
UserName := _user;
Password := _passwd;
DatabaseName := _database;
Connected:=true;
Transaction := Trans;
end;
Query := TSQLQuery.Create(nil);
Query.DataBase := MySQL;
Query.UpdateMode := upWhereChanged; //upWhereAll
Query.SQL.Text := 'SET CHARACTER SET `utf8`';
Query.ExecSQL;
Query.Active:=false;
Query.SQL.Text := 'SELECT * FROM Users WHERE Name="Test"';
Query.Active:=true;
Query.Edit;
writeln('1:', Query.FieldValues['GamesPlayed']); //1
Query.FieldValues['GamesPlayed']:=Query.FieldValues['GamesPlayed']+1;
writeln('2:', Query.FieldValues['GamesPlayed']); //2
Query.Post;
Query.ApplyUpdates;
Trans.Commit;
Query.Active:=false;
Query.SQL.Text := 'SELECT * FROM Users WHERE Name="Test"';
Query.Active:=true;
writeln('3:', Query.FieldValues['GamesPlayed']); //2, wenn upWhereChanged, 1 wenn upWhereAll
Query.Close;
Query.Free;
Trans.Free;
MySQL.Free;
Code: Alles auswählen
Info.PlayerName:=aRecvMsg.Sender; //Benutzername kommt über TCP rein
Query.Active:=false;
Query.SQL.Text := 'SELECT * FROM Users WHERE Name="'+Info.PlayerName+'"';
Query.Active:=true;
if Query.RecordCount=0 then
begin
Query.Cancel;
Query.Append;
Query.FieldValues['Name'] := Info.PlayerName;
Query.Post;
Query.ApplyUpdates; //to apply update
end;
Query.Active:=false;
Query.SQL.Text := 'SELECT * FROM Users WHERE Name="'+Info.PlayerName+'"';
Query.Active:=true;