Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Rabattliste per Formular

Begonnen von Torsten., März 20, 2018, 11:14:25

⏪ vorheriges - nächstes ⏩

Torsten.

Hallo Ekkehard,
das sieht gut aus. Ich werde das jetzt auf meine Daten anpassen.

Vielen Dank
Gruß Torsten

Beaker s.a.

Hallo Torsten,
Mir ist gerade noch aufgefallen, das die Abfrage zwar korrekt funktioniert,
aber sie nicht ganz korrekt formuliert ist.
Ersetze sie durch diese
SELECT
         A.ArtikelID,
         A.artnr,
         A.artname,
         A.kategorieID_F,
         A.artpreis,
         A.artpreis*(1-Forms!frmArtikel!txtRabattEingabe/100) AS rabatt_preis
FROM tblArtikel AS A
WHERE
         A.kategorieID_F=Forms!frmArtikel!cbxKategorieFilter
         AND A.artpreis>=Forms!frmArtikel!txtMindPreisFilter

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Torsten.

Moin Ekkehard,
Deinen Nachtrag habe ich geändert.

Boah, in der Demo-Db sind für mich soviel neue "Sachen", dass ich nur staunen kann.
Ich werde mich die Tage damit befassen und werde sicherlich einige Fragen haben um zu verstehen was warum gemacht wurde um zum Ergebnis zu kommen.

Vielen Dank bis hierhin.

Gruß Torsten

Beaker s.a.

Hallo Torsten,
Na ja, das ist ja noch unterste Stufe (1. Normalform).
Was ich gemacht habe:
1. Die tblKategorien angelegt und mit den ersichtlichen Kategorien bestückt.
2. In der tblArtikel dein Textfeld Kategorie in das FK-Feld KategorieID_F geändert
    (Datentyp: Zahl, Long Integer) und entsprechend befüllt.
3. Die Beziehung zwischen den Tabellen angelegt.
4. Das Formular
   a) an die tblArtikel gebunden (statt an deine Abfrage)
   b) die Felder zum Filtern (Formkopf) umbenannt und als DS-Herkunft des Kombis
       die tblKategorien eingetragen
       dieses Kombi filtert das Form schon mal auf die ausgewählte Kategorie vor
       siehe Ereignisprozedur "cbxKategorieFilter_AfterUpdate()"
    c) das Feld "Kategorie" im Detailbereich in ein Kombi gewandelt, DS-Herkunft wie
        oben, und an das Feld "KategorieID_F" gebunden
    d) der Button zum Anzeigen filtert dann den Rest aus
        wo ich das gerade so schreibe ist mir aufgefallen, dass da noch ein Fehler drin
        steckt (Korrektur s. u.)
     e) und der andere Button setzt den Filter zurück; - hattest du schon, ich hab's nur
         formatiert

Korrektur (s.o.)
ZitatPrivate Sub btnAnzeigen_Click()
   
    Me.Filter = "kategorieID_F = " & Me.cbxKategorieFilter & " And artpreis >= " & Str(Nz(Me.txtMindPreisFilter, 0))
    Me.FilterOn = True
   
End Sub
(i.Ü.: Str ersetzt das Dezimal-Komma durch einen Punkt; Nz verwendet 0 als mind.
Preis wenn das Feld leer ist)

Und zum Schluss dann noch die Abfrage für den Export erstellt incl. Berechnung der
Preise abzügl. Rabatt.
Ob diese von den Feldern und deren Reihenfolge her den Anforderungen der Weiter-
verarbeitung entspricht kannst nur du wissen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

@Ekkehard,

(bitte nicht falsch verstehen - aber das gehört IMHO mit zur Datenmodellierung)

was nicht sein dürfte (DS 6-8):
tblKategorien 
KategorieIDKatName
1
hose
2
oberteil
3
fußbekleidung
5
unterwäsche
6
A
7
A
8
(Null)

Was auch nicht sein dürfte (DS 14, 15):
tblArtikel 
ArtikelIDartnrartnamekategorieID_Fartpreis
1
01jeanshose
1
29,95€
2
02bluse
2
19,95€
3
03hemd
2
24,95€
4
04latzhose
1
29,50€
5
05weste
2
39,95€
6
06strümpfe
3
7,95€
7
07socken
3
12,50€
8
08schuhe
3
49,90€
9
09sandalen
3
17,92€
10
10shorts
1
9,99€
11
11lätzchen
2
4,95€
12
12unterhemd
5
7,95€
13
13unterhose
5
4,95€
14
(Null)(Null)
(Null)
(Null)
15
(Null)(Null)
(Null)
-23,75€
Grüße von der (⌒▽⌒)

Beaker s.a.

Hallo Lachtaube,
Zitatbitte nicht falsch verstehen
Sicher nicht. Du hast ja Recht, da war ich schlurig.
Besser so?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Viel besser Ekkehard :)

Anmerkung:
>0 reicht als Gültigkeitsregel aus und impliziert ein NOT IS NULL
Bei eingestellter referentieller Integrität ist in Access bereits ein Index involviert (daher doppelt gemoppelt).
Grüße von der (⌒▽⌒)

Beaker s.a.

Zitat>0 reicht als Gültigkeitsregel aus und impliziert ein NOT IS NULL
Bei mir nicht; - ohne diese Bedingung wird bei mir ein leeres Feld nicht muckiert.
An den automatisch gesetzten Index hatte ich nicht gedacht.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Mit der Gültigkeitsregel war ich auf dem falschen Dampfer. :)
Grüße von der (⌒▽⌒)

Torsten.

#24
Moin Ekkehard,
nochmals vielen Dank für die ausführliche Erklärung warum, wieso, weshalb.
Ich konnte alles an meine Daten anpassen und habe nun ein komfortables Tool um flexibel Angebotspreise im Shop zu realisieren.
Auch noch Dein Nachtrag das Feld MindPreis nicht explizit auszufüllen ist hilfreich
und ich habe nun einen Text/Code der mir die Berechnung des Rabatts in nur einem Feld ermöglicht    :)
A.artpreis*(1-Forms!frmArtikel!txtRabattEingabe/100)

Ich habe aber noch eine Frage:
In der Abfrage "Kopie von qryArtikelExport" änderst Du in
SELECT A.ArtikelID, A.artnr, A.artname, A.kategorieID_F, A.artpreis, A.artpreis*(1-Forms!frmArtikel!txtRabattEingabe/100) AS rabatt_preis
FROM tblArtikel AS A
WHERE (((A.kategorieID_F)=[Forms]![frmArtikel]![cbxKategorieFilter]) AND ((A.artpreis)>=[Forms]![frmArtikel]![txtMindPreisFilter]));


die Herkunftstabelle wird nun als A bezeichnet. Warum wird sowas gemacht?

Noch angenehme Ostertage und freundliche Grüße
Torsten

MzKlMu

Hallo,
das sind Aliasnamen. Damit wird der Abfragetext kürzer und übersichtlicher weil statt tblArtikel kann man dann einfach A schreiben.
Wobei bei einer Tabelle auch der Tabellenbezug bei den Feldern entfallen könnte. Auch die Klammern sind zu viele.
SELECT ArtikelID, artnr, artname, kategorieID_F, artpreis,
artpreis*(1-Forms!frmArtikel!txtRabattEingabe/100) AS rabatt_preis
FROM tblArtikel AS A
WHERE A.kategorieID_F=[Forms]![frmArtikel]![cbxKategorieFilter]
AND A.artpreis>=[Forms]![frmArtikel]![txtMindPreisFilter]

Gruß Klaus

Torsten.

Ok, verstehe.
Und bei einer weiteren Tabelle in der Abfrage kann ich die dann als B bezeichnen, und weiter C,D usw.?

Gruß Torsten

MzKlMu

Hallo,
da nimmt man dann zweckmäßigerweise passende Buchstaben. A=Artikel.
Es ist vorteilhaft, wenn man an den kurzen Aliasnamen auf die eigentliche Tabelle schließen kann. Daher können auch 2 Buchstaben sinnvoll sein.
Gruß Klaus

Beaker s.a.

@Klaus
Danke für deine Erläuterungen für den TS.
ZitatAuch die Klammern sind zu viele.
Da hat er die Abfrage wohl erst noch mal im Editor geöffnet und Access hat
die Klammern wieder gesetzt (fürchterliches "Feature"). Bei mir gibt es noch
nicht einmal die eckigen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)