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 5 von 5   « Erste     345   
mkinzler
(Moderator)

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

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 10:44
Oder über die GUI
Miniaturansicht angehängter Grafiken
dbeaver_newtable.png   dbeaver_newtable_newcolumn.png  
Markus Kinzler
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#42

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 14: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 15:45 Uhr)
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#43

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 15: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 15:37 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 15: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 15:33 Uhr)
  Mit Zitat antworten Zitat
jobo

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

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 16:06
Oder über die GUI
In welchem Menü finde ich das in DBeaver Community Edition? [/QUOTE]
Miniaturansicht angehängter Grafiken
createtabledialogdbeaver.png  
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#46

AW: Mit welchen Datenbankkomponenten afangen?

  Alt 10. Jan 2019, 16: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
Antwort Antwort
Seite 5 von 5   « Erste     345   


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:59 Uhr.
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