Thema: Delphi MySQL ohne Komponenten

Einzelnen Beitrag anzeigen

mimi

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

Re: MySQL ohne Komponenten

  Alt 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)
  Mit Zitat antworten Zitat