Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mit welchen Datenbankkomponenten afangen? (https://www.delphipraxis.net/199194-mit-welchen-datenbankkomponenten-afangen.html)

mkinzler 10. Jan 2019 09:44

AW: Mit welchen Datenbankkomponenten afangen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Oder über die GUI

DualCoreCpu 10. Jan 2019 13:54

AW: Mit welchen Datenbankkomponenten afangen?
 
[/QUOTE]
Zitat:

Zitat von mkinzler (Beitrag 1423023)
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?

DualCoreCpu 10. Jan 2019 14:09

AW: Mit welchen Datenbankkomponenten afangen?
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

Zitat:

Zitat von Delphi.Narium (Beitrag 1423016)
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.

hoika 10. Jan 2019 14:17

AW: Mit welchen Datenbankkomponenten afangen?
 
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.

jobo 10. Jan 2019 15:06

AW: Mit welchen Datenbankkomponenten afangen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler (Beitrag 1423023)
Oder über die GUI

In welchem Menü finde ich das in DBeaver Community Edition? [/QUOTE]

Delphi.Narium 10. Jan 2019 15:28

AW: Mit welchen Datenbankkomponenten afangen?
 
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 ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Seite 5 von 5   « Erste     345   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz