Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: herb54 am August 22, 2014, 19:26:51

Titel: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 22, 2014, 19:26:51
Hallo zusammen,
ich habe ein Problem mit einer Abfrage und komme einfach nicht auf die Lösung.
Ich habe eine Tabelle (tbl1) die die Felder: id (Schlüssel), Kunde, date1 (Datum der ersten Abschlagszahlung), ab1 (Abschlagszahlung1) usw. bis date7 bzw. ab7 enthält. Ich möchte über eine Abfrage die Abschlagszahlungen zB. für Januar rausfiltern und später in einem Formular über Dom Wert anzeigen. Über DatTeil funktioniert das Ganze nicht, weil es auch Kunden
gibt die z.B im Januar alle 7 Abschlagszahlungen und Kunden die ihre Abschlagszahlungen über 4 oder noch mehr Monate verteilen.
Wer kann mir hier helfen?
Grüße
Herbert


Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: MzKlMu am August 22, 2014, 19:34:26
Hallo,
das Datenmodell ist falsch. Diese Aufzählungsfelder (mit der Zahl hinten) verstoßen bereits gegen die 1.Normalform und sind demzufolge für eine Datenbank untauglich. Daher findest Du auch keine Lösung. Die Abschlagszahlungen müssen in eine extra Tabelle mit einem Bezug zum Kunden. Die Zahlungen stehen dann untereinander, je Zahlung ein Datensatz mit einem Datumsfeld für den Monat.
Dann kannst Du ganz bequem in einer Abfrage in der einen Datumsspalte nach Monat und Kunde filtern.
Domwert ist dann überflüssig.
Wer in einer Datenbank Domwert benötigt hat oftmals ein falsches Datenmodell.

Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 22, 2014, 20:25:40
Hallo, erstmal vielen Dank! Ja, auf diese Weise ginge das sehr einfach. Das Problem liegt allerdings darin,
dass es sich bei dieser Datenbank um ein älteres Modell handelt, das so an die 17000 Kundendatensätze beinhaltet und nicht von mir ist (die Bilddatei ist nur ein Modell von mir). Ich schätze mal, das ist so 2003 bis 2004 erstellt worden (wobei ich gesehen habe, dass es sogar noch ältere Dateien gibt).
Ich müsste das Ganze jetzt auseinander reißen, oder versuchen eine Lösung mit den Gegebenheiten zu finden - und da tue ich mich wahrlich schwer!
Trotzdem vielen Dank für Deine Antwort!
Gruß
Herbert
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: DF6GL am August 23, 2014, 08:55:54
Hallo,

Du könntest:

-- die Tabellendaten zunächst mit 7 Anfügeabfragen in eine zusätzliche Zwischentabelle überführen  und dann auswerten/abfragen (siehe Hinweis von MzKlMu).

-- mit 7 DSum()-Funktionen mit passenden Kriterien und deren Addition  in einer  berechneten Spalte einer Auswahlabfrage die Werte berechnen (demonstrativ und für Jan. 2014):

SumAb: nz(Dsum("ab1";"tbl1";"Format(Date1;'yyyy\/mm') = '2014/01'  And  Kunde = 'Meier');0) +
nz(Dsum("ab2";"tbl1";"Format(Date2;'yyyy\/mm') = '2014/01'   And  Kunde = 'Meier');0) +  .....

Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: MzKlMu am August 23, 2014, 09:29:59
Hallo,
mit 17000 DS würde ich mir die Arbeit machen und die DB umstrukturieren.
Dazu kann man einmalig 7 Anfügeabfragen nutzen um die normalisierte Tabelle zu erzeugen.
Die Auswertung wird zum Kinderspiel. Und trotz der dann max. 119.000 DS wird es keine Performanceprobleme geben. Geeignete Indizierung vorausgesetzt.
Mit dem jetzigen Aufbau wirst Du keine Freude haben.

Selbst wenn man bei dem jetzigen Aufbau bleibt und die Zwischentabelle nur bei Bedarf füllt (bzw. aktualisiert) wird das wahrscheinlich um ein vielfaches schneller sein als die DSum Version.
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 23, 2014, 13:17:05
Vielen Dank für Eure Hilfe! Ich hab mich noch mal schlau gemacht: Das Ganze wurde 2001 erstellt und hatte eine Excel-Tabelle als Vorlage. Es gab damals schon Überlegungen die Datenbank anders aufzubauen. Dies wurde jedoch abgelehnt, da man jahrelang mit der Excel-Tabelle gut zurechtkam. Das sind die sogenannten eingefahrenen Gleise!!! Nun muss ich mich mit diesem Sch... herumschlagen! Ich hatte schon überlegt, ob mich mit einem Recordset die ganzen Abschlagszahlungen und deren Datum in ein Datumsfeld hineinlese mit dem entsprechenden Schlüssel (id). Könnte man evtl. hier schon den Monat herausfiltern (DatPart)?
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: ebs17 am August 23, 2014, 13:20:15
Generell ja.
Man kann auch nach Kapstadt gelangen, wenn man zu Fuß geht.
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 23, 2014, 17:08:57
Hallo Franz,
ich habe das mit den Anfügeabfragen mal ausprobiert. Das ist soweit prima wenn es um Auswertungen in der
Vergangenheit geht. Ich müsste einen Aktualisierungsbutton einfügen, der mir alle Anfügeabfraben nacheinander in der
richtigen Reihenfolge ausführt. Da taucht ein Problem auf: Und zwar die lästigen Aktualisierungsanzeigen von Access:
" Sie beabsichtigen eine Anfügeabfrage auszuführen...", "Sie beabsichtigen ... Zeilen anzufügen". Wie krieg ich den Mist weg, so dass ich den Button betätige und fertig!

Grüße
Herbert
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: DF6GL am August 23, 2014, 17:50:46
Hallo,

indem Du die Abfragen nicht mit Docmd.RunSQL ausführst, sondern die Execute-Methode des Currentdb-Objektes verwendest:


Sub btnButton_Click()
Dim DB as Database
Set DB= Currentdb

DB.Execute "qry_Abfrage1",dbfailonerror
DB.Execute "qry_Abfrage2",dbfailonerror
.
.
.

Set DB = Nothing
End Sub
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 23, 2014, 17:55:01
Hallo Franz,
vielen Dank für Deinen Tipp! :)

Grüße
Herbert
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: herb54 am August 23, 2014, 21:53:57
Hallo Franz,
noch eine Überlegung: Müsste man nicht jedes mal beim Aktualisieren die komplette bestehende Tabelle löschen bevor man die Anfügeabfragen ausführt? Denn sonst werden die alten Datensätze ja immer wieder angefügt, oder liege ich da falsch?

Grüße
Herbert
Titel: Re: Auswahlabfrage die bei Abschlagszahlungen bestimmte Monate herausfiltert
Beitrag von: DF6GL am August 23, 2014, 23:19:19
Hallo,

das könnte man mit einem (evtl. zusammengesetzten) eindeutigen Index lösen. Aus welchen Feldern sich dieser Index zusammensetzen kann, musst Du herausfinden..  Jedenfalls muss die Kombination der Felder einen bestimmten Datensatz eindeutig definieren.