Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Printus123 am August 05, 2020, 13:19:00

Titel: Mithilfe von Dlookup auf mehrere Zeilen einer Spalte zugreifen
Beitrag von: Printus123 am August 05, 2020, 13:19:00
Hallo,
ich bin neu hier und in dem ganzen Thema VBA allgemein. Habe mich in den letzten Tagen versucht soweit wie möglich ohne Hilfe zurecht kommen aber nun bin am ratlos.
Folgendes Problem:
Ich arbeite gerade in einem Formular für Einarbeitungspläne für neue Mitarbeiter. Ich will nun das wenn eine Abteilung ausgewählt wird, in welcher der neue Mitarbeiter arbeitet, automatisch alle Verfahrensanweisungen eingefügt werden, welche für diese Abteilung notwendig sind. Dazu gibt es zum einem die Tabelle Abteilungen (T_Abteilung), wo jede Abteilung augelistet ist und eine ID zugewiesen bekommen hat. Dann gibt es die Tabelle Anweisungen (T_Anweisungen), wo alle Anweisungen mit Name, Titel, Revision... hinterlegt sind.

In dem Formular wähle ich über ein Kombinationsfeld die Abteilung aus. Mithilfe des DLookup Befehls greife ich auf dann die T_Anweisung zu. Dazu wurde für jede Anweisung ein eigener Befehl erstellt

If Kombinationsfeld22 = 90 Then         '//Schleiferei
    Me.Text61 = DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=507") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=507") & vbCrLf & _
        DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=553") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=553") & vbCrLf & _
        DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=707") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=707") & vbCrLf & _
        DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=559") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=559") & vbCrLf & _
        DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=705") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=705") & vbCrLf & _
        DLookup("Dateiname_A ", "T_Anweisungen", "Anw_ID=716") & "- " & DLookup(" Revision", "T_Anweisungen", "Anw_ID=716")
    End If

Falls sich nun eine Anweisung ändert oder hinzukommt, muss immer im VBA Code herumgespielt werden.
Meine Idee ist nun: In der Tabelle T_Anweisung jede Abteilung als Spalte hinzuzufügen und über eine Ja/Nein Abfrage die Anweisungen den Abteilungen zuzuordnen, sodas wenn sich Anweisungen änderen nur in der Tabelle neue Kreuze vergeben werden müssen.
Problem ist nun das sich mein neuer DLookup nachdem ersten "Ja-Kästchen" nicht weiter abfragt

For I = -2 To -1
If Kombinationsfeld66 = 90 Then
Me.Text68 = DLookup("Dateiname_A ", "T_Anweisungen", "Schleiferei=" & I) & "- " & DLookup(" Revision", "T_Anweisungen", "Schleiferei=" & I)
End If
Next I


Ich weiß das DLookup nur in einer Zeile sucht, aber gibt es da vielleicht eine Schleife oder einen anderen Befehl der mir weiterhelfen könnte?

Schonmal vielen Danke im Vorraus!











Titel: Re: Mithilfe von Dlookup auf mehrere Zeilen einer Spalte zugreifen
Beitrag von: MzKlMu am August 05, 2020, 13:55:02
Hallo,
das ganze Vorhaben ist in der Form schlicht und ergreifend ersatzlos überflüssig. Auch die Ja/Nein Felder sind für eine Datenbank fehl am Platz.
Du brauchst eine weitere Tabelle in der die Einarbeitungspläne der Abteilung in je einem Datensatz über die Schlüsselfelder der Tabellen zugeordnet werden. Das nennt sich dann n:m Beziehung.
Wenn jetzt ein neuer Mitarbeiter einer Abteilung zuordnet wird, hat man auch automatisch die für ihn zutreffenden Einarbeitungspläne. Soll dokumentiert werden, wann welche Einarbeitung erfolgt ist, so ist eine weitere Tabelle erforderlich mit einem Fremdschlüssel zum Mitarbeiter und einem FS zum Plan. Mit einem Feld für ein Datum.
Die letzte Tabelle wird mit einer einfachen Anfügeabfrage gefüllt.
VBA ist dazu zunächst mal mit keinem Buchstaben notwendig.
Nur die Anfügeabfrage wäre mit einer Zeile VBA zur Ausführung zu bringen.

Die Struktur der DB ist komplett zu überdenken.

Zeige bitte mal ein Bild des Beziehungsfensters. Beziehungen sind ja hoffentlich angelegt.
Titel: Re: Mithilfe von Dlookup auf mehrere Zeilen einer Spalte zugreifen
Beitrag von: crystal am August 05, 2020, 14:36:58
Hallo Printus123,

also da ist so einiges falsch gedacht...

1. Zunächst solltest du deinen Feldern sinnvolle Namen geben (statt Kombinationsfeld22 oder Text90)...
2. Mehrere Informationen mühsam mit VBCRLF in EIN Textfeld zu schreiben, ist grob falsch. Das kann (fast) nie mehr ausgewertet werden und ist allenfalls eine "Textleiche", zu einem beliebigen Zeitpunkt entstanden.

Du musst dein Datenmodell erheblich erweitern.

Du solltest z. B. eine Tabelle der Standard-Arbeitsanleitungen je Abteilung haben (deren Daten du neuen MAs einer Abteilung dann per VBA oder automatisch anhand eines durchdachten Datenmodells zuordnen könntest) und eben auch eine Abteilung-MA-Tabelle sowie eine MA-Anweisungs-Tabelle (mit einem sehr wichtigen Status wie "angelegt", "ausgehändigt" etc.).

Natürlich ist es völlig falsch, wie in deinem ersten Code-Schnipsel Attribute per VBA und eher mühsamen DLookup-Aufrufen (mit hart-codierten Referenzen) in ein mehrzeiliges Textfeld als Klartext zu kopieren und pflegbar ist das auch nicht, wie du ja selbst erkannt hast.

MzKlMu war mit seiner Antwort etwas schneller und hat mit seiner Kritik völlig Recht:
ZitatDie Struktur der DB ist komplett zu überdenken.

Bitte denke bei deinen Überlegungen immer an Relationen, also Beziehungen zwischen Tabellen und lerne etwas über den Sinn und Zweck relationaler Datenbanken.

Dein bisheriger Weg ist m. E. zum Scheitern verurteilt.

Grüße,
crystal

PS: Access ist nicht Excel.
Titel: Re: Mithilfe von Dlookup auf mehrere Zeilen einer Spalte zugreifen
Beitrag von: Printus123 am August 05, 2020, 15:40:51
Hallo
vielen Dank für eure Hilfe. Die Datenbank wurde nicht von mit erstellt, sondern ist seit mehreren Jahren in Betrieb. Sie funktioniert einwandfrei. Meine Aufgabe ist nur, dieses Formular zu erstellen. Bin halt kein Profi in Access und das ist meine Idee wie das funktionieren könnte.

Es ist möglich, das eine Anweisung für mehrere Abteilungen gültig ist. Außerdem ist eine "Abfrage" einer neuen Anweisung, zu welcher Abteilung diese gehört über Ja/Nein recht sinnvoll und einfach, da nicht jeder, welcher in der Datenbank arbeitet große Kenntnisse in der Funktion von Access hat.

Es soll bloß im Formular angezeigt werde, nachdem die Abteilung ausgewählt, auf welche Anweisung geschult werden muss. Die Eingabe und verwaltung der Schulungen ist bereits ewigkeiten vorhanden und funktionstüchtig. Es sollen bolß keine Anweisungen vergessen werden, wenn ein neuer Mitarbeiter kommt. Daher reicht es vollkommen, wenn die Anweisungen auf dem Formular in einem Textfeld ausgegeben werden.
Der Absatz zwischen den Anweisungen dient nur zur besseren Übersichtlichkeit und Strukturierung. Die Vergabe von andern Namen der Textfelder hätte ich gemacht, wenn alles fertig erstellt wäre;)

Da euch aber die Datenbank und meine Programmierkünste solch ein Dorn im Auge zu sein scheint könnt ihr mir gern Schritt für Schriit helfen, dies zu optimieren.
Alternativ würd ich mich auch über ein Code freuen, welcher mir bei meinem Problem hilft:)

Gruß
Printus
Titel: Re: Mithilfe von Dlookup auf mehrere Zeilen einer Spalte zugreifen
Beitrag von: DF6GL am August 05, 2020, 15:58:41
Hallo,

wenn die DB bisher einwandfrei funktioniert hat, dann gibt es nur einen einzigen Rat:


Zeige uns den Screenshot des Beziehungsfensters und vergiss alles (wirf alles heraus) , was Du bisher gemacht hast. 

Erkläre dann anhand der Tabellen- und Feldnamen genau, welche funktionellen Erweiterungen zu welchem Zweck gemacht werden müssen. (Formulare interessieren hier zunächst weniger).


Dann können wir uns eine Vorstellung der Situation machen und ggfls. konkrete Ratschläge geben.

Wenn die "einwandfrei funktionierende" DB alledings trotzdem strukturelle Fehler enthält, dann kann es auch passieren, dass wir das "ankreidenden" müssen und zum Umbau raten.

Ohne korrekten grundlegend normalisierten Tabellenaufbau artet die Geschichte dann in den meisten Fällen in Tricksereien aus.