Einzelnen Beitrag anzeigen

DualCoreCpu
(Gast)

n/a Beiträge
 
#43

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