![]() |
Re: MySQL ohne Komponenten
Hi!
Wollte nur mal fragen, gibt es so etwas auch für Firebird bzw. würde sich dies darauf anwenden lassen? Gruß |
Re: MySQL ohne Komponenten
Das ist die API für MySQl. Andere Datenbanken besitzen andere APIs.
U.a. aus diesem Grund gibt es Abstraktions-Layer ;) |
Re: MySQL ohne Komponenten
Hallo
Ich habe eine Problem. Ich habe die Unit mysql.pas heruntergeladen und alles gemacht was im Tutorials stand aber wenn ich die Unit compiliere bringt folgende fehler: Undefinierter Bezeichner: longword, pLongword und Int64. liegt es daran an das ich Delphi 3 benutze. Bitte um eine Antwort |
Re: MySQL ohne Komponenten
Problem gelöst?
er war wie ich es vermuten habe. ich hab mit delphi7 probiert und läuft wunderbar. |
Re: MySQL ohne Komponenten
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:
aber leider bleibt der Array Posts immer leer wie kann ich ihn füllen ?
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; |
Re: MySQL ohne Komponenten
Klar, dass es leer bleibt, es befinden sich ja keine Einträge in den Tabellen!
Die Tabellen werden ja nur erzeugt, nicht befüllt! Dies müsstest du dann selbst mit entsprechenden INSERT-Statements machen. |
Re: MySQL ohne Komponenten
ich habe jetzt ein insert befehl hinzugefügt, doch sie bleibt immer noch leer:
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; ..... 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)); // ich bin sicher das muss hier hin doch die db bleibt immer noch leer warum ? query:='INSERT INTO posts (id, author, date, entry) VALUES (001, Michael Springwald, 10.10.2006, Dies ist ein test'; 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 ShowMessage(IntToStr(High(Posts))); |
Re: MySQL ohne Komponenten
Lass dir mal den Fehlertext zurückgeben (mysql_error()) und lies dir die Dokumentation durch, dann wirst du hoffentlich erkennen, dass String-Literale in Hochkommata eingefasst werden müssen.
Tipp: Besorg dir ein Tool wie z.B. ![]() |
Re: MySQL ohne Komponenten
es kommt folgende fehlermeldung:
Zitat:
Delphi-Quellcode:
und noch eine kurzte frage wie kann ich die bestehene db abspeichern in eine datei ??? es das Datum bzw. die uhrzeit falschangeben ?
query:='INSERT INTO posts (id,author,date,entry) VALUES (001, 5, 10.10.2005 10:35, ''Dies ist ein test'')';
|
Re: MySQL ohne Komponenten
habes hinbekommen(fast):
Delphi-Quellcode:
es gibt in der forschleife aus deinem tutor nur noch eine fehlermeldung:
MakeTables(_myCon);
// ich bin sicher das muss hier hin doch die db bleibt immer noch leer warum ? query:=PChar('INSERT INTO posts(id,author,date,entry) VALUES(1,Mimi,10-10-2005,''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)); Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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