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
a;b;01-10-98
a;b;31-12-98
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.
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]