Autor Beitrag
Schens68
Hält's aus hier
Beiträge: 3


Delphi 2005
BeitragVerfasst: Fr 21.07.06 20:47 
Guten Abend,
ich benutze die VCL-Formularanwendung - Delphi für Win32.

Ziel:
Von der Unit Geschichte (TForm1) wird auf die Formulare Datenbank - Hinzufügen / Ändern / Löschen von Datensätzen(TForm2), Lernen (TForm3) und Wissenstest ((TForm4) verzweigt. In der Unit Geschichte wird die Datei "HISTORY.DAT" mit OpenDialog geöffnet bzw. neu erstellt und die Anzahl der Datensätze ausgelesen. Der Record lautet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
{ Dateistruktur }
Type THistory = record Satznummer       : integer;
                       Ergebnis         : string[100];
                       Beschreibung     : string[255];
                       Epoche           : string[100];
                       DetailStartDatum : Boolean;
                       DetailTag        : Boolean;
                       DetailMonat      : Boolean;
                       DetailEndeDatum  : Boolean;
                       DSkz             : String[1];
                   end;

THistoryDatei = File of THistory;

var   
History          : THistory;
Historydatei     : THistorydatei;
Historysatz      : THistory;


Problem:
In den "Units Datenbank, Lernen und Wissenstest" benötige ich Zugriff auf die Recordvariablen. Wie muß der Zugriff definiert lauten, damit ich im Formular Datenbank (TForm2) auf die Recordvariablen mit dem jeweiligen Datensatzinhalt von Formular Geschichte (TForm1) zugreifen kann.

Wer kann mir bitte helfen?

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 21.07.06 20:52 
user profile iconSchens68 hat folgendes geschrieben:
Wer kann mir bitte helfen?

Ich *meld* 8)

Du musst einfach nur die Unit Geschichte mit unter Uses aufnehmen.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Fr 21.07.06 20:53 
Du trägst ja die Units in eine der beiden Uses Klauseln ein. Du müsstest dann in den drei Units oben bei interface die Unit Geschichte in die uses Klausel einbinden. Für den Rest nimmst du dann am besten die Uses Klauseln bei implementation.

Der Hintergrund ist, dass es einfach nicht erlaubt ist, dass unit1 die unit2 bei der inteface-uses-Klausel einbindet und unit2 dies umgekehrt bei interface auch. Stattdessen muss ein Eintrag dann in die implemetation-uses-Klausel abwandern.

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 21.07.06 20:54 
Am besten du lagerst den record in eine Unit aus, welche du in beiden anderen Units einbindest. Alternativ mußt du halt die Unit1 im Implemtation-Abschnitt der Unit2 einbinden (wenn Unit2 im Interfcae von Unit1 eingebunden ist). Besser aber auslagern.

_________________
Markus Kinzler.
Schens68 Threadstarter
Hält's aus hier
Beiträge: 3


Delphi 2005
BeitragVerfasst: Sa 22.07.06 12:04 
Hallo,

vielen Dank für eure schnellen Reaktionen.

In der Unit Geschichte habe ich unter
"implementation
uses Datenbank;" und
in der Unit Datenbank habe ich unter
"impementation
uses Geschichte;"
eingetragen.

Aber irgendwie will das alles nicht so ganz funktionieren.

"Unit Geschichte"
Die Procedure für die erste Variablenübergabe sieht wie folgt aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
procedure TForm1.ButtonOeffnenClick(Sender: TObject);
begin
 Check := true;
 OpenDialog1.Filter     := 'Datendateien (*.dat)|*.dat';
 OpenDialog1.Options    := [ofCreatePrompt];
 OpenDialog1.Execute;
 Dateiname :=OpenDialog1.Filename;
 If Dateiname<>''
 then
  begin
   AssignFile(Historydatei,Dateiname);
   IF FileExists(Dateiname)
   then
    begin
     reset(Historydatei);
     Maxsatz := FileSize(Historydatei);
     LabelAnzahlDS.Caption := 'Es sind ' + IntToStr(FileSize(Historydatei)) + ' Datensätze verfügbar';
     if Maxsatz = 0
     then
      begin
{      Datei vorhanden aber ohne Datensätze
       Variablen leer setzen, damit in der Unit Datenbank die Felder
       einen definierten Inhalt besitzen
       Satznummer       := 0;
       Ereignis         := '';
       Beschreibung     := '';
       Epoche           := '';
       DetailStartDatum := false;
       DetailTag        := false;
       DetailMonat      := false;
       DetailEndeDatum  := false;
       DSkz             := '';     }

      end
     else
      begin
       Historysatz.Satznummer := Maxsatz;
       seek(HistoryDatei,Satznummer);
       read(HistoryDatei,Historysatz);
       Datenbank.TForm2.LabelDSAnzahl.Caption := Maxsatz;
       Datenbank.TForm2.EditEreignis.Text := Historysatz.Ereignis;
       Datenbank.TForm2.EditEpoche.Text := Historysatz.Epoche;
       Datenbank.TForm2.EditStartDatum := Historysatz.DetailStartDatum;
       Datenbank.TForm2.EditEndeDatum := Historysatz.DetailEndeDatum;
       Datenbank.TForm2.CheckBoxDetailDatum.Checked := Historysatz.DetailStartDatum;
       Datenbank.TForm2.CheckBoxDetailTag.Checked := Historysatz.DetailTag;
       Datenbank.TForm2.CheckBoxDetailMonat.Checked := Historysatz.DetailMonat;
       Datenbank.TForm2.CheckBoxDetailEnde.Checked := Historysatz.DetailEndeDatum;
       Datenbank.TForm2.MemoBeschreibung.Lines.Add := Historysatz.Epoche;
      end
    end
   else
    begin
     rewrite(Historydatei);
     LabelAnzahlDS.Caption := 'Es sind ' + IntToStr(FileSize(Historydatei)) + ' Datensätze verfügbar';
{    Datei nicht vorhanden und ohne Datensätze
     Variablen leer setzen, damit in der Unit Datenbank die Felder
     einen definierten Inhalt besitzen
     Satznummer       := 0;
     Ereignis         := '';
     Beschreibung     := '';
     Epoche           := '';
     DetailStartDatum := false;
     DetailTag        := false;
     DetailMonat      := false;
     DetailEndeDatum  := false;
     DSkz             := '';  }

    end;
  end;
end;


Bei Aufruf der Unit Datenbank über die

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.ButtonDatenbankClick(Sender: TObject);
var Formular : TForm2;
begin
 if Check = true
 then
  begin
   Formular := TForm2.Create(self);
   Formular.ShowModal;
   Formular.Free;
  end
 else
  begin
   LabelAnzahlDS.Caption := 'Bitte erst die Datei zur Datenbank öffnen';
  end;
end;


in der Unit Geschichte sollen die initialisierten Variablen im Formular Datenbank erscheinen.

Inhalt der Unit Datenbank:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
unit Datenbank;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    LabelDatenbankUeberschrift: TLabel;
    ButtonBeenden: TButton;
    LabelStartDatum: TLabel;
    LabelEndeDatum: TLabel;
    EditStartDatum: TEdit;
    EditEndeDatum: TEdit;
    GroupBoxDetail: TGroupBox;
    CheckBoxDetailDatum: TCheckBox;
    CheckBoxDetailTag: TCheckBox;
    CheckBoxDetailMonat: TCheckBox;
    CheckBoxDetailEnde: TCheckBox;
    LabelEreignis: TLabel;
    EditEreignis: TEdit;
    LabelBeschreibung: TLabel;
    MemoBeschreibung: TMemo;
    LabelEpoche: TLabel;
    EditEpoche: TEdit;
    ButtonDSEins: TButton;
    DSvorher: TButton;
    DSNaechster: TButton;
    DSletzter: TButton;
    ButtonDBAktuell: TButton;
    LabelDSAnzahl: TLabel;
    ButtonHinzufuegen: TButton;
    ButtonAendern: TButton;
    ButtonLoeschen: TButton;
    procedure ButtonBeendenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

{ Dateistruktur}

var
  Form2: TForm2;

implementation
uses Geschichte;
{$R *.dfm}

procedure TForm2.ButtonBeendenClick(Sender: TObject);
begin
 Close;
end;

end.


Bei der Compilierung erhalte ich bei
Zitat:
" Datenbank.TForm2.LabelDSAnzahl.Caption := Maxsatz;
...
Datenbank.TForm2.MemoBeschreibung.Lines.Add := Historysatz.Epoche;"
E2096 Methodenbezeichner erwartet
E2066 Operator oder Semikolon fehlt


Wie vermisse ich Turbo Pascal 7 - hier war alles einfacher! Da übernahm noch das Hauptprogramm die Steuerung!

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 22.07.06 12:53 
Wie sieht die Deklaration von THistorysatz aus?

_________________
Markus Kinzler.
Schens68 Threadstarter
Hält's aus hier
Beiträge: 3


Delphi 2005
BeitragVerfasst: Sa 22.07.06 14:14 
Die Deklaration von THistorysatz - Quelltext von Geschichte.pas

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
unit Geschichte;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ToolWin, ComCtrls;

type
  TForm1 = class(TForm)
    LabelUeberschrift: TLabel;
    ButtonDatenbank: TButton;
    ButtonBeenden: TButton;
    MemoDatenbanken: TMemo;
    LabelAnzahlDS: TLabel;
    OpenDialog1: TOpenDialog;
    ToolBar1: TToolBar;
    ButtonOeffnen: TButton;
    ButtonLernen: TButton;
    MemoLernen: TMemo;
    procedure ButtonLernenMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ButtonDatenbankMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ButtonOeffnenClick(Sender: TObject);
    procedure ButtonDatenbankClick(Sender: TObject);
    procedure ButtonBeendenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

    { Dateistruktur}
Type THistory = record Satznummer       : integer;
                       Ereignis         : string[100];
                       Beschreibung     : string[255];
                       Epoche           : string[100];
                       DetailStartDatum : Boolean;
                       DetailTag        : Boolean;
                       DetailMonat      : Boolean;
                       DetailEndeDatum  : Boolean;
                       DSkz             : String[1];    // Datensatzkennzeichen
                   end;

    THistoryDatei = File of THistory;

var
  Form1            : TForm1;
  History          : THistory;
  Historydatei     : THistorydatei;
  Historysatz      : THistory;
  Dateiname        : string;
  Check            : Boolean;
  Maxsatz          : Integer;
  Satznummer       : integer;
  Ereignis         : String[100];
  Beschreibung     : string[255];
  Epoche           : string[100];
  DetailStartDatum : Boolean;
  DetailTag        : Boolean;
  DetailMonat      : Boolean;
  DetailEndeDatum  : Boolean;
  DSkz             : String[1];

implementation

uses Datenbank;
{$R *.dfm}

procedure TForm1.ButtonBeendenClick(Sender: TObject);

begin
 if Check = true
 then
  CloseFile(Historydatei);
 Close;
end;

procedure TForm1.ButtonDatenbankClick(Sender: TObject);
var Formular : TForm2;
begin
 if Check = true
 then
  begin
   Formular := TForm2.Create(self);
   Formular.ShowModal;
   Formular.Free;
  end
 else
  begin
   LabelAnzahlDS.Caption := 'Bitte erst die Datei zur Datenbank öffnen';
  end;
end;

procedure TForm1.ButtonDatenbankMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   MemoLernen.Lines.Add('');
   MemoDatenbanken.Lines.Add('Über den Button Datenbank können Sie geschichtliche Ereignisse hinzufügen, ändern und löschen.');
end;

procedure TForm1.ButtonLernenMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   MemoDatenbanken.Lines.Add('');
   MemoLernen.Lines.Add('Über den Button Lernbereich können Sie durch die geschichtliche Ereignisse blättern.               ');
end;

procedure TForm1.ButtonOeffnenClick(Sender: TObject);
begin
 Check := true;
 OpenDialog1.Filter     := 'Datendateien (*.dat)|*.dat';
 OpenDialog1.Options    := [ofCreatePrompt];
 OpenDialog1.Execute;
 Dateiname :=OpenDialog1.Filename;
 If Dateiname<>''
 then
  begin
   AssignFile(Historydatei,Dateiname);
   IF FileExists(Dateiname)
   then
    begin
     reset(Historydatei);
     Maxsatz := FileSize(Historydatei);
     LabelAnzahlDS.Caption := 'Es sind ' + IntToStr(FileSize(Historydatei)) + ' Datensätze verfügbar';
     if Maxsatz = 0
     then
      begin
{      Datei vorhanden aber ohne Datensätze
       Variablen leer setzen, damit in der Unit Datenbank die Felder
       einen definierten Inhalt besitzen
       Satznummer       := 0;
       Ereignis         := '';
       Beschreibung     := '';
       Epoche           := '';
       DetailStartDatum := false;
       DetailTag        := false;
       DetailMonat      := false;
       DetailEndeDatum  := false;
       DSkz             := '';     }

      end
     else
      begin
       Historysatz.Satznummer := Maxsatz;
       seek(HistoryDatei,Satznummer);
       read(HistoryDatei,Historysatz);
       Datenbank.TForm2.LabelDSAnzahl.Caption := Maxsatz;
       Datenbank.TForm2.EditEreignis.Text := Historysatz.Ereignis;
       Datenbank.TForm2.EditEpoche.Text := Historysatz.Epoche;
       Datenbank.TForm2.EditStartDatum := Historysatz.DetailStartDatum;
       Datenbank.TForm2.EditEndeDatum := Historysatz.DetailEndeDatum;
       Datenbank.TForm2.CheckBoxDetailDatum.Checked := Historysatz.DetailStartDatum;
       Datenbank.TForm2.CheckBoxDetailTag.Checked := Historysatz.DetailTag;
       Datenbank.TForm2.CheckBoxDetailMonat.Checked := Historysatz.DetailMonat;
       Datenbank.TForm2.CheckBoxDetailEnde.Checked := Historysatz.DetailEndeDatum;
       Datenbank.TForm2.MemoBeschreibung.Lines.Add := Historysatz.Epoche;
      end
    end
   else
    begin
     rewrite(Historydatei);
     LabelAnzahlDS.Caption := 'Es sind ' + IntToStr(FileSize(Historydatei)) + ' Datensätze verfügbar';
{    Datei nicht vorhanden und ohne Datensätze
     Variablen leer setzen, damit in der Unit Datenbank die Felder
     einen definierten Inhalt besitzen
     Satznummer       := 0;
     Ereignis         := '';
     Beschreibung     := '';
     Epoche           := '';
     DetailStartDatum := false;
     DetailTag        := false;
     DetailMonat      := false;
     DetailEndeDatum  := false;
     DSkz             := '';  }

    end;
  end;
end;

end.


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 22.07.06 14:42 
Könntest du deinen Beitrag bearbeiten und den Quellcode in einem Delphi-Tag einschlie0en? Danke.

_________________
Markus Kinzler.