Hallo Forum.
Ich bin von Windows umgestiegen auf Linux Mint und habe jetzt Lazarus installiert.
Die Datenbank ist MARIADB.
ALs GUI-Client benutze ich DBeaver.
Jetzt habe versucht, mit Lazarus eine Verbindung zur vorher erstellten Datenbank/Tabelle herzustellen.
SQLQuery und SQLConnection und SQLTransaction sind korrrekt definiert.
Im Objektinspektor kann ich in MySQL80Connection die Datenbank verbinden.
Zur Laufzeit bekomme ich bei SQLQuery1.Open die Fehlermeldung " Database not assigned"
SQLQuery1.SQL.Text := 'Select * from TestDB.Persons';
SQLQuery1.Open;
Wer weiss was?
Gruß Johannes
Database not assigned
- kralle
- Lazarusforum e. V.
- Beiträge: 1323
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
Re: Database not assigned
Hallo Johannes,
willkommen im Lazarusforum.
Stellst Du Dich hier [url]viewforum.php?f=20/url] vielleicht auch mal kurz vor?.
Gruß Kralle
Co-Admin, Moderator,
Co-Vorsitzender Lazarusforum e.V.
willkommen im Lazarusforum.
Stellst Du Dich hier [url]viewforum.php?f=20/url] vielleicht auch mal kurz vor?.
Gruß Kralle
Co-Admin, Moderator,
Co-Vorsitzender Lazarusforum e.V.
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
- af0815
- Lazarusforum e. V.
- Beiträge: 7189
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Database not assigned
Ich kann jetzt nicht speziell helfen.Johannes55 hat geschrieben: Mo 23. Feb 2026, 17:34 Im Objektinspektor kann ich in MySQL80Connection die Datenbank verbinden.
Zur Laufzeit bekomme ich bei SQLQuery1.Open die Fehlermeldung " Database not assigned"
Bei Lazarus laufen die Einstellungen zur Designzeit über Lazarus. Zur Laufzeit über das Programm. Das heisst das die Umgebung eine andere ist, daher muss man mit Pfaden aufpassen. Dies sollte man immer absolut nehmen. Weil Lazarus startet in einem anderen Verzeichnis weg als das Programm später.
Was hier nicht der Fall sein wird: Man kann mit einem 64Bit Lazarus auch 32Bit Anwendungen (und umgekehrt) erstellen, dann muss man auf die Libraries aufpassen.
Ein letzter Hinweis, es gibt zwei Datenbank Geschmacksrichtungen - SQLdb was bei FPC/Lazarus dabei ist und ZEOS was extra installiert werden muss, dafür wieder Benutzern von Delphi meistens vertrauter ist.
Und ein kurzes einfaches Beispiel mit 10 Zeilen sagt oft mehr alls 1000 Zeilen Text. Es gibt dafür sogar eine Funktion in Lazarus um ein Projekt zu Publishen. Menü Project->Publish Project
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 559
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: Database not assigned
Wobei die Fehlermeldung eigentlich eindeutig ist.
Hast du die heilige Trifecta auch korrekt miteinander verbunden?
Du erwähnst die Connection im Object-Inspector.
Was ist mit den beiden anderen (Transaction und SQLQuery)? Hast du die auch auf deine Form/Datamodule geworfen?
Transaction muss bei "Database" deine Connection haben.
Die Connection muss bei "Transaction" deine Transaction haben
(Im Prinzip ein Zirkelbezug zwischen den beiden)
SQLQuery muss bei "Database" deine Connection haben, und bei "Transaction" deine Transaction.
Falls du es aus dem Code heraus machst (Beispiel ist für SQLite)
Und für MariaDB sollte man auch den "SkipLibraryVersionCheck" setzen (oder wie das Ding heisst)
Da der Fehler "Database not assigned" lautet:
Ich glaube mich dunkel zu erinnern, dass man bevor man verbindet ein Default-Schema angeben muss.
Ich geh mal von aus, dass wahrscheinlich meine zweite Zeile oben fehlt ("TestDB" für DBName).
Ansonsten kann man auch "mysql" als Default-Schema nehmen, weil das ist immer drauf.
Nur bin ich mir nicht gerade sicher (lange her, dass ich mit MySQL gearbeitet habe) wie es sich mit den GRANTS der User verhält was Zugriff auf Schema "mysql" betrifft.
Kann natürlich auch sein, dass einfach das hier fehlt
Du erwähnst Linux Mint und DBeaver:
Falls du vorhast mit "vielen" verschiedenen DB's zu arbeiten, ist DBeaver sicher eine gute Wahl.
Falls nicht, hätte ich jetzt eher MySQL Workbench genommen.
Als "Multi-DB-Tool" setzt sich seit geraumer Zeit auch HeidiSQL immer mehr durch
(Und HeidiSQL ist sogar in Pascal geschrieben, und für Linux mit Lazarus 4.4 gebaut)
https://www.heidisql.com/
EDIT:
Das interessantere ist viel eher: Hoffentlich wurde der MariaDB-Server bzw. die Client-Lib "normal" installiert, und nicht als SNAP (Hatten wir bei Juergen vor einigen Monaten den Fall).
Nur für die client-libs ist dann der Pfad wichtig, und bei einer "normalen" Installation sind die libs am richtigen Ort, wo sie Lazarus dann auch findet.
Und OP sagt ja, er bekommt nen Connect. Also gehe ich auch davon aus, dass der MariaDB-Server selbst (die "my.inf") richtig konfiguriert ist
Hast du die heilige Trifecta auch korrekt miteinander verbunden?
Du erwähnst die Connection im Object-Inspector.
Was ist mit den beiden anderen (Transaction und SQLQuery)? Hast du die auch auf deine Form/Datamodule geworfen?
Transaction muss bei "Database" deine Connection haben.
Die Connection muss bei "Transaction" deine Transaction haben
(Im Prinzip ein Zirkelbezug zwischen den beiden)
SQLQuery muss bei "Database" deine Connection haben, und bei "Transaction" deine Transaction.
Falls du es aus dem Code heraus machst (Beispiel ist für SQLite)
Code: Alles auswählen
Conn:=TSQLite3Connection.Create(Nil); //In deinem Fall dann TMySQL80Connection
Conn.DatabaseName:=DB_NAME;
//Bei MySQL/Maria kommen dann noch "UserName", "Password", "HostName", "Port" usw. dazu
Tran:=TSQLTransaction.Create(Nil);
Tran.DataBase:=Conn;
Conn.Transaction:=Tran;
SQLQuery:=TSQLQuery.Create(Nil);
SQLQuery.DataBase:=Conn;
SQLQuery.Transaction:=Tran; Da der Fehler "Database not assigned" lautet:
Ich glaube mich dunkel zu erinnern, dass man bevor man verbindet ein Default-Schema angeben muss.
Ich geh mal von aus, dass wahrscheinlich meine zweite Zeile oben fehlt ("TestDB" für DBName).
Ansonsten kann man auch "mysql" als Default-Schema nehmen, weil das ist immer drauf.
Nur bin ich mir nicht gerade sicher (lange her, dass ich mit MySQL gearbeitet habe) wie es sich mit den GRANTS der User verhält was Zugriff auf Schema "mysql" betrifft.
Kann natürlich auch sein, dass einfach das hier fehlt
Code: Alles auswählen
SQLQuery.Database:=MyConnection;Falls du vorhast mit "vielen" verschiedenen DB's zu arbeiten, ist DBeaver sicher eine gute Wahl.
Falls nicht, hätte ich jetzt eher MySQL Workbench genommen.
Als "Multi-DB-Tool" setzt sich seit geraumer Zeit auch HeidiSQL immer mehr durch
(Und HeidiSQL ist sogar in Pascal geschrieben, und für Linux mit Lazarus 4.4 gebaut)
https://www.heidisql.com/
EDIT:
Ist MariaDB, also Server-based Datenbank. Wird über Server-Name oder IP-Adresse+Port angesteuert.af0815 hat geschrieben: Mo 23. Feb 2026, 22:47 Bei Lazarus laufen die Einstellungen zur Designzeit über Lazarus. Zur Laufzeit über das Programm. Das heisst das die Umgebung eine andere ist, daher muss man mit Pfaden aufpassen. Dies sollte man immer absolut nehmen. Weil Lazarus startet in einem anderen Verzeichnis weg als das Programm später.
Das interessantere ist viel eher: Hoffentlich wurde der MariaDB-Server bzw. die Client-Lib "normal" installiert, und nicht als SNAP (Hatten wir bei Juergen vor einigen Monaten den Fall).
Nur für die client-libs ist dann der Pfad wichtig, und bei einer "normalen" Installation sind die libs am richtigen Ort, wo sie Lazarus dann auch findet.
Und OP sagt ja, er bekommt nen Connect. Also gehe ich auch davon aus, dass der MariaDB-Server selbst (die "my.inf") richtig konfiguriert ist
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.