Hallo,
ich habe schon wieder eine Frage: Ich habe ein Formular Geräte mit u.a. einem Kombinationsfeld namens Typ. Je nachdem was in Typ ausgewählt wird (z.B. PC, Monitor etc) soll ein anderes Unterformular (PC, Monitor etc) aufgehen. Die entsprechenden Tabellen (PC, Monitor etc.) haben alle das Zahlenfeld Barcode über das sie mit einer 1:1-Verknüpfung mit der Tabelle Geräte verknüpft sind. Das ganze soll verhindern, daß ich eine riesengroße Tabelle mit allen Feldern aus Geräte, PC, Monitor etc erstellen muß.
Ich denke, ich brauche auf dem Formular Geräte ein Feld, das ich dann per VBA alternativ mit den Unterformularen bestücke. Aber wie geht das und welches Feld brauche ich da? Und wie mache ich ein normales Formular zu einem Unterformular?
Vielen Dank im Voraus für Eure Hilfe
Beate1953
			
			
			
				HAllo,
ich befürchte, Du befindest Dich auf einem Holzweg, der zu einem Abgrund führt...
ZitatDie entsprechenden Tabellen (PC, Monitor etc.) haben alle das Zahlenfeld Barcode über das sie mit einer 1:1-Verknüpfung mit der Tabelle Geräte verknüpft sind. Das ganze soll verhindern, daß ich eine riesengroße Tabelle mit allen Feldern aus Geräte, PC, Monitor etc erstellen muß.
Da fehlt es eklatant an der Normalisierung der Daten/Tabellen. Wenn diese Basis nicht in Ordnung ist, brauchst Du an Formulare noch gar nicht denken.
Siehe u. st. Links 1 und 1a.  (Du kannst auch weiterhin Googlen nach "normalisierung"...)  Wenn Du diese Regeln dann nicht beachtest, wirst Du keinen Erfolg haben. Ich empfehle Dir, bevor Du weitermachst, Dich intensiv mit den Grundlagen einer relationalen DB (-->Access) auseinanderzusetzen, z. B. mittels Tutorials oder auch einem Buch...
			
 
			
			
				Hallo,
also ich muss da etwas Einspruch erheben. Ich finde das Datenmodell mit den 1:1 Beziehungen so korrekt.
Die Geräte haben ja völlig unterschiedliche Eigenschaften. Eine Tabelle für die Geräte würde viele leere Felder bedeuten. Ein Monitor hat eine Auflösung und Diagonale und eine PC den internen Speicher und die Taktfrequenz. Die 1:1 Beziehungen sind ja dann gerade die geforderten Normalisierungsschritte.
			
			
			
				Hallo Klaus,
naja, m. E ist 1:1 nicht korrekt...
Würde dazu eher 1:n sagen , auch wenn nur ein zugeordneter DS existieren darf.  Das hat seinen Grund in der Verknüpfungsfunktionaliät von UFO-Steuerelement, die automatisch die Fremdschlüsselwerte übernehmen.
Aber mein Vorschlag wäre in diesem Fall EINE weitere Tabelle mit dynamischer Attribut-Zuordnung:
tblGeräteAttribute:
GAID
GA_PCID
GA_TypID  (ID aus Gerätetyp, z. B. "Flachschirmmonitor")
GA_Bez   (Name des Attributes, z. B.:  "Schirmdiagonale")
GA_Wert (Wert des Attributes z. B. 21)
GA_Einheit  (z. B. inch)
			
			
			
				Hallo Franz,
ich bin auch der Meinung das Beate und Klaus auf den richtigen Weg sind. 
Noch eine Tabelle verkompilziert die Geschichte doch nur.
Die Verknüpfung allerdings auf 1:n. Da geb ich dir wieder recht. Ist fürs UFO einfacher.
Gruß
Johann
			
			
			
				Hallo,
warum soll eine 1:n für ein Ufo einfacher sein?
Dem Ufo ist doch egal ob 1:1 oder 1:n der Fremdschlüssel wird auch bei 1:1 automatisch übernommen.
1:1 hat auch den Vorteil dass Access automatisch das Anlegen eines 2. Datensatzes verhindert.
			
			
			
				Hallo Beate, 
wieso versuchst du nicht beim Laden alle möglichen Felder mittels der visible Eigenschaft auszublenden und dann abhängig von dem, was im Kombifeld ausgewählt wird einzublenden. So kannst du spezifische Felder ein und ausblenden.
			
			
			
				Hallo an alle, die mir geantwortet haben,
Zuerst einmal vielen Dank für Eure Beiträge!
An MzKlMu: Wie bekommt man bei 1:1 ein Formular mit Unterformular hin? Wenn ich den Formular-Assistenten starte und die Tabellen Geräte und PC auswähle, setzt Access mir alle Felder hintereinander in eine Zeile und bildet kein UFO. Womit ich wieder bei meinen Ausgangsfragen wäre: Wie bekomme ich es hin, daß ich für PC, Monitor und Sonstiges drei UFOs bekomme, die ich dann alternativ (je nach Auswahl in Typ) einblenden kann? Brauche ich dazu irgendein Element/Feld/Objekt/o.ä. dessen Herkunfts(?)-Eigenschaft ich dann alternativ auf die drei UFOs setze?
Und wie kriege ich es dann hin, daß Access mir, wenn ich einen bestimmten Datensatz über seinen Barcode suche, das richtige UFO mit den richtigen Daten anzeigt?
An DF6GL: Ich habe jetzt alternativ zu meiner 1:1-Datenbank eine entsprechende 1:n-Datenbank gebaut. Aber das mit der dynamischen Attributzuordnung habe ich nicht ganz verstanden. 
Auch hier habe ich das Problem, drei eigenständige UFOs hinzubekommen. Ich kriege es nur hin, erstens ein Formular Geräte (HFO) mit PC (UFO) zu machen. Zweitens Geräte (HFO) mit Monitor (UFO), drittens Geräte  mit Sonstiges (UFO). Wenn ich den Weg über die drei HFO/UFO-Kombinationen gehemag das für die Eingabe klappen (kann ich mir jedenfalls vorstellen) aber wie klappt das, wenn ich einen bestimmten Datensatz suche?
An pahiti78: Wie würde ich es bei dem von Dir vorgeschlagenen Formular hinbekommen, daß er für verschiedene Felder verschiedene Tabellen als Datenquelle nimmt?  Und wie bekomme ich die Suche nach einem bestimmten Datensatz hin?
So, das war nun ein ganzer Aufsatz. Ich hoffe Access-O-Mania zeigt alles an und schneidet nicht die Hälfte ab.
Ich hoffe jedenfalls auf Eure Antworten
Gruß
Beate1953
			
			
			
				Hallo Beate,
Werde mich mal jetzt nicht in die Normalisierungsdiskussion einmischen,
würde mich in diesem Fall aber eher auf Klaus' Seite schlagen  ;)
Zu Deiner Frage.
Dein HFo hast Du ja wohl schon.
Dann erstellst Du als erstes die UFo als normale Formulare, - Ansicht wie
Du es gerne hättest (Datenblatt, Einzeln oder Endlos). Datenherkunft
jeweils eine der :1-Tabellen. Benennen solltest Du sie aber vielleicht
mit einem Prefix (ufo_DeinName).
Jetzt fügst Du im HFo ein Unterformular-Steuerelement ein. Dabei lässt
Du die Eigenschaft "Herkunfstobjekt" erstmal leer, oder als Alternative
gibst Du ein UFo an, dass dann beim Öffnen des HFo automatisch ange-
zeigt wird.
Der Code zum Umschalten der UFo kommt nun in das Ereignis AfterUpdate
des Kombis mit der Typauswahl:
'Ich gehe mal davon aus, dass das Kombi als gebundene Spalte eine ID
'des Typs enthält
    Dim strUFoName As String
    Select Case Me.Controls("DeinKombi").Value
'Falls Du auf eine andere Spalte zugreifen musst:
'Select Case Me.Controls("DeinKombi").Column(n)
'n = Nummer der Spalte (0-basiert)
    Case 1
        strUFoName = "NameUFoBla"
    Case 2
        strUFoName = "NameUFoBlub"
    Case Else
        strUfoName = vbNullString
    End Select
    If strUfoName <> vbNullString Then
        Me.Controls("NameDesUFoControls").SourceObject = strUFoName
    End If
'evtl. musst noch ein
'Me.Repaint dazu
hth
gruss ekkehard
			
			
			
				Hallo Beate,
du kannst den Vorschlag von ekkehard noch etwas modifizieren.
Zunächst zum Tabellenaufbau:
Zweckmäßig ist hier tatsächlich ein 1:1 Beziehungen zwischen den Tabellen (im ERM-Modell: Generalisierung/Spezialisierung: IS-A-Struktur)
In der Haupttabelle sind die Felder enthalten, die für alle gelten, sowie ein Statusfeld, das die Objekte klassifiziert. Für jeden Status wird eine Tabelle angelegt, die zum Status die übrigen Felder enthält.
Du kannst ein Formular "Objekte" anlegen (Datenquelle Haupttabelle) u. verschiedene Unterrformulare "Objekte_UF1", "Objekte_UF2... mit den jeweilgen Tabellen als Datenherkunft
Ein beliebiges Unterformular hiervon wird im Hauptformular eingefügt mit einer Verknüpfung zwischen den ID-Nummern der Tabellen.
Dann kannst du im Formular ein Ereignis Beim Anzeigen einfügen:  
Private Sub Form_Current()
Select Case Status
Case 1:     Me!UnterformularName.SourceObject = "Objekte_UF1"
Case 2:     Me!UnterformularName.SourceObject = "Objekte_UF2"
Case 3:     Me!UnterformularName.SourceObject = "Objekte_UF3"
Case Else
            Me!Unterformular.SourceObject = ""
End Select
End Sub
Somit wird zu jedem Datensatz das entsprechende Unterformular automatisch (gemäß des Statusfeldes) mit den zugehörigen Feldern angezeigt.
Gruß Oma
			
			
			
				Hallo,
vielen Dank für Eure Tipps, die ich erst mal ausprobieren muß. Melde mich dann wieder, wenn ich nicht mehr weiterkomme.
Eins noch: "Jetzt fügst Du im HFo ein Unterformular-Steuerelement ein...." Was bitte ist ein Unterformular-Steuerelement und wo finde ich das??? Bei meinen Steuerelementen habe ich nur ein Bild-Steuerelement, ein OLEgebunden und ein OLEungebunden. Ist es eines davon oder was sonst???
Gruß
Beate1953
			
			
			
				Hallo nochmal,
noch eine Frage: "In der Haupttabelle sind die Felder enthalten, die für alle gelten" stimmt bisher und dann "sowie ein Statusfeld, das die Objekte klassifiziert..." ??? Meinst Du damit mein TextFeld "Typ" aus der Haupttabelle, das die Werte "PC", "Monitor" oder "Sonstiges" enthalten kann ?
In den Nebentabellen "PC", "Monitor" und "Sonstiges" habe ich jeweils das Zahlenfeld "Barcode", das jeweils der Primärschlüssel ist und jeweils über 1:1 mit dem Barcode-Primärschlüssel der Haupttabelle verknüpft ist, sowie weitere jeweils spezifische Felder wie z.B.  Taktfrequenz aus PC, Diagonale aus Monitor etc.
Stimmen wir soweit überein oder meinst Du mit klassifizieren etwas anderes?
Gruß
Beate1953
			
			
			
				Hallo Beate,
habe mal schnell ein einfaches Beispiel gemacht.  
Personen haben alle gleiche Felder (Nachname, Vorname, DatumGeburt) und vom Status (Arbeiter, Angestellter, Manager) her jeweils verschiedene Felder (Arbeiter Feld Schichtzuschlag, Manager Feld Gewinnbeteiligung usw.)
Hierfür mal ein kleines Beispiel (Felder und Status nicht so ernst nehmen ;D)
Wenn du mal eine kleine DB mit deinen Daten (jeweils nur ein paar ausgewählte Daten) bereitstellts, mache ich gerne mal ein Beispiel damit. Oder du kommst mit meinem trivialen Beispiel zurecht?
Gruß Oma
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo Beate,
oder so, mit Gerätedaten....
Gruß Oma
[Anhang gelöscht durch Administrator]
			
			
			
				Hallo,
das mit dem wechselnden Anzeigen der Unterformulare klappt jetzt (vielen, vielen Dank!!!), aber nur für die Unterformulare FRMGeräte_UFPC und FRMGeräte_UFMonitor. Für das Unterformular FRMGeräte_UFSonstiges klappt es nicht, denn:
Ich habe jetzt die Tabellen nach Deiner Musterdatenbank so abgeändert, daß das Feld Barcode (Zahl) nur noch in der Haupttabelle (Geräte) der Primärschlüssel ist. Bei den drei Untertabellen (PC, Monitor, Sonstiges) ist jetzt ein Autowert der Primärschlüssel und Barcode das Fremdschlüsselfeld. Ich kann beim Herstellen der Beziehungen auch eine 1:1-Beziehung zwischen Geräte und PC  (Verknüpfung über Feld Barcode) sowie eine 1:1-Beziehung zwischen Geräte und Monitor (Verknüpfung über Feld Barcode) herstellen. Wenn ich jedoch versuche die gleiche 1:1-Beziehung zwischen Geräte und Sonstiges herzustellen, kommt immer die Meldung "Für Beziehung ist dieselbe Anzahl an Feldern mit denselben Datentypen erforderlich". Was ist passiert und was kann ich tun um auch die Tabelle Sonstiges verknüpfen zu können?
Viele Grüße und herzlichen Dank im Voraus
Beate1953
			
			
			
				Hallo Beate, 
abgesehen davon, dass ich nicht den Barcode zum Primär-Schlüsselfeld machen würde, musst du folgendes überprüfen:
Primär- und Fremdschlüssel müssen aber immer vom gleichen Felddatentyp (wie z.B. Zahl) und von gleicher Feldgröße (wie z.B. Long Integer) sein. Du solltest das mal in den Tabellen Geräte und Sonstiges überprüfen!
Gruß Oma
			
			
			
				Hallo Beate,
schau mal in die Tabelle Sonstige ob da das Feld wirklich exakt so deffiniert ist
wie in der Tabelle Geräte (z. B. kein Integer mit Long Integer usw.)´
Gruß
Johann
			
			
			
				Hallo,
nun hat sich auch das mit der Verknüpfung noch geklärt und ich bin wunschlos glücklich - bis zum nächsten Problem.
Vielen herzlichen Dank nochmal für Eure Hilfe
Gruß
Beate1953