PDA

Vollständige Version anzeigen : Eingabe von MA-Nummern und deren Auswertung


PerRag
25.01.2008, 18:05
Hallo, ich hänge mal wieder :( fest und hoffe auf eure bewährte Hilfe.

Ich habe in einer Datenbank mehrere Button zum Öffnen von Unterformularen. Nun möchte ich, das sich das Unterformular nur nach Eingabe einer zugelassenen Mitarbeiternummer öffnet. Mit einer MA-Nr. klappt das auch prima (siehe Code am Ende). Nur sollen mehrere MA-Nr. Zugelassen werden. Was muss ich eingeben? Eine verlängerung der If-Abfrage mit Or strEingabe <> "1111" bringt nichts.
Weiterhin soll die eingegebene Ma-Nr. benutzt werden, um anzuzeigen, wer die letzte Änderung an einem Datensatz vorgenommen hat (in der Art: Me!LetzteÄnderungUser = Environ("UserName") nur halt statt des UserName die oben Abgefragte MA-Nr.

Danke für alle Vorschläge.

Hier der Code meiner Abfrage:

Private Sub Form_Open(Cancel As Integer)
Dim strFrage As String
Dim strMANR As String
strFrage = "Geben Sie Ihre Mitarbeiter-Nummer ein!"
strMANR = InputBox(strFrage)
If StrPtr(strMANR) = 0 Or strMANR <> "0815" Then
Cancel = True
DoCmd.OpenForm "Hauptmenü"
End If
End Sub

hcscherzer
25.01.2008, 19:01
Moin,
der 'OR' Operator hat die Wirkung dass ein zusammengestzter Ausdruck dann wahr ist, wenn mindestens einer der per 'OR' verbundenen Aussagen wahr ist.
Was willst Du genau?
Sollen vielleicht alle Nummern in einer Tabelle überprüft werden?
Oder nur bestimmte Werte, die auf ewig feststehen?
In letzterem Fall ist eine fest verdrahtete Prüfung wie Du sie vorschlägst angebracht.
Wenn es dynamischer zugeht, musst Du gegen die Tabelle prüfen, per Recordset oder per Domänenfunktion.

achtelpetit
25.01.2008, 19:19
Leg' doch die zulässigen Nummern in eine Tabelle und schau dann per Lookup, ob die Nummer zulässig ist.
Noch einfacher ist natürlich ein Dropdown mit allen zulässigen Nummern.
Die Frage ist, ob sich auch jeder brav identifiziert?

PerRag
26.01.2008, 06:58
Danke für die Tips.
Mein Problem ist halt, das die "festverdrahtete" Variante nur mit 2 Argumenten funktioniert, wenn ich vor das THEN noch ein oder mehr OR's setzte gehts nicht mehr.
Die Verlängerung der If-Abfrage, welche ich versucht habe heißt: If StrPtr(strMANR) = 0 Or strMANR <> "0815" Or strMANR <> "1111" Or strMANR <> "2222" Then

Und wie kann ich die Eingabe der MA-Nummer (strMANR) in bestimmte Tabellenfelder einfügen und zwar solange wie der Mitarbeiter angemeldet ist.

DAnke und ein schönes Wochenende

petbay
26.01.2008, 07:29
Hallo,

was bitte ist "StrPtr(strMANR)"?

Arne Dieckmann
26.01.2008, 07:42
@Peter: S. VBA Tipp: Inputbox (Klick mich) (http://www.dbwiki.de/wiki.php?title=VBA_Tipp:_Inputbox).


If StrPtr(strMANR) = 0 Or (strMANR <> "0815" And strMANR <> "1111" And strMANR <> "2222") Thenwäre einen Versuch wert.

petbay
26.01.2008, 10:13
@Arne: Vielen Dank.

@PerRag: Speichere die eingegebene MaNr doch in einer globalen Variablen o. Eigenschaft,
die sich erst durch erneuten Benutzerwechsel ändert.

PerRag
27.01.2008, 12:16
Hallo Peter,
danke für die Tips. Könntest du mir das mit der globalen Variablen anhand meines Problems etwas genauer schildern?
Also ich frage einen Wert in der Inputbox ab (z.B. "Eingabewert"). wie deklariere ich ihn dann zur globalen Variablen, so dass ich mit dem "Eingabewert" beliebige Tabellenfelder füllen kann und zwar solange bis jemand anderes diesen "Eingabewert" überschreibt (in meinem Fall: anderer Mitarbeiter mit seiner Nummer).

Sorry für die für euch vielleicht etwas trivialen Fragen, aber ich habe nur sporadisch mit Access zu tun

Viele Grüße Heiko

achtelpetit
27.01.2008, 12:28
Den Wert als globale Variable ablegen:
Public MitarbeiterNr as long (z.B.)
Diese Definition muß aber in einem Extra Modul abgelegt werden, nicht etwa bei einem Formular.
So steht Dir jetzt die variable MitarbeiterNr überall zur Verfügung.
Was mir aber auffällt: nachdem sich jemand identifiziert, hat kann doch jeder andere mit dieser Identifikation weiterarbeiten. Das hat nicht mal was mit bösem Willen zu tun, sondern mit schlichter Unkenntnis.

petbay
27.01.2008, 12:43
Hallo Heiko,

deklariere in einem Modul entweder eine globale Variable:
Option Compare Database
Option Explicit
Public sMaNummer As String ' wenn deine Tabfelder Text erwarten
Public iMaNummer As Integer ' wenn deine Tabfelder eineZahl erwarten
und nach einer Eingabe in deine Inputbox legst du den Wert der Variablen neu fest:
Dim strFrage As String
Dim strMANR As String
strFrage = "Geben Sie Ihre Mitarbeiter-Nummer ein!"
strMANR = InputBox(strFrage)
If StrPtr(strMANR) = 0 _
Or (strMANR <> "0815" And strMANR <> "1111" And strMANR <> "2222") Then
Exit Sub
ELSE
sMaNummer = strMANR
DoCmd.OpenForm "DeinNächstesFormular"
End If

Das ganze würde ich beim Click-Ereignis eines Buttons im Hauptformular einfügen,
dann kannst du schon da den Benutzer überprüfen, und nicht erst beim Öffnen des nächsten Formulars.

Jetzt kannst du deinen Tabellenfeldern, die die Mitarbeiternummer enthalten sollen mit:
Me!MaFeld = sMaNummer
den aktuellen Wert zuweisen, oder aber den Wert sMaNummer in einem ungebundenen(unsichtbaren?) Feld des Hauptformulars (z.B. txtMaNr) speichern,
und den Standardwert der Tabellenfeldern, die die Mitarbeiternummer enthalten sollen auf "=Formulare!HauptFormular!txtMaNr" festlegen.

Dazu muß dein Hauptformular jedoch immer geöffnet sein, du könntest es lediglich mit
Forms!HauptFormular.Visible = False
unsichtbar machen.


PS: Was die Sicherheit angeht, muß ich achtelpedit natürlich rechtgeben.

PerRag
27.01.2008, 19:47
Hallo Peter,

danke für die ausführliche Hilfe. Der Code mit der Inputbox und der Übergabe der MA-Nr funktioniert sehr gut. Danke.

Ich habe die Abfrage in das Hauptformular beim Click-Ereignis eingefügt. Ich fände es aber besser, wenn die Abfrage direkt im Formular erfolgen würde (bei der jetzigen Variante könnte ich das Hauptformular schliessen und das Unterformular direkt öffnen). Ich habe versucht den Code ins Formular bei "Beim Öffnen" zu übernehmen, ging aber nicht :(
Gibts da auch einen Dreh, den ich noch nicht gefunden habe?

Wegen den "Sicherheitsbedenken": die Datenbank wird wärend einer Schicht an 2 verschiedenen Rechnern von nur 2 Personen genutzt. Es gibt in dem Bereich keinen Personalwechsel. Nach der Schicht werden die Rechner heruntergefahren. Deshalb sehe hier kaum bedenken. Aber trotzdem vielen Dank für den Hinweis.

Heiko

petbay
28.01.2008, 08:40
Hallo Heiko,

wie speicherst du den Wert nun?

Wenn du eine globale Variable verwendest, kannst du nach Eingabe einer gültigen Mitarbeiternummer

1. Das nächste Formular öffnen u.

2. Das Hauptformular schließen

DoCmd.OpenForm "NächstesFormular"
DoCmd.Close acForm, Me.Name

PerRag
05.02.2008, 15:44
Hallo Peter,

noch einmal vielen Dank für die ausführliche Hilfe.
Es klappt jetzt alles sehr gut. Ich habe die globale Variable genommen und mache die Abfrage beim öffnen des Formulars.

VIELEN DANK für die Hilfe
Heiko