Juni 21, 2021, 02:05:41

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Kominationsfeld

Begonnen von Raffnix2013, Juni 09, 2021, 22:06:21

⏪ vorheriges - nächstes ⏩

Raffnix2013

Guten Abend,
ich scheitere bereits bei der korrekten Fragestellung!
Es geht um die Funktion der Abhängigkeit eines Kominationsfeldes von einem anderen, innerhalb eines Formulares.
Die Daten kommen aus einer Tabelle mit 10 Zeilen und 50 Spalten.
Das erste Kombifeld selectiert Zeile n mit Spalte1. Im zweiten Kombifeld möchte ich nun nur die Spalten 1-50 sehen, von der im vorherigen Kombifeld gewählten Zeile.

Kann mir jemend eine Tip geben, bzw. gibt es evtl. einen Thread dazu?

MzKlMu

Gruß
Klaus

DF6GL

Juni 10, 2021, 08:50:45 #2 Letzte Bearbeitung: Juni 10, 2021, 08:54:49 von DF6GL
Hallo,


@Raffnix2013:

was ist das Ziel der Geschichte? Es sind hierfür keine zwei Kombifelder nötig.

ZitatIm zweiten Kombifeld möchte ich nun nur die Spalten 1-50 sehen

WO genau? Im Kombi-Textfeld oder im Kombi-Listenfeld?

Was geschieht mit der anschließend mit der Auswahl?

Einfachste Variante:


1) Kombifeld mit 50 Spalten und entspr. eingestellten Spaltenbreiten und Listenbreite.
Datensatzherkunft: Select Sp1, Sp2, Sp3, Sp4, ...... from tblTabelle order by Sp1


2) Kombifeld mit 1 Spalte und einer Spaltenbreite, die alle 50 Spalten-Daten anzeigen kann.
Datensatzherkunft:  Select  Sp1 & ";" & Sp2 & ";" &  Sp3 & ";" &  Sp4 & ";" &   ...... from tblTabelle order by Sp1


3) Anzeige der 50 Spalten mit zusätzlichen 49 Textfeldern und Steuerinhalt wie nachstenend:

Kombifeld ("cmbSp1") mit 1 Spalte und angepasster Spaltenbreite und Listenbreite.
Datensatzherkunft:   Select Sp1, Sp2, Sp3, Sp4, ...... from tblTabelle order by Sp1


Steuerelementinhalt bei
Textfeld1: = cmbSp1.Column(1)
Textfeld2: = cmbSp1.Column(2)
Textfeld3: = cmbSp1.Column(3)
Textfeld4: = cmbSp1.Column(4)
.
.
.
.
Textfeld49: = cmbSp1.Column(49)



Noch eine Alternative: 
Listenfeld, das alle (10) Zeilen mit den 50 Spaltenauf einmal anzeigt
oder
gleich ein Form, das an diese Tabelle gebunden ist und dessen DS mit einem Auswahlkombi bezgl.  Sp1 gefiltert wird..

Raffnix2013

Vielen Dank für Hilfestellung/Tipps besonders auf DONKARL´s Seite bisher.
Ich habe mich damit intensiv beschäftigt, aus Darstellungsgründen die Variablen anpassen müssen und komme aber mit den Beispielen nicht ganz zum Ziel:

Es sind nun 2 Tabellen:
Die erste Tab "SYSTEME" beinhaltet 1-n Einträge. Hier wird im ersten Kombifeld "ANLAGE"  eine Zeile gewählt und daraus ein Spalteninhalt "Syskurz" in das Formular "Verbrerf" eingetragen.Datenherkunft = SELECT SYSTEME.Syskurz, SYSTEME.SYSTEM, SYSTEME.BEZ FROM SYSTEME; Als Ereignis nach Aktualisierung habe ich diesen Code verwendet:
Private Sub ANLAGE_AfterUpdate()
On Error GoTo myError
Me!Komponente.RowSource = "SELECT Komp FROM Komponenten WHERE Syskurz = " & Forms![Verbrerf]![ANLAGE] 'Me!ANLAGE
    Me![Komponente].SetFocus
    Me![Komponente].Dropdown
myErrExit:
Exit Sub
myError:
MsgBox err.Number & " " & err.Description
Resume myErrExit
End Sub

Das zweite Kombifeld "Komponente" soll nun den Inhalt "Komp" der Tabelle "Komponenten" zeigen, deren Spalte ebenso die Information "Syskurz" enthält. Dazu habe ich bei Datenherkunft hiereingestellt.
SELECT Komponenten.Komp, SYSTEME.Syskurz FROM Komponenten INNER JOIN SYSTEME ON Komponenten.Syskurz = SYSTEME.Syskurz WHERE (((SYSTEME.Syskurz)=[Formulare]![VERBRERF]![ANLAGE]));

Nun wird aber nicht wie gewünscht der Inhalt von Kombifeld1 "ANLAGE" automatisch in Kombifeld2 "Komponente" gesetzt, sondern es öffnet sich ein Parametereingabe-Fenster - mit der Überschrift wie der Eintrag sein sollte :( .
Wenn ich dort die Info aus cbo1 von Hand eingebe sehe ich nur die korrekte Auswahl.
Warum gelingt mir der Automatismus nicht?

DF6GL

Hallo,

Zitatwird im ersten Kombifeld "ANLAGE"  eine Zeile gewählt und daraus ein Spalteninhalt "Syskurz" in das Formular "Verbrerf" eingetragen.

?? ??

Was wird da wo im Formular "Verbrerf" eingetragen?

Das Kombi "Anlage" erhält als Datensatzherkunft:

SELECT Syskurz, SYSTEM, BEZ FROM SYSTEME Order by Syskurz
Gebundene Spalte: 1
Spaltenanzahl: 3
Spaltenbreiten: 1;4;4    (wenn die erste Spalte (0) auch sichtbar sein soll)


und bei "Nach Aktualisierung"  wird das zweite Kombi eingestellt:

Private Sub ANLAGE_AfterUpdate()
On Error GoTo myError
Me!Komponente.RowSource = "SELECT Komp FROM Komponenten WHERE Syskurz = '" & Me!ANLAGE & "'"  'sofern "Syskurz" den Datentyp TEXT hat
    Me!Komponente.SetFocus
    Me!Komponente.Dropdown
myErrExit:
Exit Sub
myError:
MsgBox err.Number & " " & err.Description
Resume myErrExit
End Sub



Beide Kombis sind ungebunden. Was jetzt bei einer Auswahl im zweiten Kombi passieren soll, ist nicht bekannt.


Zitatder Inhalt von Kombifeld1 "ANLAGE" automatisch in Kombifeld2 "Komponente" gesetzt

Was meinst Du damit?


Zitatdie Info aus cbo1 von Hand eingebe

Was ist nun wieder "cbo1" ?

Raffnix2013

Hallo DF6GL,

Zitat von: undefined?? ??   Was wird da wo im Formular "Verbrerf" eingetragen?
Das Formular beinhaltet alle Kombifelder. Die Daten der Kombifelder füllen eine Tabelle zur weiteren Nutzung.
Das Kombi1 zeigt aus der Tabelle "SYSTEME" die Zeilen mit 3von5 Spalten. eine der spalten heißt "Syskurz" und nur diese spalte wird benutzt.  Dieser Inhalt soll als Auswahlkriterium für Kombifeld2 "Komponente" gelten. Im Grunde klappt das ja auch, nur das statt den Inhalt direkt auszuwerten, muss ich ihn sozusagen in der erscheinenden Parameterbox nochmals eingeben:
Sie dürfen in diesem Board keine Dateianhänge sehen.
Wenn ich das getan habe, (Pardon, cbo1 sollte Kombifeld1 lauten) wird die Auswahl in Kombifeld2 korrekt getroffen:
Sie dürfen in diesem Board keine Dateianhänge sehen.

ZitatBeide Kombis sind ungebunden. Was jetzt bei einer Auswahl im zweiten Kombi passieren soll, ist nicht bekannt.
- was meinst du damit?

Was muss ich noch tun, damit das Parameterfenster nicht mehr kommt - bzw. der Automatismus einsetzt?

DF6GL

Hallo,

ZitatWas muss ich noch tun, damit das Parameterfenster nicht mehr kommt

Alle Namen überprüfen.  Die Meldung kommt, wenn ein Feld, bzw. Feldname nicht existiert.


Lt. deinem Bild scheinen die Kombis gebunden zu sein. Damit funktionieren "abhängige Kombis" nicht.

Zudem sind vermutlich die Normalisierungsregeln nicht beachtet.


Lad die DB hier hoch, komprimiert/repariert und gezippt.

Raffnix2013

Guten Abend DF6GL,
danke nochmal für die Geduld....

Was bedeutet "Normalisierungsregel"?

Das mdb ist zu gross (6MB), um es hier anzuhängen.
Darf ich es an eine Mail senden? Falls ja, füge ich schon mal meine Emailadresse ins attachment.
Sie dürfen in diesem Board keine Dateianhänge sehen.

MzKlMu

Hallo,
den Anhang mit der Emailadresse habe ich gelöscht. In eigenem Interesse solltest Du in einem Forum keine Emailadresse anzeigen. So etwas macht man per PN.

Du solltest die DB erst mit dem Access Dienstprogramm "Komprimieren und reparieren" behandeln. Dann Zippen und dann hier veröffentlichen. Bitte mit wenigen anonymen Spieldaten.
Welche Access Version benutzt Du ?
Es könnte sein, dass die meisten Helfer hier MDB's gar nicht mehr öffnen können.

Was bedeutet "Normalisierungsregel"?Der Aufbau einer Datenbank erfordert die Einhaltung bestimmter Regeln zum Aufbau/Struktur der Tabellen. Eine Tabelle mit 50 Feldern ist schon mal höchst bedenklich. Hier ist wahrscheinlich die Aufteilung in weitere Tabellen notwendig. Die Tabellen müssen dann in Beziehungen gesetzt werden. Dieser ganze Vorgang, die datenbankkonforme Strukturierung der Tabellen nennt man "Normalisierung".
Und dazu gibt es diese Regeln.

Hier mal ein Einblick:
https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/

Und noch ein Tutorial:
https://www.access-tutorial.de/

Wenn Du eine funktionierende Datenbank haben willst, sind die Einhaltung dieser Regeln unerlässlich.
Access lässt sich auch nicht wie Excel oder Word intuitiv bedienen, Access muss man lernen.
Access ist auch kein Anwenderprogramm, sondern ein Entwicklungssystem um Datenbanken für den Anwender zu entwickeln.
Gruß
Klaus

Raffnix2013

Guten Abend MzKlMu,


Zitat von: MzKlMu am Juni 16, 2021, 21:13:24Du solltest die DB erst mit dem Access Dienstprogramm "Komprimieren und reparieren" behandeln. Dann Zippen und dann hier veröffentlichen. Bitte mit wenigen anonymen Spieldaten.
Welche Access Version benutzt Du ?
- hab ich gemacht, aber war zu gross. Ich habe nun einige Tabellen verkleinert - bleiben 2,5mb. Meine Version ist Access2013.
Sie dürfen in diesem Board keine Dateianhänge sehen.

Danke für den Hinweis wg. der Email - kommt nicht mehr vor. Danke auch für die Links zu den Tutorials - ich lese das wirklich, verstehe aber nur einen Bruchteil.
Ja, ich habe das bisher intuitiv und mit Hilfe vom Forum oder Google gehandhabt.
Zu meiner Verteidigung möchte ich anmerken: das mdb habe ich von einem verstorbenen Kollegen geerbt. Es wird von vielen genutzt, ist aber nicht gewerblich, und wird von mir in der Freizeit "gepflegt".
Die momentan nötige Handeingabe bildet ein Fehlerpotential (man kann zu einem SYSTEM eine falsche KOMPONENTE wählen), welches ich mit meiner Anfrage eliminieren wollte.
Das mdb erfüllt ansonsten alle Anforderungen - bis auf mein "PROBLEM". Wäre sehr cool, wenn wir das mit ein paar Tips lösen könnten.

MfG Matt

DF6GL

Juni 17, 2021, 20:24:43 #10 Letzte Bearbeitung: Juni 17, 2021, 20:55:17 von DF6GL
Hallo,

in welchem Formular soll denn nun diese Kombiauswahl stattfinden??


Und das VBA-Passwort solltest Du mitteilen oder entfernen.

Raffnix2013

Guten morgen,

ich lade es nun nochmals ohne VBA-Kennwort hoch.
Sie dürfen in diesem Board keine Dateianhänge sehen.
Evtl. als GAST anmelden, den Ersatzteil Verbrauch Button klicken und als ETNR die 397 nutzen.
Es geht um das Formular VERBRERF. Dort sind die Kombis System und Komponente relevant.
Danke für´s Interesse.

MfG Matt

DF6GL

Juni 18, 2021, 09:25:04 #12 Letzte Bearbeitung: Juni 18, 2021, 09:31:39 von DF6GL
Hallo,


nur zum Thema Kombifelder.  Andere Gesichtspunkte (Normalisierung, Beziehungen, eindeutige Benamsungen, Datentypen-Übereinstimmung, Ablaufsteuerung, fehlendes "Option Explicit" , Verwendung von "Sendkeys"  , usw.  kommentiere ich jetzt nicht weiter.  Wenn die DB im relevanten (realen)  Geschäfts-Umfeld eingesetzt wird, sollte die DB komplett überarbeitet, bzw. ganz neu erstellt werden.)


Ersetze die Ereignisprozedur(en) im Form "VERBRERF" wie folgt:



ZitatPrivate Sub ANLAGE_AfterUpdate()
On Error GoTo myError

Me!Komponente.RowSource = "SELECT KOMP FROM Komponenten WHERE Syskurz = '" & Me!ANLAGE & "'"

    Me!Komponente.SetFocus
    Me!Komponente].Dropdown
       
myErrExit:
Exit Sub

myError:
MsgBox Err.Number & " " & Err.Description
Resume myErrExit
End Sub



'---- entfällt komplett

Private Sub Komponente_AfterUpdate()
On Error GoTo myError

'Me.RecordSource = "SELECT Komp FROM Komponenten WHERE ([Syskurz] = '" & Me!ANLAGE & "'"
   
myErrExit:
Exit Sub

myError:
MsgBox err.Number & " " & err.Description
Resume myErrExit
End Sub





Raffnix2013

Juni 18, 2021, 10:23:18 #13 Letzte Bearbeitung: Juni 18, 2021, 10:43:59 von Raffnix2013 Grund: Nachtrag.
VIELEN DANK an DF6GL

das hat mir sehr geholfen!
Was dein Hinweis betriff: diese DB ist eine (seit Jahren  ;) ) Zwischenlösung die uns die Arbeit erleichtert. Die endgültige Lagerverwaltung wird von der Firma mit SAP realisiert. Trotzdem lese ich mich weiter durch.....

Noch einmal Danke ans Forum und speziell DF6GL und MzKlM

Gruss Matt
PS. ich wollte den im Seitenkopf erwähnten "sag Danke" Button und auch den "Thema gelöst" Button drücken, kann aber keinen der beiden finden. Nicht in meinen Posts, oder im Profil. Wo sind die?