Database not assigned

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Johannes55
Beiträge: 5
Registriert: Mo 23. Feb 2026, 17:20

Database not assigned

Beitrag von Johannes55 »

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

Benutzeravatar
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

Beitrag von kralle »

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.
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
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

Beitrag von af0815 »

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"
Ich kann jetzt nicht speziell helfen.
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).

Benutzeravatar
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

Beitrag von Zvoni »

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)

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;        
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

Code: Alles auswählen

SQLQuery.Database:=MyConnection;
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:
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.
Ist MariaDB, also Server-based Datenbank. Wird über Server-Name oder IP-Adresse+Port angesteuert.
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.

Antworten