![]() |
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:
nicht, demnach funzt auch des proggi nicht, kann mir da bitte einer weiterhelfen ?
TPostEntries
|
Re: MySQL ohne Komponenten
Delphi-Quellcode:
Siehe drittes Posting auf der ersten Seite des Threads. Vielleicht hast Du vergessen, diese Zeile zu pasten?
TPostEntries = Array of TPostEntry;
Gruß, teebee |
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:
erhalte ich die Fehlermeldung
Posts[i].id := InttoStr(_myRow[0]); //ID des Posts ist erstes Feld im Datensatz
Delphi-Quellcode:
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 ?
[Fehler] dbverb2_u.pas(92): Inkompatible Typen: 'Integer' und 'String'
|
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. |
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:
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 ?
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; |
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 |
Re: MySQL ohne Komponenten
Hallo Huor,
Delphi-Quellcode:
bye
Query := PChar(Edit.Text);
Claus |
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. |
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 |
Re: MySQL ohne Komponenten
Hi,
die Frage ist, wo du die Daten anzeigen willst. Bei einem StringGrid kannst du z.B. so...
Delphi-Quellcode:
...sämtliche Daten einer Tabelle ausgeben lassen, wobei die Daten in Data stehen.
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; Evtl. Anpassung der Zeilen und Spalten fehlt natürlich noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz