Thema: Delphi MySQL ohne Komponenten

Einzelnen Beitrag anzeigen

Benutzerbild von JASH
JASH

Registriert seit: 19. Dez 2003
16 Beiträge
 
Delphi 7 Architect
 
#35

Re: MySQL ohne Komponenten

  Alt 19. Dez 2003, 20:38
Ich weiss, dass is ja des prob des ich habe, hab den code 1:1 kopiert und nichts verändert abgesehen von den verbindungsdaten.

Delphi-Quellcode:
type
  TPostEntry = record
    id: Integer;
    author: String[50];
    time: String[255];
    text: String;
  end;
  TPostEntries = Array of TPostEntry;

procedure TForm1.Button1Click(Sender: TObject);
var
  host, user, pass, db, query: PChar; //die Anmeldedaten
  Posts: TPostEntries;
  idAuthor: String; //zum Zwischenspeichern der Verfasser-ID
  _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 := '****';
  user := '****';
  pass := '****';
  db := '****';
 
  //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');

  mysql_real_query(_myCon, 'CREATE TABLE posts(id int, author int, date datetime, entry text)', Length(query));
  mysql_real_query(_myCon, 'CREATE TABLE users(id int, name varchar(50), pass varchar(50))', 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 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 := InttoStr(_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


end;
Schonma danke im vorraus für die kommende Antwort, wenn es da nen gescheites buch über Delphi und MySQL geben würde würd ich mir des ja reinziehen, aber es gibt höchstens MSSQL und Delphi, und mit den Verbindungstypen von Delphi bekomme ich keine Verbindung zustande was mir bei dem Beispiel hier aber sofort gelungen ist. Kann mir da vlt. jemand was empfehlen ?
  Mit Zitat antworten Zitat