Refresh in modalen Formularen

Vorian

Grünschnabel
Ich schreibe z. Zt. an einer Arbeitszeiterfassung und habe ein Hauptformular das die 5 letzten Arbeitszeiten anzeigt. Wenn der Nutzer einen cmd drückt kann er seine Arbeitszeit beginnen und wenn er den anderen drück beendet er sie. Soweit klar.

Jetzt das eigentliche Problem wenn die Arbeitszeit begonnen wird zeige ich einen bestätigungsformular an und schreibe den Timestemp in die DB. Wenn sich jetzt das Formular schließt soll das Andere sich aktualisieren, damit der neue Arbeitsbeginn dann bei den letzten fünf Arbeitszeiten angezeigt wird. Jedoch wird mit frm_Main.refresh dies nicht durchgeführt. Allerdings wird die Form_Load() des Formulars ausgeführt, aber der Inhalt bleibt gleich.

Woran kann das liegen?

Ich bin für jeden tipp, der mich auf die richtige spur birngt dankbar.

mfg Vorian
 
um evtuelle Missverständnisse zu vermeiden, möchte ich noch hinzufügen, dass ich mit Visual Basic 6.0 arbeite.

Danke im Voraus für jede Hilfe.

mfg Vorian
 
Hi Vorian,

wenn die Daten (der Timestamp) in einer Datenbank gespeichert werden, dann mach doch bei der frm_Main in der Activate Prozedur eine Datenbankabfrage, welche die neuen Daten ermittelt und dann auch anzeigt.
 
An und für sich ist das eine gute Idee.
Aber ich habe im prinzip in der Form_Load() des HauptForms das alles schon geschrieben und müsste die nur nochmal ausführen. (refresh) Jedoch dann wird es nicht aktualisiert.
Was ja mein eigentliches Problem ist, da ich dies noch an einigen anderen Stellen ebenfalls machen muss. Hast du da evtl. eine Idee.

Trozdem Danke für deine Hilfe.

mfg Vorian
 
Hi,

dann füge doch in das Projekt ein Mobul ein und schreibe in dieses Modul eine Sub ( z.B. Sub Refresh() ) welche das aktuallisieren der Datensätze übenimmt.

An jeder Stelle des Programme (Form_Load, Form_Activate, ...) rufst Du dann einfach diese Prozedur auf.

Dann mußt Du den Quelltext nur einmal schreiben und bei Änderungen/Anpassungen auch nur einmal ändern.

Gruß Thomas
 
Moin,

das klingt gut. Hast du eine Idee woran aber das Problem was ich habe liegen kann, dass sich der Hauptfrom bei einem Aufruf der Methode es Forms ".Refresh" sich nicht aktualisiert ?

Kann man eigentlich überhaupt Änderungen/Akualisierungen an ein Formular senden, welches zur Zeit ein modales Formular anzeigt?

Ich befürchte nämlich, dass die Sub bspw. Refresh dass problem nicht löst, weil sich das HauptForm nicht aktualisiert.

Ich werde deine Idee mal versuchen. Mal schauen ob das geht.

Danke dir schon mal.

mfg Vorian
 
Bin mir da jetzt nicht sicher aber betrifft Refresh nicht nur die "optische" Aktualisierung
Der Inhalt von Steuerelementen oder Datenbankabfragen wird doch dadurch nicht angesprochen.

Was aber sicher geht ist das Du in der modalen Form den Inhalt von Steuerelementen einer anderen Form änderst.

Aber selbst wenn das nicht geht. Diese modale Form wird doch geschlossen und dann soll das Hauptfenster aktualisiert werden.

Wenn Du wie gesagt in der Activate Prozedur des Hauptfensters die Sub Refresh() aufrufst klappt es garantiert.
 
Hallo,

Es geht mir ja auch um die optische Aktualisierung. Ich hab nochmal über deine letzte Idee nachgedacht. Wenn ich eine Aktualisierungssub schreibe muss ich die Steuerelemente Formspezifisch ansprechen, was bedeuted, dass mir ein weiteres schreiben nicht erparrt beleibt, da ich an anderer Stelle eine andere Form_Load() anspreche um dort nat. andere Steuerelemente zu aktualisieren sind.

Das heist ich kann den Inhalt der derzeitgen Form_Load im HauptForm nicht in eine globale Sub verlagern.

Mit deinem letzten Beitrag hast du genau den Punkt getroffen. Ich Versuche mit dem modalen Formular die Arbeitszeiten bestätigen zu lassen, sowie der Nutzer einen cmd_Button drückt so wird in die DB geschrieben und dann die .Refresh aufgerufen anschließend das modale Form geschlossen und dann soll das hauptFrom sich aktuallisieren. Was ja aber nich passiert. :(

Im Debug-Mode wird die Form_Load() ja ausgefürt, aber es passiert optisch nichts.
Ich mache in der Form_Load() eine DB abfrage die die Daten ausliest und in die Steuerelemente einträgt. Bei ersten aufruf ist dies immer aktuell aber nach dem Arbeitsbeginn/-Ende nicht mehr, da der aktuelle Datensatz nicht angezeitg wird. In der DB ist er aber vorhanden, dort kann also nicht der Fehler sein

Ps.: Ich weiß dass dieses Probelem etwas komplex ist aber ich finde die Ursache einfach nicht. Es ist ja nicht so, dass ich Programmiertechnich keine Ahnung habe.

Danke schon mal
mfg Vorian
 
Mal angenommen Du hast für die Abfrage der Datenbank auf dem Formular das Datensteuerelement eingebunden.

Wenn Du das nun für verschiedene Forms benötigst, könntest Du im Modul doch einfach schreiben:

Code:
Sub Refresh()
    Me.Data1.Recordsource = "Select bla bla bla"
    Me.Data1.Refresh
End Sub

Dann würde automatisch egal in welcher Form jedes gebundene Steuerelelemnt mit den neuen Daten gefüllt.

Ansonsten wenn Du es zwingend für verschiedene Forms unterschiedlich brauchst, dann schreib es bei jeder Form in die Activate Prozedur der Form.

So bald dann die modale Form geschlossen wird, wird eine andere Form aktiviert und dann tritt auch das Activate Ereignis ein.

In der Form_Load Prozedur kannst Du es dann auch löschen. Ist sowieso komisch das nach dem Schließen der Bestätigung in der Hauptform das Load Ereignis ausgeführt wird. Das passt irgendwie nicht, die Form wird doch nur wieder aktiv aber nicht neu geladen !!
 
Schau Dir mal den Anhang an.

Ist zwar mehr als primitiv aber von der Funktion her so wie es bei Dir funktionieren müsste.

Die Startform zeigt alle gespeicherten Datensätze in einer gebundenen Tabelle an (die Datenbank bzw. Tabelle "arbeitszeit" besteht nur aus dem Feld "Datum" und "Uhrzeit", aber egal).

Klickt man jetzt auf den Button "Arbeitsbeginn" wird eine 2. Form modal angezeigt.

Diese Form enthält ein Textfeld "Datum" und ein weiteres für die "Uhrzeit" und zeigt beim Laden der Form das aktuelle Datum und die aktuelle Uhrzeit an.

Klickt man in dieser Form nun auf den Button "Speichern", wird in der Datenbank zuerst ein neuer Datensatz gespeichert und dann die Form geschlossen.

Die Startform wird wieder aktiviert (die Activate Prozedur ausgeführt) und der neue Datensatz ist sofort zu sehen.
 
Zuletzt bearbeitet:
Zurück