procedure TForm1.BtVTPClick(Sender: TObject);
var
_myCon: PMySQL;
//unseren Verbindungsdeskriptor
host, user, pass,
db: PChar;
//die Anmeldedaten
Posts: TPostEntries;
idAuthor:
String;
//zum Zwischenspeichern der Verfasser-ID
query: PChar;
_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 := '
localhost';
user := '
root';
pass := '
XXXXX';
db := '
APITest';
//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');
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 := StrToInt(_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
//zum Schluss wird die Verbindung wieder geschlossen
mysql_close(_myCon);
end;