PDA

Vollständige Version anzeigen : Inhalte von Datumsfeldern auffüllen


top
14.02.2003, 13:59
Hallo Leute,

ich habe eine Tabelle mit über 3.500 Datensätzen (A97). Es handelt sich dabei um historische Datensätze über Lieferkonditionen. Diese Datensätze haben ein Feld "gültig_seit", welches mit einem Datum (tt.mm.jjjj) hinterlegt ist.

Eine Fa. A hat z. B. am 01.01.00 (= gültig_seit) einen Rabatt von 3 %. Am 01.01.01 eine neuen Rabatt von 3,5%.

Ich habe in diese Tabelle eine Spalte namens "gültig_bis" eingefügt. Nun müsste ich die Datenfelder in dieser Spalte mit "Leben" füllen. Ich habe auch ein Modul (dem Forum sei`s gedankt) das bei einem neuen Rabatt der in einem neuen Datensatz erzeugt wird, nach dem Eintrag in dem Feld "gültig_seit" im Feld "gültig_bis" das Datum von gültig_seit minus einen Tag einträgt. Das funktioniert aber leider nur bei einem neuen Datensatz.

Mein Problem sind die 3.500 bereits bestehenden Datensätze. Wie könnte ein Modul oder eine Abfrage aussehen, welches das Datum von gültig_seit ausliest und im selben (bereits gruppierten) Datensatzblock einen Satz weiter minus einen Tag einträgt???

Ich hoffe das war halbwegs verständlich.

Vielen Dank vorab für eure Hilfe!

salut
top

C. Palmetshofer
14.02.2003, 14:25
grundsätzlich zwei Möglichkeiten:

1. deine Variante hat den Nachteil der Redundanzpflege, allerdings einem Vorteil beim Datenzugriff (performance)

2. auf das 'gültig_bis' verzichten, womit du dir die Pflege des 'gültig_bis' ersparst, ist allerdings nicht so schnell beim Datenzugriff.


ad 1. nach_Aktualisieren

update <Tabelle> set gültig_bis = <neues Datum>
where ...
and gültig_von = (select max(gültig_von) from <Tabelle> as A
where A.... = ...
and A.gültig_von < <neues Datum>)

ev. prüfen, ob früherer Satz vorhanden ist
sql mit currentdb.execute ausführen

ad 2. ähnlich wie im o.a. update-statement mit Stichtag einen bestimmten
Datensatz suchen
Beispiel:

SELECT PERS_ZA.PID,
PERS_ZA.von,
[PERS.VName] & " " & [PERS.NName] AS PName,
PERS.GebDat,
PERS.EinDat,
PERS_ZA.KoSt,
PERS_ZA.PG,
PERS_ZA.DLG,
PERS_ZA.Lohn,
PERS_ZA.isdelete
FROM PERS, PERS_ZA
WHERE PERS.PID = PERS_ZA.PID
and PERS_ZA.von=(select max(von) from PERS_ZA as A
where A.PID = PERS_ZA.PID
and von <= <Datum>)


Gruss

top
14.02.2003, 14:33
Hallo C. Palmetshofer,

vielen Dank für Deinen schnellen Request. Ich werde Deinen Code am Wochenende ausprobieren und mich dann wieder melden.

Merci, merci!

salut
top

top
18.02.2003, 17:08
Hallo C. Palmetshofer,

ich habe mein Problem etwas anders gelöst. Hier die Lösung, auch wenn es wahrscheinlich Crossposting ist.

1. lade die Datei in Excel
2. füge eine Spalte "Datum_bis" ein
3. hinterlege in diesen Feldern die Formel "=Summe(Feld_Datum_seit)+1"
4. ziehe dieses Feld bis ans Ende der Tabelle
5. kopiere die Daten wieder zurück nach Access

ist zwar vollig unprofessionel, dafür aber schnell und löst das Problem ohne einen Code zu benötigen.

Trotzdem noch mal Danke für Deinen Support.

salut
top