Access Kombinationsfeld einschränken

Hallo,

ich habe ein Problem bei einer Produktdatenbank:

  • es gibt ein Kombinationsfeld mit verschiedenen Prozentsätzen für Zuschlagssätze, die in einer Tabelle stehen
  • die Sätze ändern sich jährlich
  • es gibt im Hauptformular ein Jahresfeld, das manuell umgestellt wird (nicht datumsbezogen)
  • anhand dieses Jahresfelds sollen nun im Kombifeld die Auswahl der Zuschlagssätze jahresbezogen erscheinen
  • alte Produktdatensätze müssen nach wie vor mit den alten Sätzen berechnet werden

Jetzt die Frage an euch:
Wie kann ich das Lösen?
Mit einer Abfrage?? Wenn ja, wie schränke ich die Kombifeld-Auswahl je nach Jahr ein?

Hallo Behind-Space,

in der Tabelle ‚tab‘ sind unter anderem ein Feld ‚jahreszahl‘ und ein Feld ‚prozent‘ und alle Daten sind darin gespeichert.

Die Daten für das Kombinationsfeld ‚kombifeld‘ werden dynamisch zugewiesen:

kombifeld.rowsource=„select jahreszahl,prozent from tab where jahreszahl=’“ & Jahresfeld & „’“

Diese Anweisung wird dann in die Ereignisse ‚bei Änderung‘ oder ‚beim Verlassen‘ oder ‚bei Fokusverlust‘ eingetragen.

Ma kann auch einen Button einrichten und die Anweisung in das Click-Ereignis stellen.

Gruß
JOGI

Hallo Behind-Space,
-mit welcher Access-Version arbeitest du?
-Wie füllst du die Combobox?

Idealerweise füllst du die Boxen jeweils mit Code.
Damit bist du sehr flexibel.
Bedeutet, dass du in der Datenquelle Combobox nichts einträgst und z.B. Laden beim Fomluar und/oder beim Aktualisieren der Jahresauswahl das Combobox-Objekt füllst.
Grüße
Manfred

Hallo Manfred,
ich arbeite mit Access 2000.
Die Combobox wird momentan über eine Tabelle gefüllt mit den Spalten: Bezeichnung der Overheads, Prozentsatz, Jahr.

Habe die Variante von JOGI versucht, aber das funktioniert noch nicht:

Private Sub HerstellOverheads_Change()
tabHerstellOverheads.RowSource = „select Jahr,prozentsatz,herstell-overheads from tabHerstellOverheads“
where Jahr = „’“ & tabPSKopf.TF_PSJahr & „’“
End Sub

Wenn ich in der Datensatzherkunft die Tabelle angebe, bekomme ich 2010 und 2011 angezeigt und mit JOGIs Version kann ich nichts auswählen in der Combobox.

Bin ratlos :frowning:

Wenn es im Hauptformular das Feld Jahr gibt wird die Jahresangabe bestimmt auch in der Tabelle mit gespeichert. Erstellt man eine Abfrage kann man in der Abfrage unter Kriterien die Auswahl einschränken. z.B. mit [Welches Jahr?]. Ich hoffe ich habe das nicht falsch verstanden.

Gruß Ortwin09

Hallo Ortwin09,

ja, im Hauptformular gibt es ein Jahresfeld, dass in einer Tabelle gespeichert wird.

Leider bin nicht in der Lage die Abfrage so zu schreiben:
WENN tabXYZ.Jahrfeld = 2010?! DANN ComboboxXYZ nur Werte mit „2010“ in Jahresspalte anzeigen.

Vielleicht denk ich auch einfach zu kompliziert…

Eigenschaft Kombinationsfeld
dort gibt es Datensatzherkunft: SELECT DISTINCTROW…usw. ganz rechts ist der Button zu SQL-Anweisung und dort unter Kriterien die Einschränkung machen? War nur ein schneller Gedanke.

Gruß Ortwin09

Hi,

JOGIs Ansatz ist nicht schlecht.
Versuch dochmal zunächst dies:
speichere die den Inhalt von „tabPSKopf.TF_PSJahr“ in eine variant-Variabel.
Du wirst festellen, dass da vermutlich nichts drinsteht.
Es ist mit diesem Statemant nur die Spalte definiert, aber nicht der aktuelle/aktive/selktierte Datensatz.
Versuch mal den aktuellen Datensatz zu identifizieren.
Ist ein bisschen schwierig so aus der Ferne, programmiere schon seit 5 Jahren nicht mehr mit Access-VBA.
Gruß
Manfred

Hallo Manfred,

eine Variant-Variabel sagt mir leider gar nichts:

Klappt es vielleicht so: SQL-Abfrage als Datensatzherkunft:
SELECT Herstell-Overheads, Prozentsatz, Jahr
FROM tabHerstellOverheads
WHERE Jahr=’" & TF_PSJahr & „’“

–> Problem ist die Syntax bei WHERE!
Oder soll ich das Jahr anstatt aus dem Hauptformular aus der ursprünglichen Tabelle holen?

Danke und Gruß
Florian

Du musst halt die Rowsource des Kombifelds in Abhängigkeit von dem Jahresfeld setzen:

Me!MeinKombi.Rowsource = "SELECT wasauchimmer FROM MeineTabelle WHERE Jahr = " & Me!MeinJahresfeld

Gruß
Reinhard Kraasch

Hi Florian,

eine Variant-variable ist eine Variable vom Typ Varaint.
Dieser Datenty ist ‚universell‘ und kann praktisch jeden beliebigen Inhalt haben.
Der Nachteil: dieser Datentyp verbraucht viel Speicherplatz.
Also generell nach DIM und Variable den typ angeben.
Soviel dazu.
Du musst zunächst mal wissen, welcher Wert TF_PSJahr enthält.
Also: vTest = TF_PSJahr.Value (z.B.)
Dann sollte auch in deiner where-Clause TF_PSJahr.Value stehen:
SELECT Herstell-Overheads, Prozentsatz, Jahr
FROM tabHerstellOverheads
WHERE Jahr=’" & TF_PSJahr.Value & „’“.
Fällt mir gerade auf:
du schließt den Inhalt von TF_PSJahr in Hochkommata ein?
Welchen Datentyp hat den TF_PSJahr in der Datenbank?
Wenn da ein INTEGER-Wert drin steht, werden die Hochkommata nicht benötigt!
Wenn in dem Datenfeld ein STRING-Wert steht brauchst du, glaube ich, ‚doppelte Hochkommata‘, also Shift+2 (").
Du musst in jedem Fall wissen welcher Wer in TF_PSJahr steht.
Du kannst ja den Code Schritt für Schritt debuggen, dann siehst du den Inhalt.
Gruß
Manfred

Hallo,

man kann einem Kombinationsfeld problemlos dynamisch eine Datenquelle zuweisen. Siehe z.B. hier:

* http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.36

* http://www.office-loesung.de/ftopic6700_0_0_asc.php

Viele Grüße und viel Erfolg

Jochen

Hi,

das ich zur Zeit leider terminlich sehr eingebunden bin, kann ich dir leider nicht helfen :o(

Gruss

Hallo,

um das Problem zu lösen zu können musst Du dich mit VBA auskennen.

Du lösst das Problem in dem Du die RowSource Eigenschaft des Kombinationsfeldes aktualisierst, nach dem du in deinem Jahresfeld die Zahl geändert hast.

Am einfachsten du erstellst dir eine Abfrage auf die Tabelle wo Du die Prozentsätze hinterlegt hast. Und setzt in dieser Abfrage bereits ein Jahr als Filter.
Dann lässt du dir die SQL Syntax anzeigen und kopierst diese in die VBA Anweisung: Nach Aktualisierung.

Die Jahreszahl in der Syntax ergänzt Du durch den Verweis auf das Jahresfeld.

Beispiel:
me.Kombinationsfeld1.RowSource = „SELECT * FROM tabProzentsätze WHERE (JAHR=“ & me.txJahreszahl & „)“

Ich hoffe diese Anregung hilft Dir bei Deinem Problem.
Gruß
Thomas

Hallo Behind-Space,

tut mir leid, dass ich nicht früher antworten konnte. Du hast jetzt bereits soviele Antworten bekommen, dass ich auch nichts neues beisteuern kann.

Gruss
isis


mit einer Abfrage. Hier gibtes mehrere Möglichkeiten:
1.) entweder konstant unter Kriterien Jahr eingeben z.B. „2010“ oder
2.) unter Kriterien variable Abfrage eingeben
Wie[bitte Jahr auswählen] oder
3.) eine neue Tabelle anlegen mit der Stuktur eines einzigen Feldes undzwar Feldname:AuswahlJahr Felddatentyp: Text 4 Stellen
mit dieser Tabelle in der Abfrage dieses Auswahljahr zum selektieren vorsehen

Hallo,

trage einfach statt einer Tabelle als Quelle für das Kombinationsfeld eine Abfrage ein. Entweder zeigts Du auf eine gespeicherte Abfrage anhand deren Namen oder Du trägst direkt das SQL-Statement als Quelle ein.

In der Where-Klausel gibst Du dann die Bedingung an. Hierbei ist es nur etwas tricky, das Formularfeld zu referenzieren. Das geht mit
[Formulare]![FormularName]![FeldName]
bzw in einem Unterformular
[Formulare]![FormularName]![UnFrmName]![FeldName]
Hierbei bitte die Klammern und Ausrufezeichen genau so setzen. Der erste Name „Formulare“ verweist auf die globale Kollektion aller Formulare und ist auch buchstäblch so anzugeben. Die weiteren Namen sind dann entsprechend zu ersetzen. Bei der Adressierung mitels Ausrufezeichen wird in einer Kollektion jeweils der Eintrag mit dem entsprechenden Namen gesucht, wie er im Namens-Attribut steht. Wenn Du stattdessen auf Felder von Objekten zugreifst, dann mit Punkt statt Ausrufezeichen.

Ich hoffe, ich konnte Dir helfen.

Gruß
Jochen