procedure MakeTables(_myCon: PMySQL);
var
query: PChar;
begin
mysql_select_db(_myCon, '
APITest');
//zu Datenbank "APITest" wechseln
query:='
CREATE TABLE posts(id int, author int, date datetime, entry text)';
mysql_real_query(_myCon, '
CREATE TABLE posts(id int, author int, date datetime, entry text)', Length(
query));
query:='
CREATE TABLE users(id int, name varchar(50), pass varchar(50))';
mysql_real_query(_myCon, '
CREATE TABLE users(id int, name varchar(50), pass varchar(50))', Length(
query));
end;
procedure CreateDB;
var
Posts: TPostEntries;
_myCon: PMySQL;
//unseren Verbindungsdeskriptor
host, user, pass,
db: PChar;
//die Anmeldedaten
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;
idAuthor:
String;
begin
//wir werden uns als Root-Benutzer in localhost einloggen, ohne eine
//bestimmte Datenbank auszuwählen
host := '
localhost';
user := '
root';
pass := '
test';
db :=
nil;
//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 := '
CREATE DATABASE APITest';
mysql_real_query(_myCon,
query, Length(
query));
MakeTables(_myCon);
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 := Integer(_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);
mysql_real_query(_myCon,
query, Length(
query));
_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
{...}
{Verbindung schließen oder etwas anderes machen}
// for i:=0 to
mysql_close(_myCon);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateDB;
end;