2017-05-07 6 views
0

Ich bin ein Neuling auf Zugriff. Ich habe zwei Tabellen. Die erste ist Termine genannt - es hat 3 Spalten (außer dem Schlüssel), die sind:MS Access - Dlookup, um den Wert des Feldes basierend auf dem Inhalt einer anderen Tabelle

Von Datum (zB 01/07/2017)

To Date (zB 30/09/2017)

Period (zB 2017-2018 Q1)

Die zweite Tabelle aufgerufen wird Aufwendungen, und es hat viele Spalten, von denen zwei Spesendatum und Periode sind.

Ausgabedatum wird vom Benutzer eingegeben.

Ich möchte Zeitraum über eine DLookup Funktion von den Daten Tabelle auf der Expense Datum Basis gefüllt werden z.B. (Unter Verwendung von Excel-Syntax)

`DLOOKUP(["From Date":"To Date","Expense Date","Period")` 

ich diese Funktion gehe davon müßte in Row Source unter der Registerkarte Nachschlagen der Kosten der Entwurfsansicht geschrieben werden.

Würde mir jemand sagen können, was ist die richtige Syntax für Access und wo sollte ich die erforderliche Funktion schreiben?

Antwort

0

Nein, Sie würden keinen DLookup in der RowSource verwenden. Sie würden eine SQL-Anweisung verwenden.

Ein DLookup() - Ausdruck kann in der ControlSource-Eigenschaft eines Textfelds oder in der Feldzelle der Abfrageentwurfsansicht verwendet werden.

In diesem Fall ist der Ausdruck wäre:

DLookup("Period", "Dates", "#" & [Expense Date] & "# BETWEEN [From Date] AND [To Date]")

Wenn Sie internationale Daten verwenden, Überprüfung http://allenbrowne.com/ser-36.html. Gustavs Vorschlag zur Formatierung der Daten könnte erforderlich sein.

Weitere Informationen zu Domänenaggregatfunktionen finden Sie in der Access-Hilfe oder in der Google-Suche.

Berücksichtigen Sie keine Leerzeichen oder Interpunktion/Sonderzeichen (Unterstriche nur Ausnahme) in Namen.

+0

Dank Juni. Ich habe diesen Ausdruck in die ControlSource eingefügt, aber es gibt keinen Effekt. Wenn ich ein Datum eingabe, bleibt der Zeitraum leer. –

+0

Siehe überarbeitete Antwort, um # Trennzeichen zu verwenden. – June7

0

Wenn Sie ein Formular müssen Tabelle gebunden Aufwendungen, würden Sie das NachAktualisierung Ereignis der Expense Datum (hier genannt TextExpenseDate) gebunden Textbox verwenden, um das Feld:

Private Sub TextExpenseDate_AfterUpdate() 

    If IsNull(Me!TextExpenseDate.Value) Then 
     Me!Period.Value = Null 
    Else 
     Me!Period.Value = DLookup("Period", "Dates", "#" & Format(Me!TextExpenseDate.Value, "yyyy\/mm\/dd") & "# Between [From Date] And [To Date]") 
    End If 

End Sub 
+0

Danke Gustav.Ich habe das in beiden Feldern versucht, aber es wirft Fehler. Entweder ungültiger Eintrag oder ein anderer Fehler, den ich nicht reproduzieren kann. Ich vermute, dass es ein Problem mit der Bindung gibt, da das Feld für Periode "ungebunden" sagt. Ich muss mehr über den Zugang recherchieren. Es scheint komplizierter als ich erwartet habe. Danke trotzdem. –

+0

Kein VBA sollte benötigt werden. Der DLookup in ControlSource sollte neu berechnet werden, wenn das Textfeld [Ausgabedatum] aktualisiert wird. Für mich geht das. Es kommt nur darauf an, dass die Ausdruckssyntax und die Textrahmenreferenzierung korrekt sind. – June7

Verwandte Themen