Neuigkeiten:

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

Mobiles Hauptmenü

SQL String mit Mehrfachauswahlfeld

Begonnen von pyjamafreak, November 28, 2010, 03:47:04

⏪ vorheriges - nächstes ⏩

pyjamafreak

Hallo,

ich habe ein Problem, das mir etwas zu schaffen macht und ich es mir nicht erklären kann, woran es genau liegt. Für eine Kombifeld habe ich folgenden SQL String:

Dim strSQL
        strSQL = "SELECT tblSite.SID, tblSite.S_URL, (SELECT B_Bemerkung FROM tblBemerkungen WHERE tblSite.S_Bemerkungen.Value = BID), tblSite.S_Sonderbemerkungen " & _
                 "FROM tblSite "

die zweite SELECT Anweisung funktioniert leider nicht wirklich, sie soll bewirken, dass die B_ID nachgeschlagen werden soll und die Bemerkungen angezeigt werden sollen. Leider ist das Feld tblSite.S_Bemerkungen ein Mehrfachauswahlfeld, das also mehrere Werte beinhaltet. Doch es wird einfach nicht mit allen nachgeschlagenen Bemerkungen angezeigt. Warum ist das so ???

MzKlMu

Hallo,
ZitatLeider ist das Feld tblSite.S_Bemerkungen ein Mehrfachauswahlfeld, das also mehrere Werte beinhaltet.
Meinst Du damit die Mehrwertfelder die ab Access2007 eingeführt wurden?
Gruß Klaus

pyjamafreak

#2
Hallo,

Ja, genau die meine ich. Mit dem oberen Befehl schaffe ich es nur einen Wert auszulesen und anzeigen zu lassen.

MzKlMu

Hallo,
dringender Rat: Schmeis die Dinger raus, die sind ähnlich überflüssig wie Nachschlagefelder in Tabellen. Haben keinen Vorteil und erschweren nur den Umgang mit der DB.
Bilde das als ganz normale n:m Beziehung ab mit einer Zwischentabelle.
Alles andere wird Dir wenig Freude machen.
Bedenke auch, das das nicht abwärtskompatibel ist, also mit Access2003 z.B. nicht läuft.

Kannst Du mal etwas besser die Zusammenhänge der Tabellen erklären, ohne auf dieses Mehrwertfeld einzugehen?
Gruß Klaus

pyjamafreak

#4
Zitat von: MzKlMu am November 28, 2010, 11:08:56
Alles andere wird Dir wenig Freude machen.

Das habe ich mir schon gedacht, allerdings habe ich die DB nicht angelegt und müsste mich dann durch schon 3000 vorhandene Datensätze wursteln und aufsplitten, was ich eigentlich vermeiden wollte.

Die Tabelle tblSite besteht aus 4 Feldern: SID (Zahl, Primärschlüssel), S_URL (Text), S_Bemerkungen (Zahl, Long Integer) und S_Sonderbemerkungen (Text). Die Tabelle tbl Bemerkungen besteht aus den Feldern BID (Zahl, Long Integer) und B_Bemerkung (Text).

Die Felder BID und S_Bemerkung sind über eine 1:n Beziehung miteinander verbunden. Da jeder Seite keine, eine oder mehrere Bemerkungen zugeordnet werden können.

Seltsamerweise (wahrscheinlich eine Spezialität des Mehrfachauswaldfeldes erscheint bei der Verknüfung von S_Bemerkung und BID ein Unterfeld S_Bemerkungen.Value, das es sogar nach Office Hilfe möglich machen soll einzelne Werte daraus zu entnehmen und in eigene Spalten zu schreiben, was ich allerdings in VBA nicht geschafft habe. :(

Für eine Abfrage in einem Formular ist es für den User wichtig zu wissen, welche Bemerkungen hinter einer Seite liegen, damit er sich für eine entscheiden kann. Deshalb sollte das Feld die Bemerkungen in Textform ausgeben und nicht als Zahl, da diese keiner kennt. Gibt es hierzu eine Möglichkeit der Ausgabe oder muss ich das wirklich alles auseinanderfriemeln?

MzKlMu

Hallo,
und welches ist jetzt das Mehrwertfeld?
Gruß Klaus

pyjamafreak

tblSite.S_Bemerkungen. Es kann mehrere Werte der verknüpften BID speichern

MzKlMu

Hallo,
eigentlich sollte es kein Problem sein, mit Anfügeabfragen eine normalisierte Struktur herzustellen.  Das heist, die Zwischentabelle zu erstellen. Du musst für jeden Wert der in den Mehrwertfeldern steht eine Anfügeabfrage machen die jeweils diesen Wert zusammen mit der SID in die neue Zwischentabelle schaufelt. Wie viele Datensätze gibt es denn in der Tabelle "tbl Bemerkungen"?

Ich würde Dir dringend raten, den Umbau vorzunehmen. Die DB wird um ein vielfaches einfacher. Diese Ansicht teile ich mit Meinungen in allen Accessforen.

Und falls Du auch Nachschlagefelder in Tabellen direkt angelegt hast, diese auch entfernen.
Gruß Klaus

oma

Hallo,

und falls du noch mehr Anstösse brauchst:

ZitatIch würde Dir dringend raten, den Umbau vorzunehmen. Die DB wird um ein vielfaches einfacher. Diese Ansicht teile ich mit Meinungen in allen Accessforen.  Und falls Du auch Nachschlagefelder in Tabellen direkt angelegt hast, diese auch entfernen.

Das kann nur bestätigt werden!

Gruß Oma
nichts ist fertig!

pyjamafreak

Hallo,

ok, ok ich habe es noch nicht hinbekommen, also versuche ich nun Euren Weg. So ganz sehe ich den Einfall jedoch noch nicht:

Die Zwischentabelle enthält also die SID und die Spalten für die einzelnen Bemerkungen (von 0 bis zu 10, die mit der tblBemerkungen verknüpft sind) oder wie? Und wie kriege ich die Werte aus der jetzigen einen Spalte in mehrere Spalten der Zwischentabelle verteilt?

Ein weiteres Problem sehe ich für die handliche Verwendung einer solchen Abfrage in einem Formular, bei dem der User die Bemerkungen anfügen, aber auch löschen kann (das funktioniert bisher über ein mehrwertiges Listenfeld). Wie sieht das dann für eine solche Abfrage aus?