Schönen guten Morgen! ;)
Ich habe mal eine Frage zu den mehrwertigen Feldern von Acc2010.
Ich habe mir schon einiges zu dem Thema durchgelesen und bisher viel schlechtes gehört.
Ich habe in einer Tabelle ein Feld Taetigkeit, dass mehrere Werte enthalten darf. Ich habe nach langem stöbern und probieren folgende Funktion für einen Formularfilter gebastelt:
Private Sub bt_weiter_Click()
Dim Criteria As String
Dim Criteriam As String
Dim i As Variant
Dim h As Variant
'1. Build criteria string from selected items in list box.
Criteria = ""
For Each i In Me.lst_Firma.ItemsSelected
If Criteria <> "" Then
Criteria = Criteria & " OR "
End If
Criteria = Criteria & "FirmaID_F=" _
& Me.lst_Firma.Column(0, i) & ""
Next i
'2. Build criteria string from selected items in list box.
Criteriam = ""
For Each h In Me.lst_Taetigkeit.ItemsSelected
If Criteriam <> "" Then
Criteriam = Criteriam & " OR "
End If
Criteriam = Criteriam & "TaetigkeitID_F=" _
& Me.lst_Taetigkeit.Column(0, h) & ""
Next h
' Filter the form using selected items in the list box.
Me.txtFirma = Criteria & ";" & Criteriam
'Forms!frmPersonalstammdaten![FirmaID_F].FilterOn = True
DoCmd.OpenForm "frmPersonalstammdaten", , , Criteria & " And " & Criteriam
End Sub
Nach der Firma zu filtern ist kein Problem (ich lösche unnötige Zeilen zum Testen natürlich raus ;)). Bei der Taetigkeit wird es aber schwieriger. Wenn ich im gefilterten Formular aus der Entwurfsansicht in die Formularansicht wechsle, erscheint die Meldung "Das mehrwertige Feld TaetigkeitID_F kann nicht in einer WHERE-Clause verwendet werden.
In der Datenblattansicht eines Formulars kann man mithilfe der Filterfunktionen ja auch mehrwertige Felder filtern. Was an dem Code muss anders, damit es klappt / warum funktioniert es nicht per VBA? ::)
Danke!
Hallo,
ZitatIch habe mir schon einiges zu dem Thema durchgelesen und bisher viel schlechtes gehört.
das schlechte überwiegt, richte Dich danach.
Diese mehrwertigen Felder sind ein Marketinggag von Microsoft um Einsteigern den Umgang mit n:m Beziehungen scheinbar zu erleichtern. Im ersten Moment ist das auch so, aber wenn man dann auswerten muss geht der Kampf los.
Verzichte auf solche Felder (verwende auch keine einfachen Nachschlagefelder). Solche Felder
verhindern den sauberen Aufbau einer DB.
Siehe hierzu:
http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern (http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)gilt in verschärfter Form auch für Mehrwertfelder.
Zu Deinem Problem kann ich leider nichts sagen, ich habe solche Felder noch nie verwendet, habe also keine Erfahrung damit.
Hey MzKlMu
Ich habe mir deine Beiträge darüber in anderen Foren schon durchgelesen und verstehe auch, warum diese Felder Blödsinn sind. Aber Access kann doch grundsätzlich mehrwertige Felder filtern. Ist das ganze nur auf Makro-Eben möglich oder auch per VBA. Ich denke kaum, dass MS sich den Schnitzer erlaubt und eine Funktion implementiert, die keiner richtig benutzen kann :D
Hallo,
ZitatIch denke kaum, dass MS sich den Schnitzer erlaubt und eine Funktion implementiert, die keiner richtig benutzen kann
das möchte ich bezweifeln.
Anbei mal eine Link zu einer Microsoftseite.
http://office.microsoft.com/de-de/access-help/verwenden-von-mehrwertigen-feldern-in-abfragen-HA010149297.aspx (http://office.microsoft.com/de-de/access-help/verwenden-von-mehrwertigen-feldern-in-abfragen-HA010149297.aspx)
Langer Text, in dem Mikrosoft Link. Der eigentlich alles sagt, nämlich nicht verwenden. Das muss man alles erst gar nicht wissen, wenn man auf die Mehrwertfelder verzichtet und zwar nicht weil man auf Neues verzichten soll, sondern weil eine ganz normale n:m Beziehung die deutlich einfachere, übersichtlichere und bei vielen Datensätzen wahrscheinlich auch mit Abstand die schnellste Lösung ist. Je mehr ich den MS Artikel lese um so mehr bin ich dieser Überzeugung.
Und noch etwas sollte man bedenken, die können ja nicht die eigene Erfindung schlecht reden.
:D :D :D
Den Text habe ich mir gestern auch schon angetan.
ZitatUnd noch etwas sollte man bedenken, die können ja nicht die eigene Erfindung schlecht reden.
Wäre nicht die erste MS-Erfindung, die Kritik erntet ;D
Dann ist das Thema wohl beendet ;)
Danke
Einen Gedanken könnte man aber noch anfügen:
Stelle Dir vor, Deine Datenbank wird erfolgreich. Ein schrecklicher Gedanke.
Die Nutzung führt dazu, dass die Datenbank in eine kritische Größe kommt und/oder in intensiven Mehrnutzerbetrieb gehen soll. Ein Umstieg auf einen SQL Server oder ein anderes aktives DBMS wird notwendig. Diese kennen aber solche Sonderfeatures nicht. Wer würde eine gewachsene große DB im laufenden Betrieb umstellen wollen und das bezahlen?
MfGA
ebs
Ich habe das ganze aus Neugierde mal weiter verfolgt und auch eine Lösung gefunden:
Private Sub bt_weiter_Click()
Dim Criteria As String
Dim Criteriam As String
Dim i As Variant
Dim h As Variant
'1. Build criteria string from selected items in list box.
Criteria = ""
For Each i In Me.lst_Firma.ItemsSelected
If Criteria <> "" Then
Criteria = Criteria & " OR "
End If
Criteria = Criteria & "FirmaID_F=" _
& Me.lst_Firma.Column(0, i) & ""
Next i
'2. Build criteria string from selected items in list box.
Criteriam = ""
For Each h In Me.lst_Taetigkeit.ItemsSelected
If Criteriam <> "" Then
Criteriam = Criteriam & " OR "
End If '>Guck mal hier<
Criteriam = Criteriam & "TaetigkeitID_F.Value= " & Me.lst_Taetigkeit.Column(1, h) & ""
Next h
' Filter the form using selected items in the list box.
Me.txtFirma = Criteriam
DoCmd.OpenForm "frmPersonalstammdaten", , , Criteria & " And " & Criteriam
End Sub
Die Werte in Mehrfachwertfeldern lassen sich per Feld.Value ansprechen und auch mit mehreren Daten für eine Zeile in einer Zeile auslesen. Wer ein Projekt erstellt, dass nicht gerade
Zitatin eine kritische Größe kommt und/oder in intensiven Mehrnutzerbetrieb gehen soll
oder
ZitatEin Umstieg auf einen SQL Server oder ein anderes aktives DBMS
geplant ist, immerhin eine Lösung.
@ebs17:
ZitatStelle Dir vor, Deine Datenbank wird erfolgreich. Ein schrecklicher Gedanke.
Jetzt mal nicht gleich persönlich werden. Verstehe ich vllt. falsch, aber jeder fängt mal an! :(
LG Username
Hallo,
das Zitat von ebs hast Du völlig in den falschen Hals bekommen. Der schreckliche Gedanke bezog sich ganz sicher auf den durch eine erfolgreiche DB möglicherweise erforderlichen Umstieg auf ein anderes aktives DBMS. Denn mehrwertige Felder gibt es nur bei Access. Eine solche Accessdatenbank ist völlig inkompatibel mit anderen Datenbanksystemen und muss in n:m umgebaut werden.
Alles klar ;)
Hallo,
nochmal zu den Mehrwertfeldern:
ZitatEnd If '>Guck mal hier<
Criteriam = Criteriam & "TaetigkeitID_F.Value= " & Me.lst_Taetigkeit.Column(1, h) & ""
funktioniert nur solange, wie es eine sichtbare Nachschlagtabelle(auf der das Listenfeld beruht) gibt. Beruhen die "Mehrwerte" auf einer Wert-
Liste, dann ist die dazugehörende (von Access intern erzeugte) Nachschlagtabelle in der Urschleimsuppe von Access verschwunden (nur als "TabellenID" erkennbar) , so dass der erforderliche ID-Wert für einen Vergleich nicht mehr erreichbar ist.