Einzelnen Beitrag anzeigen

Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#19
  Alt 14. Feb 2003, 20:24
Hallo Gabi,

ich hab mir das Programm noch einmal genau angeschaut und habe zunächst einmal folgende Anmerkungen:

- der Hintergrund ist bei mir schwarz, weil du die Farbe des Hintergrundes auf clBackground gesetzt hast. Ich arbeite z.B. nicht mit der Windows Standardeinstellung und habe durch meine Einstellungen einen schwarzen Hintergrund, der aber nicht als Fensterfarbe benutzt werden sollte.

- die Art und Weise, in der du MDIChilds verwendest ist unüblich. MDI Anwendungen erlauben in der Regel das Öffnen von mehreren Fenstern desselben Typs (z.B. wie ein Texverarbeitungsprogramm). Du hast aber nur 2 Fenster, die es genau einmal gibt, deshalb ist MDI keine gute Wahl.

Das Problem hängt nun auch tatsächlich indirekt an der MDI Wahl. Ein MDI Fenster wird mit dem "Create" auch gleich angezeigt. Ein normales Fenster muss über "Create" erstellt und dann z.B. über ShowModal angezeigt werden.

Das Beschreibungsfenster erstellst du z.B. über:

TBeschreibungForm.Create(Self); Dadurch zeigt aber die Variable BeschreibungForm noch nicht auf das so erzeugte Formular. Es muss heißen:

BeschreibungForm := TBeschreibungForm.Create(Self); Dann kann auch Suchform korrekt auf BeschreibungForm zugreifen.

Ebenso sollte SuchForm erzeugt werden über:
Delphi-Quellcode:
procedure TBeschreibungForm.BtSuchenClick(Sender: TObject);
begin
    SuchForm := TSuchForm.Create(Self);
end;
Zum Thema DatabaseName: Du musst die Eigenschaft "DatabaseName" der beiden TTable Objekte auf den gewünschten Wert setzen. Da nicht auszuschließen ist (oder doch?), dass noch Tabellen oder Queries hinzukommen, kannst du alle TDBDataSet Objekte in einer Schleife setzen:

Delphi-Quellcode:
procedure TBeschreibungForm.FormCreate(Sender: TObject);
var
   compo   : Integer;
begin
   for compo := 0 to ComponentCount-1 do
      if Components[compo] is TDBDataSet then
      begin
         (Components[compo] as TDBDataSet).DatabaseName
                        := ExtractFilePath(Application.ExeName)+'DB';
         (Components[compo] as TDBDataSet).Open;
      end;
end;
Gibt es sicher keine weiteren Tabellen tuts auch:

Delphi-Quellcode:
procedure TBeschreibungForm.FormCreate(Sender: TObject);
begin
  TbNrBeschr.DatabaseName := ExtractFilePath(Application.ExeName)+'DB';
  TbTyp.DatabaseName := ExtractFilePath(Application.ExeName)+'DB';
  TbNrBeschr.Open;
  tbTyp.Open
end;
Wichtig ist, dass du die Eigenschaft "Active" der beiden Tabellenobjekte auf FALSE setzt, sonst kannst du die Eigenschaft DatabaseName nicht setzen. Ich habe deshalb in den beiden Code Beispielen mit "open" die Tabellen geöffnet.

Noch zwei Kommentare:

- mit der DBCombobox wählst du den Wert des Eintrages für den aktuellen Datensatz aus, d.h. wenn du hier einen Wert auswählst, änderst du den aktuellen Datensatz: willst du das wirklich?

- Im Suchenfenster suchst du ja nach einem Datensatz, der im Feld "Software_Hardware" den Suchwert enthält. Beachte aber, dass in diesem Feld nur Zahlen stehen, so findest du z.B. einen Datensatz über den Suchstring "6" aber nicht über "Elfried"

Puuuhh, das solls mal erst sein.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat