AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Arbeitszeiterfassung: Die Fortsetzung
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeitszeiterfassung: Die Fortsetzung

Ein Thema von MrSpock · begonnen am 22. Nov 2002 · letzter Beitrag vom 9. Dez 2002
Antwort Antwort
Seite 2 von 3     12 3      
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#11
  Alt 1. Dez 2002, 11:56
Hi, So nach langen umerhumtüfteln, hab ich es noch immer nicht ganz geschafft.

Ich weiss nicht, wie ich UpdateCalMark im Privaten Teil deklarieren soll!

Ich habe

UpdateCalMark : Boolean;

Wenn ich das habe, glaube ich, dass dann die Fehlermeldungen, die mit dem letzten Code zusammenhängen, auch weg sind.
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#12
  Alt 1. Dez 2002, 13:31
Hallo m-werk,

im zweiten Source Abschnitt meies letzten Postings habe ich ja eine Methode vorgestellt:

procedure TForm1.UpdateCalMark; Dort erkennst du, dass die Procedure UpdateCalMark eine Methode der Klasse TForm1 ist. Die Deklaration muss demnach lauten:

Delphi-Quellcode:
TForm1 = class(TForm)
    ...
  private
   { Private-Deklarationen }
    FirstTime : Boolean;
   [b] procedure UpdateCalMark;[/b]
    ...
  public
    { Public-Deklarationen }
  end;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#13
  Alt 1. Dez 2002, 20:28
Hi, darauf hätte ich auch selber kommen können. Das kommt davon, wenn man nicht genau nachdenkt, was man tut.

Ich habe jetzt leider ein anderes kleines problem:

Ich habe mir die Kalenderkomponenten auf meinen Komponentenordner, wo ich schon andere Komponenten auch drinn habe, hineinkopiert.

Dann bin ich auf Komponenten installieren gegangen, und der Kalender wurde hinzugefügt.

Dann habe ich den Kalender im Programm so eingebaut, wie du beschrieben hast und das hat auch funktioniert.
Wenn ich dann den PC ausschalte, und dann später wieder weitermache, ist zwar der Kalender drinn aber wenn ich das Programm dann starten möchte, kommt die Fehlermeldung:

[Fataler Fehler] Arbeitszeit.pas: Datei nicht gefunden: 'Calpnl.dcu'

Und der Cursor steht bei:

Code:
uses
  Windows, Messages, SysUtils,.......,Calpnl;
Ich muss dann wieder die Kalenderkomponenten neu installieren und dann gehts wieder.

Was ist da los?
Grüße, m-werk
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#14
  Alt 1. Dez 2002, 20:33
Weiters Hab ich noch zu den Eingabe und Übername-Buttons eine Frage:

Ist es nicht so, dass die Daten, die man eingibt automatisch in die DB gespeichert werden. Den Übernamebutton versteh ich ja noch aber Warum gibt es einen Eingabebutton?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#15
  Alt 1. Dez 2002, 21:10
Hallo m-werk,

wenn Delphi das Programm "linked", sucht es nach den DCU (delphi compiled unit) der Bibliotheken, die benötigt werden.

Wo überall gesucht wird, kannst du auf der Optionen Seite einstellen:

Tools|Umgebungsoptionen... Seite Bibliothek dort hinter Suchpfad die 3 Punkte anklicken und in das untere Editfeld des Dialogs Verzeichnisse den Pfad auswählen, in dem die DCU des Kalenders steht. Dann noch Hinzufügen anklicken und dann noch OK.

Dann sollte es funktionieren.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#16
  Alt 1. Dez 2002, 21:22
Hallo m-werk,

der Eingabebutton erzeugt einen neuen Eintrag für das Datum, das im Kalender angewählt ist. Wenn ein Eintrag für dieses Datum bereits existiert, wird dieser ggf. überschrieben:

Delphi-Quellcode:
procedure TForm1.btnEingabeClick(Sender: TObject);
var
   pickDate   : TDateTime;
    tag      : Integer;
begin
   with cal do
    begin
         if qrySelData.Locate('Datum',
                        EncodeDate(year,month,day), []) then
            if MessageDlg('Eintrag für diesen Tag existiert schon.'#10
                               +'Soll der Eintrag geändert werden?',
                                 mtConfirmation, [mbYes, mbNo], 0) = mrNo then
               exit
            else
               qrySelData.Edit
         else begin
            qrySelData.Append;
            qrySelDataDatum.Value := EncodeDate(year,month,day);
         end;
         ActiveControl := dbeStart
    end;
    btnPost.Enabled := True;
    btnCancel.Enabled := True
end;
Damit der Code funktioniert musst du noch einen weiteren Button namens btnCancel hinzufügen, der unter dem Button Übernahme steht und mit "Rückgängig" beschriftet ist. Damit kann der Nutzer die Eingabe abbrechen. Der Code für den Übernahme Button:

Delphi-Quellcode:
procedure TForm1.btnPostClick(Sender: TObject);
begin
   try
      qrySelData.Post;
      btnPost.Enabled := False;
      btnCancel.Enabled := False;
   except
    { Fehlermeldung }
   end;
end;
Und für den Abbrechen Button:
Delphi-Quellcode:
procedure TForm1.btnCancelClick(Sender: TObject);
begin
   qrySelData.Cancel;
   btnPost.Enabled := False;
   btnCancel.Enabled := False;
end;
Dem OnNewRecord Event von qrySelData weist du folgenden Code zu:
Delphi-Quellcode:
procedure TForm1.qrySelDataNewRecord(DataSet: TDataSet);
begin
   qrySelDataPersonalNummer.Value := frmLogin.PNr;
end;
Damit wird auch die Personalnummer automatisch gesetzt, denn die kennt der Benutzer ja nicht.

So, das soll es mal für heute sein.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#17
  Alt 4. Dez 2002, 21:08
Hi, das mit dem Kalender funktioniert jetzt.

Ich habe auch die anderen Codes so eingebaut wie du beschrieben hast.

Den letzten Code hab ich leider nicht verstanden, was dieser bewirkt.

Leider habe ich da ein Problem.

1. Ich kann in die Editfelder nichts eintragen. (Readonly ist auf False)
2. Wenn ich, bevor ich überhaupt was eintrage auf "Eingabe" klicke, kommt folgende Fehlermeldung:

qrySelData: Cannot modify a read-only dataset.

Ich hab mir alles nochmal angesehen, und konnte keinen Fehler entdecken.

Was hats da?

Nochwas möchte ich machen beim Login-Form.

Wenn der User sein PW eingibt, soll er mit der Enter-Taste zum Hauptmenü kommen. Ich habe schon dem EditFeld "ePasswort" bei Ereignisse den OnClick den Button "Login" zugewiesen aber das geht nicht.
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#18
  Alt 4. Dez 2002, 22:18
Hallo m-werk,

zunächst einmal musst du RequestLive bei qrySelData auf True setzen, dann hast du eine editierbare Datenmenge. Dann kannst du nach Betätigung des Eingabe-Schalters auch Werte in die DBEdit Felder schreiben.

Das letzte Codestück setzt das Feld Personalnummer bei jedem neu eingefügten Datensatz auf den Wert, den wir uns im Loginformular als die Personalnummer der Person gemerkt haben, die sich gerade eingeloggt hat. Wie gesagt, deine Mitarbeiter kennen ja ihre Personalnummer gar nicht, ist ja auch nicht nötig. Außerdem könnten sie bei manueller Eingabe aus Versehen die falsche Nummer eingeben und so z.B. deine Arbeitszeit eingeben , und das verhindert dieser Code.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#19
  Alt 4. Dez 2002, 22:39
Hallo m-werk,

nach Eingabe eines neuen Datensatzes soll der Kalender angepasst werden, damit auch für das neue Datum der Tag blau markiert wird:

Delphi-Quellcode:
procedure TForm1.qrySelDataAfterPost(DataSet: TDataSet);
begin
   UpdateCalMark
end;
Wenn der Mitarbeiter einen Tag im Kalender anwählt, soll aus der Datenbank gleich der dazugehörige Datensatz angezeigt werden:

Delphi-Quellcode:
procedure TForm1.calDateChange(Sender: TObject);
begin
   with cal do
   begin
      UpdateCalMark;
      qrySelData.Locate('Datum', EncodeDate(year,month,day), [])
   end;
end;
Bevor ein neue Satz endgültig übernommen wird, sind noch ein paar Prüfungen notwendig:

Delphi-Quellcode:
procedure TForm1.qrySelDataBeforePost(DataSet: TDataSet);
var
   hilf   : TDateTime;
begin
   if Trim(qrySelDataStart.AsString) = 'then
   begin
      ShowMessage('Ungültige Startzeit');
      ActiveControl := dbeStart;
      Abort
   end;

   if Trim(qrySelDataEnde.AsString) = 'then
   begin
      ShowMessage('Ungültige Endzeit');
      ActiveControl := dbeEnde;
      Abort
   end;

   if qrySelDataStart.Value > qrySelDataEnde.Value then
   begin
      hilf := qrySelDataStart.Value;
      qrySelDataStart.Value := qrySelDataEnde.Value;
      qrySelDataEnde.Value := hilf
   end;
end;
So, jetzt hast du bereits das Wichtigste geschafft.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#20
  Alt 8. Dez 2002, 18:27
Hi, bin erst jetzt dazugekommen, mir den Code genauestens unter die Lupe zu nehmen, da ich zur Zeit wenig Zeit habe.

Folgendes: Ich habe den Code jetzt eingegeben und kann jetzt auch Werte in die Editfelder schreiben.

Wenn ich jetzt aber auf irgendein Datum im Kalender klicke kommt folgende Meldung:

Key violation

Was bedeutet das und was sagt diese Fehlermeldung aus?

Weiters: wenn ich einen Wert eingebe, ist nichts blau im Kalender hinterlegt.

Im Datumsfeld (DBGrid) steht auch kein Datum drinn.
Wenn ich das Programm dann schließe, und wieder öffne, ist der Datensatz auch weg.
Grüße, m-werk
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:09 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