Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
FreePascal / Lazarus
|
Re: MySQL ohne Komponenten
1. Aug 2006, 09:02
jetzt geht ja luckie beispiel aber dafür geht dein noch nicht und zwar nur wegen einer zeile:
Posts[i].author := _mySubRow[0];
nehme ich diese rauß geht es.... der code sieht so aus:
Delphi-Quellcode:
procedure MakeTables(_myCon: PMySQL);
var
query: PChar;
begin
mysql_select_db(_myCon, ' APITest'); //zu Datenbank "APITest" wechseln
query:=' CREATE TABLE posts(id integer, author integer, date datetime, entry text)';
mysql_real_query(_myCon, query , Length( query));
query:=' CREATE TABLE users(id integer, name varchar(50), pass varchar(50))';
mysql_real_query(_myCon, query, 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 := ' ';
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:=PChar(' DELETE FROM posts');
mysql_real_query(_myCon, query, Length( query));
query:=PChar(' INSERT INTO posts(id,author,date,entry) VALUES(1,2,2005-10-10,'' Dies ist ein test'' )');
mysql_real_query(_myCon, query, 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 konntenkeine 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
// ShowMessage(IntToStr(High(Posts)));
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);
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;
Michael Springwald MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
|