berechnete Spalten können nicht in Systembeziehungen verwendet werden

Mit den beiden Funktionen benötigst Du gar keinen Kalender:

Code:
Public Function Jahreszeit(Suchdat As String) 'Eingabe gültiges Datum als String "tt.mm.jjjj"
 Dim mmtt As Integer
 Dim jjjj As Integer
 
 mmtt = Val(Mid(Suchdat, 4, 2)) * 100 + Val(Mid(Suchdat, 1, 2))
 jjjj = Val(Mid(Suchdat, 7, 4))
 
 Select Case mmtt
        Case 301 To 531
             Jahreszeit = "Frühling" & Str(jjjj)
        Case 601 To 831
             Jahreszeit = "Sommer" & Str(jjjj)
        Case 901 To 1130
             Jahreszeit = "Herbst" & Str(jjjj)
        Case 1201 To 1231
             Jahreszeit = "Winter" & Str(jjjj) & " /" & Str(jjjj + 1)
        Case 101 To 229
             Jahreszeit = "Winter" & Str(jjjj - 1) & " /" & Str(jjjj)
        Case Else
             Jahreszeit = "Fehler in der Jahreszeitermittlung"
 End Select
End Function


Public Function Saison(Suchdat As String) 'Eingabe gültiges Datum als String "tt.mm.jjjj"
   Dim mmtt As Integer
   Dim jjjj As Integer
 
   mmtt = Val(Mid(Suchdat, 4, 2)) * 100 + Val(Mid(Suchdat, 1, 2))
   jjjj = Val(Mid(Suchdat, 7, 4))
 
   Select Case mmtt
          Case 701 To 1231
               Saison = "Saison" & Str(jjjj) & " /" & Str(jjjj + 1)
          Case 101 To 630
               Saison = "Saison" & Str(jjjj - 1) & " /" & Str(jjjj)
     
          Case Else
             Saison = "Fehler in der Saisonermittling"
   End Select
End Function

Kopiere sie in ein allgemeines Modul (nicht in ein Formular oder Berichtsmodul!).

Der Aufruf erfolgt mit

Code:
Jahreszeit("tt.mm.jjjj")

bzw.

Saison("tt.mm.jjjj")

wobei das Datum mitgegeben wird, für welches die Jahreszeit, bzw. die Saison ermittelt werden soll.
Diese Funktionen kannst Du überall in deinem Projekt direkt nutzen, also auch in Abfragen, Formularen und Berichten.
Ebenso kann Du das Ergebnis in VBA direkt einer Variablen vom Typ String zuordnen:

Code:
suchJahreszeit = Jahreszeit("tt.mm.jjjj")

bzw.

suchSaison = Saison("tt.mm.jjjj")
 
Zuletzt bearbeitet:
Werbung:
Vielen Dank für deine Funktionen. Bin gerade dabei mich betr. VBA einzulesen bzw. einzuhören und werde das dann ausprobieren.

Ich habe aber jetzt noch ein kleines Problem mit meiner Test-Datenbank.
Um das DB-Design noch zu verbessern habe ich noch eine eigene Tabelle T_Rundkurs (ja, nein) erstellt und diese über die IDs (Rundkurs_ID in T_Sportart bzw. ID in T_Rundkurs) mit der Tabelle T-Sportart in Beziehung gesetzt.
Grundsätzlich funktioniert das, zB ersichtlich in der Abfrage q_Ativitäten in der ich alle Tabellen in einen ABfrage packe.

Aber wenn ich das Formular frm_T_Tagebuch aufrufe bekomme ich immer die Meldung "Parameterwert eingeben - T_Sportart.Rundkurs"
Obwohl im Formular folgende Datensatzherkunft hinterlegt ist:
SELECT T_Sportart.ID AS T_Sportart_ID, T_Sportart.KategorieID, T_Sportart.RegionID, T_Sportart.Streckenbezeichnung, T_Sportart.Streckenverlauf, T_Sportart.Höhenmeter, T_Sportart.Höhe, T_Sportart.Entfernung, [T_Sportart].[Rundkurs] AS Ausdr1, T_Tagebuch.ID AS T_Tagebuch_ID, T_Tagebuch.Datum, T_Tagebuch.Zeit, T_Tagebuch.Puls, T_Tagebuch.Belastung, T_Tagebuch.[Zeit Abwärts], T_Tagebuch.[Puls Abwärts], T_Tagebuch.Sportart_ID, T_Tagebuch.Region_ID FROM T_Rundkurs INNER JOIN ((T_Land INNER JOIN T_Region ON T_Land.ID_Land = T_Region.ID_Land) INNER JOIN (T_Kategorie INNER JOIN (T_Sportart INNER JOIN T_Tagebuch ON T_Sportart.[ID] = T_Tagebuch.[Sportart_ID]) ON T_Kategorie.ID_Kategorie = T_Sportart.KategorieID) ON T_Region.ID_Region = T_Sportart.RegionID) ON T_Rundkurs.ID = T_Sportart.RundkursID;

Bevor ich diese Ergänzung vornahm war in der Datensatzherkunft folgendes enthalten:
SELECT [T_Sportart].[ID] AS T_Sportart_ID, [T_Sportart].[KategorieID], [T_Sportart].[RegionID], [T_Sportart].[Streckenbezeichnung], [T_Sportart].[Streckenverlauf], [T_Sportart].[Höhenmeter], [T_Sportart].[Höhe], [T_Sportart].[Entfernung], [T_Sportart].[Rundkurs], [T_Tagebuch].[ID] AS T_Tagebuch_ID, [T_Tagebuch].[Datum], [T_Tagebuch].[Zeit], [T_Tagebuch].[Puls], [T_Tagebuch].[Belastung], [T_Tagebuch].[Zeit Abwärts], [T_Tagebuch].[Puls Abwärts], [T_Tagebuch].[Sportart_ID], [T_Tagebuch].[Region_ID] FROM T_Sportart INNER JOIN T_Tagebuch ON [T_Sportart].[ID] =[T_Tagebuch].[Sportart_ID];

Was könnte da die Ursache sein?

Grüße
Markus
 

Anhänge

Werbung:
Hallo Markus,
Access hat die Angewohnheit generierte Abfragen, z.B., wenn der Formularassistent genutzt wird, als SQL-Statements in die Eigenschaft Datenherkunft des Formulars zu schreiben. Ändert man dann Felder in den Tabellen passt das nicht mehr und man muss das im Formular nachziehen. Das geht, indem man bei der Eigenschaft Datenherkunft, neben der Selectanweisung auf die drei Punkte klickt. Es öffnet sich die Abfrage in der Entwurfsansicht. Dort siehst Du in deriner Version, dass es ein Feld Ausdruck1 gibt, welches irgendwie entstanden ist. Das ist die Ursache. Denn, versteht Access ein Feld in einer Abfrage nicht, nimmt es an, dss es sich um einen einzugebenen Parameter handelt und fragt ihn ab.
Dieses Feld habe ich mit dem richtigen Tabellenfeld ersetzt.
Wichtig: Dann speichert man die Abfrage mit einem eigenen Namen, hier qfrm_T_Tagebuch. UND dann folgt die Frage von Access, ob die Abfrage ins Formular übernommen werden soll. Die muss mit Ja beantwortet werden, dann wird die Selecteintragung mit der aktuellen Abfrage ersetzt.
Dann funktioniert das Formular. Versuche es mal mit deiner Version nachzuvollziehen. Meine hier zum Vergleich.

Noch eine Bitte, setzte bitte in Zukunft jede Art von Code (Selectanweisungen, VBA Code) in Code-Tags. (Oben in der Buttonlieste auf die drei Punkt kilchen und Code wählen). Das erleichtert die Arbeit ungemein.
 

Anhänge

Zuletzt bearbeitet:
Zurück
Oben