Juli 10, 2020, 15:49:30

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Formular Zähler für Aufruf setzen

Begonnen von herb54, November 08, 2018, 18:45:39

⏪ vorheriges - nächstes ⏩

herb54

Hallo,  evtl was ganz banales (aber das sind ja meistens die schwierigsten Dinge!):
Ich möchte, wenn ein Formular geöffnet wird einen fortlaufenden Zähler setzen und in einem Textfeld anzeigen. Es handelt sich um das Eröffnungsformular welches über eine Makro automatisch angezeigt wird (AutoExec). Ich dachte an ein neues Tabellenfeld "txtZähler"welches mit dem Formular verknüpft ist. Ist das über eine Public Function möglich dem Textfeld einen Wert zuzuweisen und welches Ereignis im Eigenschaftsdatenblatt müsste ich hier benutzen?
Gruß
Herbert

MzKlMu

Hallo,
bei jedem Öffnen des Formulars 1 hochzählen ?
Und was hats Du dann mit dem Zähler vor ?
Gruß
Klaus

herb54

Hallo Klaus,
ja genauso - d.h. wenn das Eröffnungsformular geöffnet wird sollte der Zähler sich um 1 erhöhen. Mit einem Button wäre das kein Problem - aber wie macht man, dass beim Öffnen eines Formulares der Zähler automatisch erhöht wird?
Es handelt sich hier um ein Formular welches eigentlich von den Mitarbeitern benutzt werden sollte und das Standardformulare (Quittungen, Mahnungen etc.) zum Ausfüllen und Ausdrucken bereit hält. Ich möchte nun wissen wie oft das Formular von den Mitarbeitern genutzt wird (leider gibt es diese Standardformulare immer noch als Wordausgaben - und dort schleichen sich dann beim Ausfüllen auch immer wieder Fehler ein). Mit der Zahl der Aufrufe meines Formulares hätte ich doch mal einen Überblick wie oft es genutzt wird im betrieblichen Ablauf.
Grüße
Herbert

Wurliwurm

Zitat von: herb54 am November 09, 2018, 15:13:41
Ich möchte nun wissen wie oft das Formular von den Mitarbeitern genutzt wird (leider gibt es diese Standardformulare immer noch als Wordausgaben - und dort schleichen sich dann beim Ausfüllen auch immer wieder Fehler ein). Mit der Zahl der Aufrufe meines Formulares hätte ich doch mal einen Überblick wie oft es genutzt wird im betrieblichen Ablauf.

Das artet zwar schon wieder in Richtung Gefummel aus, aber man könnte im Formularereignis form_load() eine Routine aufrufen, welche irgendwo eine Hilfstabelle inkrementiert, so nach der Art
"UPDATE tblZaehler SET Aufrufe=Aufrufe+1;", vielleicht auch eine Protokollierung mit "INSERT INTO" und Zeitstempel. Statt der Datenbanktabelle könnte man auch in eine Textdatei wegschreiben.

MzKlMu

Hallo,
ich würde dazu eine eigene Tabelle anlegen (tblFormAufrufe) darin ein Feld (Aufrufzähler) hochzählen. Das sieht dann so aus:
Private Sub Form_Load()
    CurrentDb.Execute "UPDATE tblFormAufrufe SET tblFormAufrufe.AufrufZähler = " _
                      & " Nz(DMax('Aufrufzähler','tblFormAufrufe'),0)+1", dbFailOnError
End Sub

Den 1. Datensatz mit Zähler 0 musst Du einmalig von Hand anlegen.
Gruß
Klaus

herb54

Hallo zusammen,
das Ganze funktioniert einwandfrei. Ich musste allerdings den ersten Datensatz auf Zähler = 1 stellen. Allerdings versteh ich die VBA Anweisung nicht so ganz - das muss ich mir mal ganz genau "durchleuchten". Ich denke, da kommt vielleicht noch eine Frage. Auf jeden Fall funktioniert es einwandfrei! Und somit erstmal vieeeelen Dank!
Gruß
Herbert

herb54

Hallo Klaus,
sorry, ich kenne DMax nicht, daher hier meine Frage:
Was ist der Unterschied zwischen DomMax und DMax?
DomMax gibt normalerweise den Datensatz zurück der den größten Wert eines Tabellenfeldes für ein Kriterium eines anderen Feldes enthält der gleichen Tabelle zurück mit folgender Syntax:

DOMMAX(Tabellenfeld dessen größter Wert gesucht wird;"Tabelle";"Kriterienfeld")
Bei Textfeldern einfaches Anführungszeichen bei Tabelle und Kriterienfeld
Bei Zahlenfeldern doppeltes Anführungszeichen bei Tabelle und Kriterienfeld

Das kann dann mit DMax nix zu tun haben oder (schon wegen der Anführungszeichen)???
Grüße
Herbert

MzKlMu

November 10, 2018, 17:28:21 #7 Letzte Bearbeitung: November 10, 2018, 17:49:54 von MzKlMu
Hallo,
DMax und DomMax ist exakt das Gleiche.
DomMax ist die eingedeutsche Version der SQL/VBA Funktion DMax.
Innerhalb der deutschen Oberfläche muss auch statt des Kommas das Semikolon verwendet werden.
Gruß
Klaus

herb54

Hallo Klaus,
super vielen Dank - wieder was gelernt! Und das mit den einfachen Anführungszeichen kommt von den doppelten die schon vor der Klammer " Nz(DMax...    stehen???

Gruß
Herbert

MzKlMu

November 10, 2018, 17:45:20 #9 Letzte Bearbeitung: November 10, 2018, 18:04:13 von MzKlMu
Hallo,
wenn innerhalb eines Srings der in die Az (")  eingeschlossen wird, noch mal Az vorkommen, so muss das einfache Az (Hochkomma ') verwendet werden, oder es müssen die Az verdoppelt werden, was ich persönlich aber völlig unübersichtlich finde.
Wenn Du z.B. eine Feldzuweisung machen würdest, ist das Az zu verwenden.
Me.Formularfeld = Nz(DMax("Aufrufzähler","tblFormAufrufe"),0)+1

Das & " Nz .... kommt nur von dem Zeilenumbruch der VBA Zeile.
Das kann auch in einer Zeile geschrieben werden, dann sieht das so aus.
CurrentDb.Execute "UPDATE tblFormAufrufe SET tblFormAufrufe.AufrufZähler = Nz(DMax('Aufrufzähler','tblFormAufrufe'),0)+1", dbFailOnError
Dann ist es aber zur breit und es wird unübersichtlich.

Gruß
Klaus

herb54

Hallo Klaus,
alles klar! Vieeelen Dank für deine Hilfe!!
Grüße
Herbert

herb54

Mai 13, 2020, 16:42:09 #11 Letzte Bearbeitung: Mai 13, 2020, 17:40:43 von herb54
Hallo zusammen,
der vorher beschriebene Aufrufzähler hat bisher super funktioniert. Jetzt zeigt mir das Zählerfeld jedoch nur noch "0" an und die Db.Execute wird nicht ausgeführt. dbFailOnError zeigt den Wert 128 an. Woran kann das liegen?
Kann das sein, dass da nur bis zu einem bestimmten Wert hochgezählt wird und dann funktioniert es nicht mehr bzw. wird die Fehlermeldung 128 ausgegeben? Wenn ich das Zählerfeld manuell wieder auf 1 stelle funktioniert der Zähler wieder.
Grüße
Herbert

Maxel

ZitatdbFailOnError zeigt den Wert 128


Was soll das bedeuten?

Falls Du eine Fehlernummer meinst, einen Fehler 128 kenne ich nicht.
Gruß
Maxel

MzKlMu

Hallo,
128 ist die Konstante für dbFailOnError und hat mit einem Fehler nichts zu tun.
Man könnte auch schreiben:
.... +1", 128
Das ist das Gleiche.
Gruß
Klaus

herb54

Hallo Klaus,
was bedeutet denn 128? Wir da nur bis zu einem bestimmten Wert hochgezählt?

Grüße
Herbert