Neuigkeiten:

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

Mobiles Hauptmenü

Kombo Box in Subform

Begonnen von wolf.zimmer, Dezember 12, 2012, 07:36:16

⏪ vorheriges - nächstes ⏩

wolf.zimmer

g' day,

ich hatte den dummen gedanken, eine datenbank fuer hoerbuecher mittels access 2007 zu programmieren. Lief bis jetzt ganz gut (dank ner menge internet), bin aber jetzt an meinem grenzen angelangt - daher ein hilfeschrei aus dem australischen busch:
Hauptformular: frmAutorenMedien enthaelt eine combobox: Name_autor, das den Autor und Daten ueber den Autor in diesem formular anzeigt (Name_Autor ohne Dupl.) Das Unterformular Subfrm_Medien enthaelt die hoerbuecher des Autors. (master - child feld ist Name_autor). Klappt bis hier gut, nun moechte ich aber im Subfrm_Medien eine Combobox, die mir die Daten des jeweiligen Titel anzeigt. Keinen dunst wie ich allein die frage stelle (bin mehr als nur ein supernewbie und habe null ahnungvon access (ich weiss: dann haende weglassen abaer...). Im anhang bild .
Danke
cu
wolfgang

[Anhang gelöscht durch Administrator]

69bruno

Wenn ich das richtig sehe, hast Du schon eine Combobox und lässt dir über dessen Auswahl die Daten der Medien in einem Unterformular anzeigen.

Wenn Du jetzt dasselbe im Unterformular machen willst, solltest Du die Daten der Titel (die ja wohl in einer Beziehung stehen) wiederum in einem Unterformular im Unterformular anzeigen.

Im Prinzip das, was Du im Hauptformular schon gemacht hast.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

wolf.zimmer

Hallo 69Bruno,
danke fuer die schnelle Antwort. Sobald ich mit Hilfe des freundlichen Access Assistenten eine Combobox fuer die Titel um Subform erstelle, habe ich alle Titel (nicht nur die des Autors) zur Auswahl - nicht gut. Vielleicht weisst Du ne Loesung
Danke
cu
wolf

69bruno

Sind die Titel denn in einem Unterformular, welches im Unterformular Autor drin ist ?
Dann müsstest Du die Beziehungen prüfen......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

wolf.zimmer

Hallo 69Bruno,
der Aufbau ist wie folgt: 2 Haupttabellen, 1.) tblAutor (alles ueber den Autor und / oder Sprecher) und 2.) tblMedium (alles ueber das betreffende Medium) Verbunden sind sie mit dem Feld Name_Autor (der in tblAutor ohne Duplikate ist< d.h. der Autor ist Unique, kann aber mehrere Medien in der Tabelle tblMedium haben), ist also eine eins zu N Beziehung (??). Das Hauptformular frmAutorenMedien  basiert auf auf der Tabelle tblAutor, das Subformular auf der Tabelle tblMedium (master-child ist Name_Autor). Mit einer KomboBox kann ich im Hauptformular den Autor auswaehlen VBA Event after Update:

Private Sub Combo_Autoren_AfterUpdate()
' Find the record that matches the control.
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Name_Autor] = '" & Me![Combo_Autoren] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Im Hauptformular erscheint nun der Autor und im Subformular seine Machwerke (Titel), Sobald ich eine KomboBox im Unterformular einfuege, erscheinen alle vorhanden Titel und nichts passiert wenn ich einen Titel auswaehle. Da einige Autoren von Schreibwut befallen sind, wuerde natuerlich eine Kombobox das Leben vereinfachen.

Ich hoffe ich habe mich verstaendlich ausgedrueckt (ich bin das erste Mal in einem Forum), sorry fuer die Zeitverzoegerung, aber ich sitzte in Australien, und es ist nicht so einfach an ne Internetverbindung zu kommen.
cu
wolfgang

69bruno

#5
Ok, dann würde ich dich doch bitten,
deine db mal ohne Daten (oder nur mit einem "Spieldatensatz") mal hier hochzuladen......

Es gibt hier viele Wege, die nach Rom führen, ich würde gerne sehen, welchen Du gehen wolltest .....

einer wäre:
Du gibst den folgenden String in die Datensatzherkunft des Kombo ein:

SELECT tblMedium.{deinprimärschlüssel}, tblMedium.{deinreferenzfeldzuName_Autor}, tblMedium.{deinfeldnamefürdietitel} FROM tblMedium WHERE
(((tblMedium.{deinreferenzfeldzuName_Autor}) Like formulare!{deinnamedesHAFO}!{formularfeldnamemitdemautoralsinhalt})) ORDER BY tblMedium.{namedesfeldesnachdemdusortierenwillst};
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

Hallo,

Hinweis  (ohne den SQl-String in  Zusammenhang mit der Frage gesetzt zu haben):

für Form-Verweise in SQL-Strings (bzw. in der SQL-Ansicht im Abfrageentwurf)  MUSS  zwingend  "FORMS" anstelle von "Formulare" benutzt werden.
Wenn sich der SQL-String im selben Klassenobjekt befindet (in einem Steuerelement im selben Formular), dann reicht die Angabe des Namens des Suchfeldes als solchem aus.


Die gescheiften Klammern sind zudem durch Eckklammern zu ersetzen...

Weiterhin macht der Like-Operator macht nur dann Sinn, wenn "Wildcards" (Joker-Zeichen)  zwecks Teilstring-Vergleich benutzt werden...


SELECT tblMedium.[deinprimärschlüssel], tblMedium.[deinreferenzfeldzuName_Autor], tblMedium.[deinfeldnamefürdietitel]
FROM tblMedium
WHERE  tblMedium.[deinreferenzfeldzuName_Autor] like "*" &  forms![deinnamedesHAFO]![formularfeldnamemitdemautoralsinhalt] & "*"
ORDER BY tblMedium.[namedesfeldesnachdemdusortierenwillst]

MzKlMu

Hallo,
da fallen noch andere Sachen auf:
ZitatVerbunden sind sie mit dem Feld Name_Autor (der in tblAutor ohne Duplikate ist< d.h. der Autor ist Unique,
Was passiert, wenn der 2. Müller als Autor auftaucht, Müller2 ?Hier ist ein extra Feld (Autowert) als Primärschlüssel erforderlich.

Zitatkann aber mehrere Medien in der Tabelle tblMedium haben), ist also eine eins zu N Beziehung (??).
Es könnte auch vorkommen, dass ein Medium mehr als ein Autor hat und ein Autor auch mehrere Medien, was machst Du dann?

Mit anderen Worten, das Datenmodell ist optimierungsbedürftig. Es fehlt mindestens noch eine Tabelle zum Aufbau einer n:m Beziehung (= zwei 1:n) zwischen Medium und Autor.
Gruß Klaus

69bruno

@ DF6GL: Der String wurde unter Access 2003 durch den Assistenten genau so konstruiert. Kein "Forms" und die geschweiften Klammern wurden durch nichts ersetzt. Keine eckigen Klammern im String.  :-[

Ich habe in dem String nur die Namen herausgenommen, die ich in meiner kurz selbstangelegten TestDB genommen hatte.  ::)

Ob Access den in der Datensatzherkunft des Feldeigenschaftsfenster enthaltenen String in der SQL-Ansicht derart umändert, wie Du es beschrieben hast, weiß ich nicht, funktioniert hat es bei mir aber.  ???

Und warum soll ein Teilstringvergleich stattfinden ? Ich suche doch den Vergleichsstring in derselben Datenherkunft, damit ist 1 zu 1 doch vorprogrammiert.  ;D (Wobei die Anmerkung von MzKlMu dies zumindest beziehungstechisch völlig berechtigt in Frage stellt.)

Reicht der Feldverweis auch aus, wenn ich mich aus dem UFO heraus auf ein Feld im HAFO beziehe ? Ich denke nicht, hatte da zumindest bei einer anderen DB mal größere Schwierigkeiten.  :-\
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

Hallo,

ZitatDer String wurde unter Access 2003 durch den Assistenten genau so konstruiert. Kein "Forms" und die geschweiften Klammern wurden durch nichts ersetzt. Keine eckigen Klammern im String.


Die geschweiften Klammern sind hier im SQl-String  falsch, egal, ob Assistent oder nicht.  Die Schweifklammern sind die Begrenzerzeichen für eine GUID.   Nur die Eckklammern sorgen für die unmissverständliche  Erkennung eines vom User-definierten Objektnamens, vor allen Dingen , wenn Sonder-/Leerzeichen im Namen vorkommen oder ein reserviertes Wort verwendet wird.

Access ändert je nach Umstand und Eingabeort die "deutschen" Ausdrücke in englische um und umgekehrt.  "Sicher erkannt" wird nur "Forms" anstatt "Formulare".


ZitatUnd warum soll ein Teilstringvergleich stattfinden


weil "Like" (von Dir ) verwendet wurde.... 


Wenn ein exakter (nicht-case-sensitiver) Vergleich stattfinden soll , dann sollte der "=" - Operator Verwendung finden.


ZitatIch suche doch den Vergleichsstring in derselben Datenherkunft, damit ist 1 zu 1 doch vorprogrammiert

Eben drum....


ZitatReicht der Feldverweis auch aus, wenn ich mich aus dem UFO heraus auf ein Feld im HAFO beziehe ?

Wenn der Ausdruck stimmt, (siehe oben) , dann schon..

ZitatIch denke nicht, hatte da zumindest bei einer anderen DB mal größere Schwierigkeiten.

Naja,  wundert mich jetzt nicht... ;D

69bruno

OK, stimmt, die geschweiften Klammern waren von mir......  :D Da ich nicht wusste, dass die für eine GUID stehen, hatte ich keinen Hinweis gegeben, dass die Klammern zu entfallen haben.
mich wunderte eben nur, dass im assistentgenerierten String keine eckigen Klammern waren.

Frage ich mich nur, warum macht Access sowas mit 2 verschiedensprachigen Ausdrücken......

Das mit dem Gleich "=" anstelle von "like" werd ich mir mal merken, da habe ich den Assistenten falsch bedient.

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

Hallo,

ZitatFrage ich mich nur, warum macht Access sowas mit 2 verschiedensprachigen Ausdrücken......


Weil die "Ursprache" halt eben englisch ist und nur die Access-Oberfläche  in verschiedene Sprachen (unter anderem eben auch "deutsch") umgesetzt wurde....  Dabei hat Access natürlich die Aufgabe, bei Bedarf und Notwendigkeit die deutschen Ausdrücke in englische umzuwandeln, was durchaus auch mal in die Hose gehen kann.


http://www.donkarl.com/?FAQ1.5
http://www.donkarl.com/?FAQ1.19

69bruno

Muss man sich dann ein englischsprachiges Access besorgen, oder reicht es aus, für die Zeit der Programmierung die Office-Sprache auf Englisch umzusetzen ?
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

DF6GL

Hallo,

wenn nicht für mehrere Sprachen entwickelt werden soll, dann reicht IMHO das "deutsche" Access aus. Man kann eben unliebsamen Überraschungen vorbeugen, wenn man sich an den vorher genannten Tipp hält, in SQL (auch im Abfrageentwurf, z. B. im Kriteriumsfeld statt "Formulare" eben "Forms" schreibt oder statt dem Funktionsnamen   "Wert"  das englische Pendant "Val" schreibt) und VBA mit den englischen Ausdrücken (Benamsungen) zu hantieren.