Delphi-PRAXiS
Seite 4 von 36   « Erste     234 5614     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi MySQL ohne Komponenten (https://www.delphipraxis.net/6543-mysql-ohne-komponenten.html)

JASH 19. Dez 2003 10:04

Re: MySQL ohne Komponenten
 
Danke, guter beitrag, besser erklärt als auf so manch anderen seiten, funzt auch "fast" alles, habe nur ein problem, bei Delphi 7 kennt er
Delphi-Quellcode:
TPostEntries
nicht, demnach funzt auch des proggi nicht, kann mir da bitte einer weiterhelfen ?

teebee 19. Dez 2003 11:00

Re: MySQL ohne Komponenten
 
Delphi-Quellcode:
TPostEntries = Array of TPostEntry;
Siehe drittes Posting auf der ersten Seite des Threads. Vielleicht hast Du vergessen, diese Zeile zu pasten?

Gruß, teebee

JASH 19. Dez 2003 12:53

Re: MySQL ohne Komponenten
 
oh, danke für die antwort, total vergessen :oops:

dafür hab ich nu nen anderes prob :-D

wenn ich

Delphi-Quellcode:
Posts[i].id := InttoStr(_myRow[0]); //ID des Posts ist erstes Feld im Datensatz
erhalte ich die Fehlermeldung

Delphi-Quellcode:
[Fehler] dbverb2_u.pas(92): Inkompatible Typen: 'Integer' und 'String'
hab den code aber kopiert, kann also kein schreibfehler meinerseits sein, da der code aber bei einigen usern funzt, der Autor laut eigenen Info`s delphi 5 benutzt, ich aber delphi 7 dürfte dass Problem dort liegen, kann mir da jemand weiterhelfen ?

Chewie 19. Dez 2003 18:19

Re: MySQL ohne Komponenten
 
Die Zeile müsste so richtig sein. Mit der Delphi-Version kann das nichts zu tun haben, ab Delphi4 muss das Verhalten in diesem Fall identisch sein.
Die Typen in der von dir genannten Zeile stimmen. TPostEntry.id ist ein Integer und die Elemente in PMySQL_Row[] sind Strings. Taucht der Fehler wirklich in der Zeile auf? Das würde mich wundern. Poste doch mal die umliegenden Zeilen.

JASH 19. Dez 2003 19:38

Re: MySQL ohne Komponenten
 
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 ?

Huor 1. Jan 2004 12:29

Re: MySQL ohne Komponenten
 
Hallo,
ich habe folgendes Problem: SQL-Statements möchte ich über ein Editfeld eingeben. Nun ist query vom Typ PChar und ich bekomme einen Typ-Konflikt (Edit.text ist ja String). Wie konvertiert man das?

Ansonsten dickes Lob für das Tutorial und Prost Neujahr.
Gruß
Huor

Duffy 1. Jan 2004 12:36

Re: MySQL ohne Komponenten
 
Hallo Huor,
Delphi-Quellcode:
Query := PChar(Edit.Text);
bye
Claus

Huor 1. Jan 2004 13:28

Re: MySQL ohne Komponenten
 
Danke!
Ich dachte zunächst, PCHAR wäre kein Standarddelphi-Typ und ich bräuchte irgendeinen Speziahl-Befehl ;-)
Nun läuft es.

Tyler 9. Mär 2004 14:08

Re: MySQL ohne Komponenten
 
Hallo!

Erstmal dickes Lob, gefällt mir sehr gut das Tut! :)

Nur eine Frage: Wenn ich das jetzt richtig verstehe, kann ich mit dieser Methode nur auslesen und in Array´s schreiben. Wie geh ich jetzt vor, um die Daten in einer Tabelle anzeigen zu lassen?

mfg

Benedikt 9. Mär 2004 14:32

Re: MySQL ohne Komponenten
 
Hi,

die Frage ist, wo du die Daten anzeigen willst.
Bei einem StringGrid kannst du z.B. so...

Delphi-Quellcode:
for i:=0 to Data.row_count-1 do
begin
   Row:=mysql_fetch_row(Data);

   for j:=0 to Data.field_count-1 do
   begin
     stringGrid1.Cells[j+1, i+1]:=Row[j];
   end;
end;
...sämtliche Daten einer Tabelle ausgeben lassen, wobei die Daten in Data stehen.
Evtl. Anpassung der Zeilen und Spalten fehlt natürlich noch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.
Seite 4 von 36   « Erste     234 5614     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz