CREATE DATABASE datenbank [GELÖST]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

CREATE DATABASE datenbank [GELÖST]

Beitrag von Swirl »

Habe für die Datenbankcracks eine - wie ich meine - relativ einfache Frage.
Wie erzeuge ich eine Datenbank innerhalb eines Programms? Normalerweise
existiert die zu benutzende Datenbank ja bereits; ich habe sie eingangs auf
der Kommandozeile erzeugt, kann dann unter Lazarus in der MySQLConnection
den Namen eintragen und dann Connected auf True setzen.

Was mache ich aber, wenn ich die Datenbank erst im Programm erzeugen
möchte?

Besten Dank im Voraus,
Michael
Zuletzt geändert von Swirl am Mo 25. Sep 2023, 14:17, insgesamt 1-mal geändert.
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

LazarusFuchs
Beiträge: 16
Registriert: Mo 19. Aug 2013, 22:28

Re: CREATE DATABASE datenbank

Beitrag von LazarusFuchs »

Für Firebird und Zeos gibt es Tutorials dazu.

https://lazarus.intern.es/tutorial_fire ... eos_1.html
https://lazarus.intern.es/tutorial_fire ... eos_2.html

Dort wird das Anlegen im Programm erläutert. Mit anderen Datenbanken funktionieren die dort angeführten SQL-Dateien genauso. Man muss herausfinden, wo diese SQL-Dateien ausgeführt werden können. Im Bespiel 2 wird die EXE-Datei mitgeliefert, so dass man damit experimentieren kann. Datenbank braucht nicht installiert werden, die wird als Embedded mitgeliefert.

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank

Beitrag von Swirl »

Besten Dank LazarusFuchs für die Prompte Antwort.

Ich kann aber in den zwei Kapiteln leider keine Hinweise zur Lösung meines Problems finden.
Ich möchte jetzt auch die Zeos-Komponenten nicht installieren. Und zu Firebird: ich habe
vergessen anzumerken, dass ich mit MySQL arbeite.

Falls jemand mir einen Hinweis in Verbindung mit der Komponente TMySQLConnection
geben kann, wäre ich sehr dankbar.

Gruß,
Michael
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: CREATE DATABASE datenbank

Beitrag von MmVisual »

Man muss sich mit Host/Port/User/Password beim MySQL anmelden. Anschließend kann man mit einer Query den Befehl "CREATE DATABASE <Name der Datenbank>" ausführen. Danach kann man die Tabellen erzeugen mit "CREATE TABLE ...".
Um eine Datenbank erzeugen zu können muss der User die entsprechenden Rechte besitzen, die man zuvor beim MySQL einstellen muss.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank

Beitrag von Swirl »

Hallo MmVisual,

damit kommen wir der Sache schon näher.
wie setze ich aber...
Man muss sich mit Host/Port/User/Password beim MySQL anmelden
...um?

Vielleicht ein/zwei Zeilen Code zu meinem Verständnis?

Gruß,
Michael
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: CREATE DATABASE datenbank

Beitrag von MmVisual »

Das macht man in der Komponente:
Bild1.png
Bild1.png (71.48 KiB) 2987 mal betrachtet
Ich selber nutze Zeos, aber mit SQLDB geht das sicher auch / identisch.

Dann so etwas z.B.:

Code: Alles auswählen

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  MySQL80Connection1.ExecuteDirect('CREATE DATABASE ...');
end; 
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank

Beitrag von Swirl »

Ja, aber wie?

solange ich in der Connection-Komponente den Datenbanknamen nicht eingetragen habe
(da er zur Designzeit ja noch nicht existiert), kann ich sie nicht Connected True schalten.

Und eine SQL-Statement kann ich somit auch noch nicht absetzen.

Ein paar Zeilen Code wären schon nett :)

Gruß,
Michael
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: CREATE DATABASE datenbank

Beitrag von MmVisual »

Es ist schon ein paar Jahre her, ja stimmt, man braucht eine Datenbank um sich überhaupt verbinden zu können. Das sollte dann gehen:

Code: Alles auswählen

      dbTest.Database := 'information_schema';
      dbTest.Catalog := dbTest.Database;
      q.SQL.Text := 'CREATE DATABASE IF NOT EXISTS ' + edDatabase.Text;
      q.SQL.Add(' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci');
Die Eigenschaft "Catalog" ist etwas was Zeos braucht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank

Beitrag von Swirl »

Hallo,

habe in der Connection von HostName bis UserName alles eingetragen.
Dann mit ExecuteDirect versucht, die Datenbank anzulegen. Leider...
Database connect string (DatabaseName) not filled in!.
Und wie gesagt: ZEOS nutze ich nicht.

Also leider kein Erfolg
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: CREATE DATABASE datenbank

Beitrag von MmVisual »

'information_schema' als DatabaseName geht nicht?
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank

Beitrag von Swirl »

Hallo MmVisual,
'information_schema' als DatabaseName geht nicht?
Das war's dann! information_schema kann wie jede andere Datenbank
zum Connecten genommen werden. Ich nutze dafür db_dummy, die
ich vorher leer angelegt habe. Mit der aktiven Verbindung zu db_dummy
kann ich dann das gewünschte CREATE DATABASE ... ausführen.

Code: Alles auswählen

  MySQL80Connection1.DatabaseName := 'db_dummy'; // Rest in der Komponente festgelegt
  MySQL80Connection1.Connected:=True;
  MySQL80Connection1.ExecuteDirect('CREATE DATABASE neue_datenbank');
  MySQL80Connection1.ExecuteDirect('USE neue_datenbank');
  MySQL80Connection1.ExecuteDirect('CREATE TABLE kunden (kunde_id int(11))')
  usw...       
Besten Dank!
Zuletzt geändert von Swirl am Mo 25. Sep 2023, 14:30, insgesamt 2-mal geändert.
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: CREATE DATABASE datenbank [GELÖST]

Beitrag von MmVisual »

information_schema ist immer da nach der Neuinstallation von MySQL, die db_dummy nicht. Daher besser information_schema verwenden.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Swirl
Beiträge: 98
Registriert: Fr 7. Aug 2015, 14:05
OS, Lazarus, FPC: Win 10/11/ Mint 21.3 / Lazarus 30 / FPC 3.2.2
CPU-Target: x86_64, ARM Cort.-A7
Wohnort: Schwerte NRW

Re: CREATE DATABASE datenbank [GELÖST]

Beitrag von Swirl »

Ach - deshalb hast Du die genommen. Gut zu wissen.
=> Mint 21.3 “Virginia” - Win 10/11 - Lazarus 3.0 - FPC 3.2.2

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: CREATE DATABASE datenbank [GELÖST]

Beitrag von charlytango »

Swirl hat geschrieben:
Mo 25. Sep 2023, 10:07
Wie erzeuge ich eine Datenbank innerhalb eines Programms?
ich will dir da nicht in deine Konzeption dreinreden und kann nur aus meiner Perspektive berichten.

Klar kann man eine Datenbank in MySQL/MariaDB mit den genannten Strategien auch aus dem Programm heraus anlegen. Dazu muß man aus meiner Sicht gewichtige Gründe haben, denn die Rechte zum Erstellen/Löschen von DBs packe ich nicht in eine ClientApplikation.
Das Rechtemanagement mache ich direkt auf dem DBMS, das hat imho im Programm nichts verloren.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
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: CREATE DATABASE datenbank [GELÖST]

Beitrag von af0815 »

charlytango hat geschrieben:
Mo 25. Sep 2023, 19:09
Klar kann man eine Datenbank in MySQL/MariaDB mit den genannten Strategien auch aus dem Programm heraus anlegen
Ich stimme da mit CharlyTango überein, das man das normalerweise nicht macht. Ich verwende einen Satz Skripts, die ich für eine neue Installation ablaufen lasse, damit kann ich die Rechte setzen und auch Tabellen mit Stammdaten auch gleich erzeugen.

Das einzige wo ich die Datenbank "on the fly" erzeuge ist mit Sqlite für Puffertabellen, wenn ich Daten lokal vorhalten muss, damit die Applikation auch ohne Verbindung laufen kann. Wie gesagt der einzige Fall, da kann man bei einer lokalen Datenbank aber auch nicht mehr soviel mit Security machen - ja ich weis - spezielle SQLite Versionen können das.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten