type
TPostEntry =
record
id: Integer;
author:
String[50];
time:
String[255];
text:
String;
end;
TPostEntries =
Array of TPostEntry;
procedure TForm1.Button1Click(Sender: TObject);
var
host, user, pass,
db,
query: PChar;
//die Anmeldedaten
Posts: TPostEntries;
idAuthor:
String;
//zum Zwischenspeichern der Verfasser-ID
_myRes: PMySQL_Res;
//hier wird der gesamte Ergebnissatz gespeichert
_mySubRes: PMySQL_Res;
//benötigt, um Autor zu ermmitteln
_myRow: PMySQL_Row;
//enthält den aktuellen Datensatz
_mySubRow: PMySQL_Row;
//benötigt, um Autor zu ermmitteln
i: Integer;
begin
//wir werden uns als Root-Benutzer in localhost einloggen, ohne eine
//bestimmte Datenbank auszuwählen
host := '
****';
user := '
****';
pass := '
****';
db := '
****';
//jetzt wird _myCon initialisiert
_myCon := mysql_init(
nil);
if _myCon =
nil then
begin
ShowMessage('
Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
Exit;
end;
//anschließend wird die Verbindung hergestellt
if mysql_real_connect(_myCon, host, user, pass,
db, 3306,
nil, 0) =
nil then
begin
ShowMessage('
Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon));
Exit;
end;
ShowMessage('
Verbindung hergestellt');
mysql_real_query(_myCon, '
CREATE TABLE posts(id int, author int, date datetime, entry text)', Length(
query));
mysql_real_query(_myCon, '
CREATE TABLE users(id int, name varchar(50), pass varchar(50))', Length(
query));
query := '
SELECT * FROM posts ORDER BY id';
mysql_real_query(_myCon,
query, Length(
query));
_myRes := mysql_store_result(_myCon);
//alle Datensätze vom Server anfordern
if _myRes =
nil then
begin
ShowMessage('
Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon));
Exit;
end;
SetLength(Posts, mysql_num_rows(_myRes));
//Posts-Array-Größe auf Anzahl der Datensätze setzen
for i := 0
to High(Posts)
do
begin
_myRow := mysql_fetch_row(_myRes);
//Datensatz abholen
Posts[i].id := InttoStr(_myRow[0]);
//ID des Posts ist erstes Feld im Datensatz
Posts[i].time := _myRow[2];
//Zeitpunkt ist drittes Feld
Posts[i].text := _myRow[3];
//Text ist viertes Feld
idAuthor := _myRow[1];
query := PChar('
SELECT name FROM users WHERE id=' + idAuthor);
_mySubRes := mysql_store_result(_myCon);
_mySubRow := mysql_fetch_row(_mySubRes);
Posts[i].author := _mySubRow[0];
mysql_free_result(_mySubRes);
//Ergebnissatz löschen
end;
mysql_free_result(_myRes);
//Ergebnissätze löschen
end;