Thema: Delphi MySQL ohne Komponenten

Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#125

Re: MySQL ohne Komponenten

  Alt 30. Jul 2006, 18:44
also ich habe mir jetzt nicht alle 9 seiten durchlesen aber ich habe einee frage zu deine tutorial:
ich habe nun folgenden qullcode:
Delphi-Quellcode:
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;
aber leider bleibt der Array Posts immer leer wie kann ich ihn füllen ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat