AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mit welchen Datenbankkomponenten afangen?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit welchen Datenbankkomponenten afangen?

Ein Thema von DualCoreCpu · begonnen am 4. Jan 2019 · letzter Beitrag vom 10. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2      
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 9. Jan 2019, 21:08
Du gehst auf die Firebird Connection und drückst F3, damit öffenest Du einen leeren SQL Editor, trägst ein Table Create Statement und lässt das laufen. Danach kannst Du unter der Connection/Tabellen Deine neue Tabelle finden.

Hier ist Doku
https://firebirdsql.org/refdocs/lang...ate-table.html

Woher Du neue Verbindungen weißt? Versteh die Frage nicht. Du hast ein System auf deinem Rechner oder remote, mysql, firebird, postgres, ..
wählst das aus, baust die Verbindung auf, Treiber werden automatisch nachgeladen.
Gruß, Jo
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#2

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 08:42
Danke, so weit. Ich entnehme dieser Doku, das die Anweisung Create Table überladen ist, um mit unterschiedlichen Parametersätzen arbeiten zu können.

Ich habe jetzt diese SQL Anweisung:

SQL-Code:
CREATE TABLE mediadb (
   mediakind varchar(3) NOT NULL,
   author varchar(30) NOT NULL,
   mediatitle varchar(30),
   musictitle varchar(40)
   )
Für's Erste sollen die Felder:

mediakey für Medienart (CD,DVD,MC,LP)

author für Filmregisseur oder Musiker

title für Filmtitel oder Name des Mediums (Pink Floyd, Wish you
were here). Es gab mal eine Langspielplatte dieses
Musikers mit diesem Namen.

musictitle
für den Namen des einzelnen Musikstückes


reichen.

Da beginnt schon die später notwendige Schaffung der Normalform der Datenbank. Zuerst aber will ich überhaupt erst mal eine Datenbanktabelle haben.

Ich habe jetzt die Komponenten:

DataSource1

IBDatabase1 mit defaultTransaction = IBTransaction1

IBTransaction1 mit DefaultDatabse = IBDatabase1

IBSQL1 mit Database = IBDatabase1, Transaction =
IBTransaction1


IBDataSet1 mit Database = IBDataBase1 und Datasource =
DataSource1

und 4 DBEdit Komponenten auf meinem Formular, die mit DataSouce1 verbunden sind.

Noch immer aber lassen sich keine Felder mit den DBEDit Komponenten verbinden. Als DataBaseName in der Komponente TIBDatabase habe ich mein SQL-Script verwendet, das ich nach obiger Anleitung mit DBeaver erstellt habe.

Habe auch in IBSQL meine CREATE TABLE Anweisung noch mal rein geschrieben. Auch das führt nicht zum Erfolg.

Was muss ich da noch machen?

Geändert von mkinzler (10. Jan 2019 um 09:39 Uhr) Grund: Fehlerhaften Delpi-Tag durch SQL-Codetag ersetzt
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#3

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 08:58
Hast Du den DBEdits auch die zugehörigen Felder der Tabelle zugewiesen?

Meist DataField (oder so ähnlich) genannt. Du musst jedem dieser Felder eines Deiner im Create aufgeführten Felder zuweisen.

Die Querykomponente hat (vermutlich) eine Methode Open bzw. ein Attribut Active. Entweder im Objektinspektor Active auf true setzen, dann wird die Query beim Programmstart automatisch geöffnet oder "irgendwo" im Programmcode die Methode Open aufrufen.

Die Databasekomponente hat ebenfalls eine Methode zum Öffnen bzw. ein Attribut, dass Du im Objektinspektor setzen kannst. Auch hier musst Du für das Öffnen sorgen.

Dann muss Deine SQL-Komponente auch ein SQL haben, meist das Attribut SQL, im Objektinspektor für gewöhnlich als Stringliste mit 'nem Editor erreichbar. Da muss ein SQL rein, z. B.
Code:
select * from mediadb
Dieses SQL wird beim Öffnen der Abfragekomponente ausgeführt und sorgt dafür, dass die Datenbankkomponenten mit Inhalt gefüllt werden.

Um durch die Datenmenge scrollen zu können, solltest Du Dir noch 'nen TDBNavigator auf das Formular legen und den mit der DataSource verbinden.
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#4

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 14:09
Hast Du den DBEdits auch die zugehörigen Felder der Tabelle zugewiesen?
Klappt denn das, wenn ich dafür Quelltext schreibe? Im Objektinspektor geht das nämlich nicht und da ich noch keine Tabelle erzeugt habe, kann ich auch nicht Active im Objektinspektor einfach so auf true setzen.

Meist DataField (oder so ähnlich) genannt. Du musst jedem dieser Felder eines Deiner im Create aufgeführten Felder zuweisen.
Im Objektinspektor klappt das nicht, die möglichen Felder sind in der Combobox des OI nicht aufgeführt.

Die Querykomponente hat (vermutlich) eine Methode Open bzw. ein Attribut Active. Entweder im Objektinspektor Active auf true setzen, dann wird die Query beim Programmstart automatisch geöffnet oder "irgendwo" im Programmcode die Methode Open aufrufen.
Dann probier ich mal die Query Komponente.Mit der IBSQL geht es nicht, obwohl, ich sollte mal im Quelltext die Methode Open versuchen. Wenn nicht dann Query probieren. Da gibt es IBQuery und im Register dbGo --> SQLQuery.

Die Databasekomponente hat ebenfalls eine Methode zum Öffnen bzw. ein Attribut, dass Du im Objektinspektor setzen kannst. Auch hier musst Du für das Öffnen sorgen.
Das funktioniert gerade nicht.

Dann muss Deine SQL-Komponente auch ein SQL haben, meist das Attribut SQL, im Objektinspektor für gewöhnlich als Stringliste mit 'nem Editor erreichbar. Da muss ein SQL rein, z. B. [code]select * from mediadb
Dieses Attribut gibt es auch in IBSQL und da habe ich meine CREATE TABLE Anweisung schon drin stehen. Trotzdem will es nicht klappen.


Dieses SQL wird beim Öffnen der Abfragekomponente ausgeführt und sorgt dafür, dass die Datenbankkomponenten mit Inhalt gefüllt werden.

Um durch die Datenmenge scrollen zu können, solltest Du Dir noch 'nen TDBNavigator auf das Formular legen und den mit der DataSource verbinden.
Ok, das wäre dann wie aus früheren Datenbankanwendungen mit Delphi.
So sollte ich auch DBEdit und andere Datensteuerungskomponenten weiter verwenden können.

Die Verbindung zur Datenbank klappt auch noch nicht,obwohl ich mit meinem Delphi 10.3 auch Interbase mit installiert habe. Deshalb habe ich Firebird als Verbindung gewählt, weil das mit Interbase kompatiblel ist.


Auch wenn ich MS SQL Server statt Firebird wähle für die Verbindung, kann ich meine SQL Anweisung nicht ausführen und so dann auch keine Tabelle anlegen.

Das ist meine Unit:

Delphi-Quellcode:
unit UDBmedia;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls,
  IBX.IBSQL, IBX.IBDatabase, Data.DB, IBX.IBCustomDataSet;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    IBDatabase1: TIBDatabase;
    IBDataSet1: TIBDataSet;
    IBTransaction1: TIBTransaction;
    IBSQL1: TIBSQL;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit8: TDBEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  IBDataBase1.Open;
  IBDataSet1.Open;
  IBDataSet1.ExecSQL;
  IBSQL1.ExecQuery;
end;

end.
Mit diesem Quelltext erhalte ich nun eine

EIBDatabaseError Exception mit der Meldung unavailable Database

Warum kann ich die nicht einfach innerhalb meiner Anwendung anlegen, statt über solch komplizierten Umweg. In der DataSet Komponente ich doch schon ein Feldeditor da. Da brauchte ich doch dann nur noch die Fähigkeit der Komponente, eine solche Datenbanktabelle nicht nur, wenn schon vorhanden, zu lesen, sondern zu Beginn auch eine zu schreiben. Klar geht das nicht so einfach wegen der verschiedenen Datenbankformate. Aber die wiederum könnten doch als Beschreibung irgendwo stehen. Und mit der Datenbankkomponente mitgeliefert werden, dann würde eine Auswahlliste in der Komponente zur Entwurfszeit ausreichen, um das passende Datenbankformat dort auszuwählen, die Komponente legt die Tabelle dann gemäß dieser Auswahl an und fertig. So aber braucht es nun externe Tools, die aber genauso Speicherplatz brauchen. Und früher gab es mal die Datenbankoberfläche im Lieferumfang von Delphi mit dazu.

Geändert von DualCoreCpu (10. Jan 2019 um 14:37 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 14:17
Hallo,

Zitat:
Aaaalso, ich habe jetzt DBeaver installiert und damit eine Firebird Verbindung aufgebaut
Hast du denn jetzt auch schon eine Datenbank angelegt?
Wenn nicht: https://www.firebirdsql.org/pdfmanua...-creating.html

Zitat:
da ich noch keine Tabelle erzeugt habe
Dann leg dir doch erst mal eine Tabelle an, so wie oben beschrieben.
Wie bei vielen Windows-Programmen ist die rechte Maustaste dein Freund.
Heiko

Geändert von hoika (10. Jan 2019 um 14:33 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#6

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 15:28
Zuerst brauchst Du eine Datenbank. Ohne die ist alles weitere sinnlos!

Wenn Du die Datenbank hast, dann erstelle in der IDE eine Verbindung zu der Datenbank. Die meisten Datenbankkomponenten für die Verbindungsherstellung haben ein Attribut Active oder Connected. Das muss (erstmal) auf True gesetzt werden. Solange das nicht klapp, ist weitermachen sinnlos.

Wss bezweckst Du damit?
Delphi-Quellcode:
  IBDataBase1.Open;
  IBDataSet1.Open;
  IBDataSet1.ExecSQL;
  IBSQL1.ExecQuery;
Zuerst die Datenbankverbindung herstellen, ist ok.

Dann ein Dataset öffnen. Mag sein, was ist das hier konkret. Bitte vergib sprechende Namen, so dass wir hier im Quelltext daran nachvollziehen können, was gemeint ist. IBDataSet1 kann alles oder nichts sein.

Zuerst öffnest Du also IBDataSet1 und dann führst Du das SQL darin aus? Was möchtest Du, eine Datenmenge zur Anzeige und zum Editieren öffnen oder ein Datenbankstatement ausführen? Was bitte steht im SQL von IBDataSet1, so dass man nachvollziehen kann, was da passieren soll. Meiner Meinung nach aber entweder Open oder ExecSQL, so hintereinander erscheint mir das erstmal sinnfrei.

Was macht IBSQL1? Da ist doch das Create-Statement für die Tabelle drinne enthalten. Also erst die Tabelle öffnen, dann deren SQL nochmal separat ausführen und dann die Tabelle erstellen?

Das Create-Statement wird genau einmal benötigt: Wenn die Datenbank erstellt wurde, dann wird die Tabelle erstellt. Das solltest Du mit DBWeaver machen.

Ins FormCreate kommt dann noch das Database.Open und das DataSet.Open.

Im Objektinspektor kann man die Felder erst dann den DBEdit-Komponenten zuordnen, wenn man erstens erfolgreich die Datenbankverbindung in der IDE hat herstellen können und dann erfolgreich das Active der Query auf True setzen konnte. Es muss also eine Datenbankverbindung bestehen und eine vorhandene Tabelle / Abfrage geöffnet worden sein.

Bei geschlossener Datenbankverbindung und geschlossener Tabelle / Abfrage kann man im Objektinspektor aber auch einfach die Feldnamen eingeben. Man muss halt wissen, wie sie heißen und kann sich nicht drauf verlassen, dass die IDE es schon richten wird.

Zitat:
Ok, das wäre dann wie aus früheren Datenbankanwendungen mit Delphi.
jo, eigentlich hat sich da nicht wirklich viel geändert. Vorgehen wie vor 20 Jahren, nur mit deutlich moderneren und leistungsfähigeren Werkzeugen.

Also:

Zuerst Datenbank erstellen. (DBWeaver)
Dann Deine Tabelle erstellen, deren Create-Statement Du weiter oben schon gepostet hast. (DBWeaver)

Dann in der IDE einen TIBDatabase einfügen und darin eine Verbindung zu der Datenbank herstellen.
Dann in der IDE TIBQuery einfügen, die mit einem Selectstatement (Attribut SQL) versorgen (select * from mediadb).
Dann Active dieser Komponente auf True setzen.
Dann eine TDataSource aufs Formular und die mit der TIBQuery verbinden.
Dann ein DBGrid aufs Formular und das mit der TDataSource verbinden.
(Du solltest dann im DBGrid bereits die leere Tabelle zu sehen bekommen.)
Dazu ein TDBNavigator aufs Formular und den ebenfalls mit der TDataSource verbinden.

Kompilieren, Programm starten.

Es sollte nun ohne Fehlermeldung eine kleine Datenbankanwendung fertig sein, die eine leere Datenmenge anzeigt.

Im DBGrid solltest Du nun in der Lage sein, händisch Daten zu erfassen und per DBNavigator zu speichern, löschen, oder sonstwie durch die Daten zu navigieren.

Nach dem Beenden des Programmes und seinem Neustart, solltest Du die Daten sehen können, die Du bereits erfasst hast.

Wenn das erfolgreich funktioniert, kümmern wir uns um die DBEdits ...
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 09:03
Du solltest Dir vielleicht doch mal ein Datenbank Tutorial anschauen.

SQL bietet verschiedene Befehlsgruppen an
DDL = Data Definition Language
DML = Data Manipulation

usw.

Create Table ist ein DDL Statement. Es wird einmalig ausgeführt, z.B. in DBeaver.
Dann braucht man weils praktisch ist ein paar Testdaten, wir brauchen DML, also hier Insert Statements. Wieder in DBeaver wie gesagt per Insert Statement oder Editieren von Datensätzen, wie Du es von früher kennst. Am Ende hoffentlich in Deiner Anwendung selbst.

Also
- Create einmalig extern
- Insert so oft Du willst, extern
- Dann Verdrahtung der Komponenten in Delphi

Die SQL Kompo enthält dann nicht das Create Statement (Tabelle ist schon in der Datenbank), sondern ein Select Statement.
Code:
select *|<KommaseparierteFeldliste> from <meineTabelle>
Gruß, Jo
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 09:11
Hallo,
Zitat:
Wenn ich nun noch die Datentabelle schreiben könnte
Das lass erst mal weg und lege die Tabelle mit DBeaver an.
Wie das geht, steht in der Hilfe des Programmes.

Sollte es einen SQL-Editor geben, hast du dein SQL ja bereits:
CREATE TABLE mediadb (
mediakind varchar(3) NOT NULL,
author varchar(30) NOT NULL,
mediatitle varchar(30),
musictitle varchar(40)
)

Um ein SQL-Tutorial kommst du nicht rum.
Auch in diesem Forum gibt es mehrere davon.
Fang an zu lesen und bei Unklarheiten frage einfach.
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 09:44
Oder über die GUI
Angehängte Grafiken
Dateityp: png DBeaver_NewTable.PNG (11,2 KB, 18x aufgerufen)
Dateityp: png DBeaver_NewTable_NewColumn.PNG (25,5 KB, 9x aufgerufen)
Markus Kinzler
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#10

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 13:54
[/QUOTE]
Oder über die GUI
In welchem Menü finde ich das in DBeaver Community Edition?

Oder ist das in einer anderen GUI-Anwendung? In welcher?


So sieht meine DBeaver Oberfläche aus:
https://1drv.ms/f/s!Akh20VYLxLoYg0RqLA005iRYqCWz?

Geändert von DualCoreCpu (10. Jan 2019 um 14:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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