Delphi kursusbeskrivelse

Kursusbeskrivelse 6. Første udvidelse af applikationen

Når man har udformet programmet, så det er i overensstemmelse med det foreslåede første udkast til et skærmbillede, er det på tide, at udvide programmet. Første udvidelse omfatter tilføjelse af tabellen med beskrivelser.

I forhold til første version af programmet er der tilføjet et panel, som indeholder felterne fra databasens abstract tabel.

Kontrolpanelet i øverste højre hjørne af skærmbilledet skal kunne bruges både i forbindelse med books tabellen og abstract tabellen. Eventhandlerne for de enkelte knapper skal derfor ændres, så der tages hensyn til, om der er fokus på books eller abstract. Dette styres af brugeren ved at aktivere de radioknapper, der er tilføjet til de to paneler.

Ovenstående tilstandsdiagram er et forsøg på at beskrive den relativt komplekse indre sammenhæng, som nu består i applikationen. Søgefunktionen til nøgleordssøgning er medtaget, selv om nøgleordene endnu ikke er tilføjet til programmet.

Udvalgte event-handlere fra den reviderede Form1:

procedure TForm1.Afslut1Click(Sender: TObject);
begin
Table1.Close;
Table2.Close;
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
Table2.Open;
AppFocus:= 0;
AppState0;
end;

procedure TForm1.FoersteClick(Sender: TObject);
begin
if AppFocus = 0 then
begin
Table1.First;
AppState0;
end
else
begin
Table2.First;
AppState5;
end;
end;

procedure TForm1.NyClick(Sender: TObject);
var
Next: integer;
begin
if AppFocus = 0 then
begin
Table1.Insert;
AppState1;
Table1Oprettelsesdato.Value:= Date;
end;
if AppFocus = 1 then
begin
Table2.Last;
Next:= Table2Beskrivelsesnr.Value + 1;
Table2.Insert;
Table2Bognr.Value:= Table1Bognr.Value;
Table2Beskrivelsesnr.Value:= Next;
AppState6;
end;
end;

procedure TForm1.FokusBogClick(Sender: TObject);
begin
FokusBog.Checked:= True;
AppFocus:= 0;
FokusBeskrivelse.Checked:= False;
AppState0;
end;

procedure TForm1.FokusBeskrivelseClick(Sender: TObject);
begin
FokusBeskrivelse.Checked:= True;
AppFocus:= 1;
FokusBog.Checked:= False;
AppState5;
end;

procedure TForm1.OKClick(Sender: TObject);
var
Msg: string;
i, j: integer;
begin
if AppState in [1, 2] then
begin
try
Table1.Post;
AppState0;
except
on E: EConvertError do
begin
Msg:= E.Message;
if pos('is not a valid date', Msg) > 0 then
begin
ShowMessage('Oprettelsesdato er ikke korrekt');
Oprettelsesdato.SetFocus;
end;
end;
on E: EDatabaseError do
begin
Msg:= E.Message;
if Msg = 'Key violation' then
begin
ShowMessage('Det valgte Bognr er allerede oprettet');
Bognr.SetFocus;
end;
if Msg = 'Field ''Bognr'' must have a value' then
begin
ShowMessage('Bognr skal være udfyldt');
Bognr.SetFocus;
end;
if Msg = 'Field ''Forfatter'' must have a value' then
begin
ShowMessage('Forfatter skal være udfyldt');
Forfatter.SetFocus;
end;
if Msg = 'Field ''Titel'' must have a value' then
begin
ShowMessage('Titel skal være udfyldt');
Titel.SetFocus;
end;
if Msg = 'Field value required. Field: ISBN-nr' then
begin
ShowMessage('ISBN-nr skal være udfyldt');
ISBNnr.SetFocus;
end;
end;
end;
end;

if AppState = 3 then
begin
if MessageDlg
('Ønskes bogen og alle tilhørende beskrivelser og nøgleord slettet?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
{ Først slettes tilhørende beskrivelser }
Table2.First;
while not Table2.EOF do
begin
Table2.Delete;
Table2.First;
end;
{ Så slettes bogen }
Table1.Delete;
AppState0;
end;
end;

if AppState = 6 then
begin
try
Table2.Post;
AppState5;
except
on E: EDatabaseError do
begin
Msg:= E.Message;
if Msg = 'Key violation' then
begin
ShowMessage('Det valgte Beskrivelsesnr er allerede oprettet');
Beskrivelsesnr.SetFocus;
end;
end;
end;
end;

if AppState = 7 then
begin
try
Table2.Post;
AppState5;
except
on E: EDatabaseError do
begin
Msg:= E.Message;
if Msg = 'Key violation' then
begin
ShowMessage('Det valgte Beskrivelsesnr er allerede oprettet');
Beskrivelsesnr.SetFocus;
end;
end;
end;
end;

if AppState = 8 then
begin
if MessageDlg
('Ønskes beskrivelsen og tilhørende nøgleord slettet?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
{ Beskrivelsen slettes }
Table2.Delete;
AppState5;
end;
end;

end;

procedure TForm1.SletClick(Sender: TObject);
begin
if AppFocus = 0 then
AppState3;
if AppFocus = 1 then
AppState8;
end;



Opdateret 18. april 1997