Access 97 Abfrage oder VBA-Code

In einer Datenbank benötige eine Möglichkeit zur Altübernahme von Daten:
Ich habe Vertragspartner A und B und ein EndeDatum des Vertrages.
In den AltDaten war das EndeDatum offen und nur wenn ein Neuer Preis vereinbart wurde ist ein EndeDatum gesetzt wurden. Ein Neuer Vertrag hatte dann wieder ein offenes EndeDatum.
Puh Gar nicht so einfach was?
So jetzt die Frage: In der neuen Anwendung benötige ich ein BeginnDatum zum Vergleich.
Wie kann ich dieses Datum ermitteln? Hier ein Beispiel:

Vertragsp.A; Vertragsp.B; EndeDatum; Beginn

  1. a;b;01-10-98
  2. a;b;31-12-98
  3. a;b;offen
    Bei eins ist das BeginnDatum 01-01-98 1.t.d.Jahres

bei 2 das BeginnDatum der 02-10-98; FolgeTag des ersten Endedatums

Bei 3 ist das BeginnDatum 01-01-1999; FolgeTag des Zweiten EndeDatums

Kann hier eine Abfrage die Daten ermitteln, oder Muß hier unbedingt mit Code gearbeitet werden?

Vielen Dank, für den oder die, die sich hier die Mühe machen und darüber nachdenken, und vieleicht sogar antworten.

Norbert Laas

Ich will nicht sagen, dass es per Abfrage nicht geht - aber per Code ist so etwas allemal einfacher - und auf jeden Fall leichter zu debuggen.
Es sollte etwa so gehen:

Public Function BeginnErrechnen()
Dim RS As Recordset, Dat As Date, MerkA, MerkB, MerkEnde
 Set RS = CurrentDb.OpenRecordset("SELECT \* FROM tblVertrag ORDER BY VertragspartnerA, VertragspartnerB, IIf(Isnull(EndeDatum),#12/31/9999#,EndeDatum)", dbOpenDynaset)
 MerkA = Null
 MerkB = Null
 MerkEnde = Null
 With RS
 Do While Not .EOF
 If MerkA !VertragspartnerA And MerkB !VertragspartnerB Then MerkEnde = Null
 If IsNull(MerkEnde) Then
 If IsNull(!EndeDatum) Then
 ' musst Du Dir noch überlegen!
 Dat = CDate("1/1/" & Format(Date, "yyyy"))
 Else
 Dat = CDate("1/1/" & Format(!EndeDatum, "yyyy"))
 End If
 Else
 Dat = DateAdd("d", 1, MerkEnde)
 End If
 .Edit
 !BeginnDatum = Dat
 .Update
 MerkA = !VertragspartnerA
 MerkB = !VertragspartnerB
 MerkEnde = !EndeDatum
 .MoveNext
 Loop
 .Close
 End With
End Function

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]