Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst MSACESS 2003 DSUM Funktion

Mitglied: e2Mario

e2Mario (Level 1) - Jetzt verbinden

28.03.2012, aktualisiert 03.04.2012, 3234 Aufrufe, 13 Kommentare

Hallo Freunde,

ich habe wieder mal ein "kleines" VBA Access 2003 Problem.
Habe einen Onlineshop gebastelt und nun möchte ich die ausgeliefertern wie auch die noch zu liefernden Artikel als Info per Email versenden.
Hierfür habe ich eine Access Tabelle im Hintergrund laufen welche wie folgt aussieht.

Tabelle:
"fakt"

Felder:
Aufrtagsnummer
Menge Original
Gelieferte Menge


Die Tabelle sieht zB wie folg aus:

Auftragsummer 10000-001
Menge Original: 100
Gelieferte Menge 30

Auftragsnummer 10000-002 (da 1. Teillieferung)
Menge Original: 100
Gelieferte Menge: 20

Auftragsnummer 10000-003 (da 2. Teillieferung)
Menge Original: 100
Gelieferte Menge: 50

In der Tabelle steht daa dann so:
Auftragsnummer Menge Original Menge Gelieferte Menge ZU LIEFERN
10000-001 100 100 30
10000-002 100 100 20
10000-003 100 100 50

Wie kann ich nun per VBA Script ermitteln welche Menge bei der jeweiligen Zeile noch zu liefern ist.
Habe es mit DSUM versucht zusammenzuzählen und dann die Differenz wieder zu ermittlen, aber komme leider nicht klar.

Hoffe ihr wisst was mein Problem ist. Ich denke ich muss hier eine Funktion schreiben, weis jedoch nicht, wie ich das angehen soll.

DANKE für eure Hilfe. - Bin leider Access "Banause"

Lg
Mitglied: NetWolf
29.03.2012 um 18:33 Uhr
Moin Moin,

alsoooo wenn ich das richtig sehe, willst du pro Lieferung einfach berechnen, was noch zu liefern ist.

1. Lieferung
Bestellmenge = 100
Rest = 100
jetzt geliefert = 20
noch zu liefern = 80

2. Lieferung
Bestellmenge = 100
Rest = 80
jetzt geliefert = 30
noch zu liefern = 50

usw.

Wie du sehen kannst, benötigst du 4 Felder (eigentlich nur 3 Felder) um das Gewünschte zu realisieren.
Direkt bei der Eingabe werden durch einfache mathematische Berechnung die Werte ermittelt.

Wichtig ist dabei das Feld REST, dass als Basis für deine Berechnung dient.

Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: LianenSchwinger
30.03.2012 um 07:34 Uhr
Hallo,

es ist eigentlich ganz banal.
Zum Ersten würde ich die Tabelle wie folgt aufbauen. Nenne wir sie z.B. Lieferlos

Auftragsnummer / Bestellmenge / Liefermenge / Lieferdatum

Dann brauchst Du nur noch ein SQL-Statment like

select Auftragsnummer, Bestellmenge, sum(Liefermenge) GelieferteMenge, Bestellmenge-sum(Liferemenge) OffeneMenge
from Lieferlos
group by Auftragsnummer, Bestellmenge

Dannn erhälst Du als Ergebnis:

10000 / 100 / 100 / 0

Gruß Jörg
Bitte warten ..
Mitglied: e2Mario
30.03.2012 um 15:18 Uhr
Danke für Eure Antworten. Leider komme ich aber auch damit nicht klar, WEIL

den Aufbau der verfügbaren Accesstabelle kann ich leider nicht ändern. Ich muss mit den Feldern rechnen die hier sind.

Das Problem ist es, wie in meinem Beispiel angegeben, wenn ich die 2. Teillieferung mache muss ich die gelieferte Menge aus dem Auftrag 10000-001 und 10000-002 zusammenzählen.
(nur zur Info: die nächste Auftragsnummern würden dann 10001-001, 10002-001, 10003-001, 100004-001 etc. lauten. Die -002 -003 -004 am Ende kennzeichnen die Teillieferung.

Hier schaffe ich es leider nicht dass ich dem "lieben Access" vermittle dass 10000-001 und 10000-002 usw. zusammengehören und er hier die gelieferte Menge addieren soll.
Ich denke mit DSUM klappt es nicht weil eben 10000-001 und 10000-002 als unterschiedliche Aufträge gesehen werden.

Halleluja, ich hoffe ich bekomme das noch irgenwie gelöst.

Für jeden Tip sage ich schon mal DANKE.
Bitte warten ..
Mitglied: LianenSchwinger
30.03.2012 um 15:56 Uhr
... auch kein Problem. Davon ausgehend, dass die Auftragsnummer immer 5 stellig ist ...

select substr(Auftragsnummer,1,5) Auftrag, max(to_number(substr(Auftragsnummer,7,3))) Anzahl_Teillieferungen, max(Bestellmenge) Bestellmenge, sum(Liefermenge) Gelieferte_Menge, max(Bestellmenge)-sum(Liferemenge) Offene_Menge
from Lieferlos
group by substr(Auftragsnummer,1,5)

Ergebniss wenn für Auftrag 10000 die 2. Teillieferung erfolgt ist:

10000 / 2 / 100 / 50 / 50

Gruß Jörg
Bitte warten ..
Mitglied: e2Mario
31.03.2012 um 14:32 Uhr
Hallo Jörg,

danke für deine Hilfe.
Aber was meinst du bei select substr(Auftragsnummer,1,5) Auftrag, mit AUFTRAG?
Fehlermeldung: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'select substr(Auftragsnummer,1,5) Auftrag'.


Schöne Grüße und schönes Wochenende
Bitte warten ..
Mitglied: e2Mario
31.03.2012 um 16:54 Uhr
Na ein "Stückchen" bin ich weitergekommen.
Access verlangt anstelle von "substr" --> "mid" und dann "as Auftrag"

Au weia, ob ich das noch hinbekomme...
Bitte warten ..
Mitglied: LianenSchwinger
01.04.2012 um 11:46 Uhr
Hallo,

wie kommt ihr nur mit Access klar. Das ist ja eine Katastrophe wenn man von Oracle kommt.
Ich habe das Ganze jetzt mal in Access nachgestellt und komme auf folgende Lösung

01.
SELECT Left([Auftragsnummer],5) AS Auftrag,  
02.
               Cint(Max(Mid([Auftragsnummer],7,3))) AS Anzahl_Lieferungen,  
03.
               Max([Original Menge]) AS Original_Menge,  
04.
               Sum([Gelieferte Menge]) AS Gelieferte_Menge,  
05.
               Max([Original Menge])-Sum([Gelieferte Menge]) AS Offene_Menge 
06.
FROM Fakt 
07.
GROUP BY Left([Auftragsnummer],5);
Als Ergebnis erhältst Du für jeden Auftrag eine Zeile mit der Auftragsnummer, der Anzahl von Teillieferungen, der original Menge, der schon gelieferten Menge sowie die offene Menge.

Gruß Jörg

[Edit Biber] Codetags. [/Edit]
Bitte warten ..
Mitglied: e2Mario
01.04.2012 um 13:54 Uhr
Hallo Jörg,

tja ich komme eben nicht mit Access klar, das ist das Problem
Getestet und funktioniert 1A.

Ich weis das ich dich schön langsam bestimmt nerve, aber ich würde das ganze ohne Gruppierung der Auftragsnummer benötigen da ich ja am Tag der Lieferung das Email mit der noch offenen Menge senden möchte.

Das Ergebnis sollte also so sein:

10000 1 100 20 80
10000 2 100 30 50
10000 3 100 50 0

Wenn "wir" das noch schaffen, bin ich am Ziel angelangt.

Übrigends auch DANKE für deine Sonntagsarbeit. Ob die jedoch für mich bezahlbar ist?

Lg Mario
Bitte warten ..
Mitglied: LianenSchwinger
01.04.2012 um 15:37 Uhr
Hallo Mario,

willst Du denn immer den Stand aller Teillieferungen Mailen oder doch nur die letzte mit der noch offenen Menge?
Im 2. Fall wäre das Ergebnis mein letzter Post.

1.Fall wäre:
01.
SELECT Left(a.[Auftragsnummer],5) AS Auftrag,  
02.
             CInt(Mid(a.[Auftragsnummer],7,3)) AS Lieferung,  
03.
             Max(a.[Original Menge]) AS Original_Menge,  
04.
             Max(a.[Gelieferte Menge]) AS Gelieferte_Menge, 
05.
             Max(a.[Original Menge]) - sum(b.[Menge]) As Offene_Menge 
06.
FROM fakt AS a  
07.
LEFT JOIN (select left([Auftragsnummer],5) As Auftrag,  
08.
                             CInt(Mid([Auftragsnummer],7,3)) as Teil, 
09.
                             [Gelieferte Menge] As Menge  
10.
                   from Fakt) as b ON left(a.[Auftragsnummer],5) = left(b.[Auftrag],5)  and b.[Teil] <= CInt(Mid(a.[Auftragsnummer],7,3))   
11.
GROUP BY Left(a.[Auftragsnummer],5), CInt(Mid(a.[Auftragsnummer],7,3));
Schönes Restwochenende

Gruß Jörg

[Edit Biber] Codetags. [/Edit]
Bitte warten ..
Mitglied: e2Mario
01.04.2012 um 16:36 Uhr
Fall1 war genau das, was mich zum verzweifeln brachte.
Funktioniert 1A, liefert das gewünschte Ergebnis und wird schon morgen umgesetzt.

DANKE dir nochmals und schönes Wochenende.

Lg Mario
Bitte warten ..
Mitglied: LianenSchwinger
01.04.2012 um 16:51 Uhr
Hallo Mario,

freut mich,dass ich Dir helfen konnet.
Verstehst Du denn auch das Select-Statement?
Oder ist das unerheblich? Nicht, dass jemand die Lösung erklärt haben will.

Du hättest das ganze ja auch in VB machen können, indem Du auch die Auftragsnummer in 2 Teile trennst (Auftragsnummer und Lieferung) und dann die Summe von Gelieferte Menge für die Teillieferungen aufsummierst. Das Select-Statement macht praktisch nichts anderes.


Gruß Jörg
Bitte warten ..
Mitglied: e2Mario
02.04.2012 um 10:06 Uhr
Guten Morgen Jörg,

nach ein paar Mal durchlesen, kann ich sagen, JA doch, ich weis wie und warum das heruauskommt was herauskommt . (ok, ich gebe es zu "google" hat mir auch etwas geholfen ;) )
Das wäre auch mein ursprünglicher Gedanke gewesen mit VB die Auftragsnummer in die 2 Teile zu trennen und dann eben zusammen zu zählen. Das Teilen der Nummer war nicht das Problem, aber
so "blöd" es klingt. Ich bin an der DSUM Formel gescheitert.

Wenn du einen VB Code auf Lager, und ein bisschen Zeit hast´, würde es mich freuen wenn du den auch posten könntest. So lerne und lerne ich dazu.

DANKE DIR!

Schöne Grüße Mario
Bitte warten ..
Mitglied: LianenSchwinger
02.04.2012 um 15:52 Uhr
Hallo Mario,

mit VB kenne ich mich garnicht aus sollte aber vom Prinzip nicht schwer sein.
Wenn ich mir die DSUM-Funktion ansehe könnte das ein Ansatz sein.

01.
Dim sumMenge As Integer 
02.
 
03.
sumMenge = DSum("[Gelieferte Menge]", "Fakt", "Left([Auftragsnummer],5) = Auftrag and Mid([Auftragsnummer],7,3) <= Lieferung")
Vorher musst Du für jede Rückgabezeile von "select * from Fakt" die Auftragsnummer splitten und in die Variablen Auftrag und Lieferung speichern.

Gruß Jörg
Bitte warten ..
Ähnliche Inhalte
Entwicklung

Powershell: Timer-Funktion und Progressbar-Funktion

gelöst Frage von SaschaRDEntwicklung8 Kommentare

Hallo zusammen, ich benötige bei 2 Funktionen in Powershell etwas Unterstützung: Fall-1: Ich habe eine Timer-Funktion die eine Anzahl(X) ...

Batch & Shell

Powershell: Parameter einer Funktion soll eine Funktion aufrufen

gelöst Frage von SaschaRDBatch & Shell3 Kommentare

Hallo zusammen, mein Ziel ist es die Zeitdauer einer Prozesses zu ermitteln. Dafür ist die folgende Funktion zuständig:Leider wird ...

PHP

PHP Funktionen

Frage von tobmesPHP3 Kommentare

Hi, ich bin es mal wieder ;) Ich habe jetzt glaube ich ein kleines Verständnisproblem mit Funktionen und Rückgabewerten ...

JavaScript

Javascript Funktionen

gelöst Frage von agowa338JavaScript5 Kommentare

Hallo, habe gerade mehrere schönen Javascripte per mail bekommen und frage mich gerade, was eigentlich folgendes in einem Javascript ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 11 StundenErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 13 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 13 StundenMicrosoft7 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1026 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser13 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...