AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Übungsprogramm Lagerverwaltung
Thema durchsuchen
Ansicht
Themen-Optionen

Übungsprogramm Lagerverwaltung

Ein Thema von EdAdvokat · begonnen am 13. Mär 2017 · letzter Beitrag vom 17. Mär 2017
Antwort Antwort
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Übungsprogramm Lagerverwaltung

  Alt 13. Mär 2017, 21:26
Danke für die schnelle Antwort. Ich habe bereits mit den ZEOS-Komponenten experimentiert und auch Zugriff auf Datenbanken gehabt. Ebenso gelang es mir mit den Komponenten mit der Absolut Database zu arbeiten. Mit den ZEOS-Komponenten und IBO konnte ich auch eine Firebird-Datenbank ansprechen.... doch wie weiter????
Wie stellt man es an, einer einfachen "Lagerverwaltung", wie der erstellten einen Zugriff auf eine Datenbank beizubringen???? Ich bin diesbezüglich noch recht unbedarft und taste mich heran. Ggf. habe ich auch Zugriff auf Turbo-Delphi 2006 bzw. Delphi 7 und Delphi 4 prof. Doch ich konzentriere mich auf Delphi 10.1 update 2 Starter mit den angebotenen Datenbankkomponenten, hier vorwiegend ZEOS und IBO5_9_1. Ein wesentlicher Schritt war der, dass ich auf die jeweiligen Datenbanken den Zugriff erreichen konnte und mit den Datenbanken arbeiten konnte. Doch ewig nur Adressverwaltungen schreiben ist wohl langweilig. So kam die Idee irgendetwas mit einer Datenbank zu verbinden. Doch auch Google konnte mir da bislang nicht so richtig weiter helfen. Legiglich, dass will ich nicht unterbewerten, habe ich die Lösung von Wolfgang Bergt in die Hände bekommen. Es ist sicher ähnlich einer Ini-Lösung, doch es führt auch zum Ziel. Das erstrebenswerte Ziel ist es jedoch noch nicht.
Norbert
Norbert
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#2

AW: Übungsprogramm Lagerverwaltung

  Alt 13. Mär 2017, 23:19
Wenn es nur darum geht, ein Übungsprojekt zu realisieren, in dem man einige Daten speichern kann kämen ja ggf. auch andere Lösungsansätze in Frage.
Es muss nicht immer eine SQL-DB dahinter stehen, es sei denn, dass genau dieses dein Ziel der Übung ist.

So könntest du auch deine Daten über Klassen definieren und beim Starten laden und bei Veränderungen speichern. Das ginge in einem Stream, als XML oder auch einfach als JSON-File.

Würde man nicht vor einer Lagerverwaltung erst mal Arikel erzeugen, die man dann im Lager verwalten kann?

Was mir aber schon beim anschauen des Quellcodes aufgefallen ist, sind die StrtoInt um die Daten der Edit's zu speichern. Du läßt da zwar über OnKeyPress nur gültige Eingaben zu, filterst aber gleichzeitig auch die Entf-Taste. Weiterhin könnte ich immernoch eine beliegen Text per CopyAndPaste einfügen, was mal direkt zu einer Exception führt. Und wo wir grad bei Exceptions sind ein bisschen Exceptionbehandlung könnte nicht schaden.

Und im OnFormCreate erzeugst du ein TLager-Object. Wo gibtst du das wieder frei?

In der Unit Lagerberechnung hast du VCL.Dialogs in den Uses. Warum?

Ich finde es im Ganzen schwer zu lesen. So hältst du alle Daten in einem Array of String. Wie soll man da erkennen, welche Daten dort abgelegt werden und welcher Datentyp vorliegt. Um das jetzt rauszukriegen muss ich durch den ganzen Code um irgendwann festzustellen wofür ein Wert verwendet wird.

Erstell dir für die Daten ein Object.
z.B. so (Ist nur mal so zusammengeklatscht:
Delphi-Quellcode:
  TLagerBestand=class
  private
    FStueckpreis: Currency;
    FWarenverkauf: Integer;
    FEndbestand: Integer;
    FLagerbestand: Extended;
    FWareneingang: Integer;
    FLagerumschlH: Extended;
    FWarenwert: Currency;
    FAnfangsbestand: Integer;
    procedure SetAnfangsbestand(const Value: Integer);
    procedure SetEndbestand(const Value: Integer);
    procedure SetLagerbestand(const Value: Extended);
    procedure SetLagerumschlH(const Value: Extended);
    procedure SetStueckpreis(const Value: Currency);
    procedure SetWareneingang(const Value: Integer);
    procedure SetWarenverkauf(const Value: Integer);
    procedure SetWarenwert(const Value: Currency);
  published
    property Anfangsbestand: Integer read FAnfangsbestand write SetAnfangsbestand;
    property Endbestand: Integer read FEndbestand write SetEndbestand;
    property Wareneingang: Integer read FWareneingang write SetWareneingang;
    property Warenverkauf:Integer read FWarenverkauf write SetWarenverkauf;
    property Lagerbestand: Extended read FLagerbestand write SetLagerbestand;
    property LagerumschlH: Extended read FLagerumschlH write SetLagerumschlH;
    property Stueckpreis: Currency read FStueckpreis write SetStueckpreis;
    property Warenwert: Currency read FWarenwert write SetWarenwert;
  end;
Dazu eine TObjectList, wo du die Objecte in einer List hälst. Schwups hast du eine schicke Lagerliste, die gleich ein mindestmaß an Logik beinhaltet, und auch noch Lesbar und leicht erweiterbar ist. Die ObjectList könnte dann noch so Methoden wie SaveToJSONFile, LoadFromJSONFile oder SaveToFileStream, LoadFromFileStream beinhalten zum speichern und laden der Daten. Aber auch Funktion zum Ermitteln des Gesamtwert des Lagers wären hier sinnvoll.

In den einzelnen Objekten können dann Methoden rein wie AddBestand(Menge: Integer); etc.

Beispiele wie man sowas machen könnte gibt es ja zu Hauf.

Wie das im einzelnen dann aussehen könnte hängt von der Notwendigen Funktionalität ab, die ich so auf die Schnelle aus deinem Projekt nicht ergründen konnte.

mehr fällt mir grad dazu nicht ein.

Gruß Hobbycoder
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Übungsprogramm Lagerverwaltung

  Alt 14. Mär 2017, 06:08
Hier mal ein Muster, wie ich auf SQLite zugreife, ohne Komponenten zu nutzen. Ich verwende den Wrapper hier aus dem Forum, und natürlich die passende dll dazu.

Schnippsel für die Verbindung zur DB:
Delphi-Quellcode:
var
  db : TSQLiteDatabase;

INITIALIZTATION
   db := TSQLiteDatabase.Create('C:\db\meinedb.sql3');

FINALIZATION
   db.free
Das in eine globale Unit gepackt, baut dir die Verbindung zu 'meinedb.sql3' auf.

Schnippsel zum lesen von Daten aus einer Tabelle:

Delphi-Quellcode:
    Procedure Liesmich;
    var
     query : TSQlitequery;
    begin
      q := db.query('SELECT * FROM MyTable order by name');
      if (q.next) then
      begin
        repeat
          if (not q.EOF) then
          begin
            //Map die Daten zu den Feldern deiner Form
            edid.text := IntToStr(q.ColumnByName['id'].AsInteger);
            edname.text := q.ColumnByName['name'].AsString;
          end;
        until (not q.next);
      end;
      q.free;
    end;
Schnippsel zum Schreiben von Daten in die Tabelle
Delphi-Quellcode:
   Procedure SchreibMich;
   var
    cmd : TSQLitecommand;
   begin
     cmd := db.Command('INSERT INTO MyTable (id,name) VALUES (:id,:name);');
     cmd.BindingByName[':id'].AsInteger := 1234;
     cmd.BindingByName[':name'].AsString := 'Mein neuer Name';
     cmd.execute;
     cmd.free;
   end;
Ich persönlich schreib mir entsprechende Klassen, die mir das ganze Datenhandling übernehmen und entsprechende Funktionen bieten, so das Daten und UI voneinander getrennt sind. Kleiner Nachteil dabei ist, das ich die entsprechende Daten auch "per Hand" zu UI schaufeln muss, aber das stört mich
nicht wirklich und bietet auf der andere Seite die Möglichkeit, beliebige Komponenten für die UI zu verwenden (auch z.B. einen Treeview).
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Übungsprogramm Lagerverwaltung

  Alt 14. Mär 2017, 09:15
Hallo zusammen, zunächst vielen Dank für die Tipps, die ich mir in Ruhe ansehen werde. Zur Erklärung: das ganze ist ein Experimentalprojekt zur eigenen Fortbildung. Zuvor habe ich mich auch hier im Forum erkennbar pseudo-betriebsweirtschaftlich
mit einem Projekt "Waren" beschäftigt. Dazumal noch völlig ohne den Gedanken an eine Datenbank. Jetzt kam der Gedanke mit Delphi 10.1 Starter!!! auch eine Datenbankanbindung zu probieren. Json ist da nicht enthalten oder geht es trotzdem irgendwie???
VCL.Dialogs war natürlich überflüssig und das Lager-Objekt habe ich nun frei gegeben. Dein Vorschlag Hobycoder finde ich interessant, doch für mich noch etwas schwierig. Das man mit Objekten auch so arbeiten könnte, war mir bislang nicht bekannt.
Leider ist die Literatur zu OOP diesbezüglich nicht gerade der Hit. Ich sollte also eine TObjectlist anlegen (Listbox?) und in dieser dann die Objekte aufführen (zB: Bezeichner Warenverkauf mit dem dazugehörigen Value:integer), um diese
Listbox dann speichern und auch wieder laden zu können. Habe ich das so richtig aufgefaßt? Das wäre ähnlich der bishierigen, sicher etwas unübersichtlicheren Lösung. Eine Funktion zur Ermittlung des Gesamtwertes des Lagers ist doch bereits mit "Warenwert"
schon enthalten, oder meitest Du etwas anderes?

Zitat: "In den einzelnen Objekten können dann Methoden rein wie AddBestand(Menge: Integer); etc.

Beispiele wie man sowas machen könnte gibt es ja zu Hauf."

Das habe ich nicht verstanden. Ich habe doch mit "Lagereingang" versucht eine Lieferung von Waren zu simulieren.
Nochmals zur Klarstellung, ich will lediglich experimentieren, um daraus zu lernen. Einen tiefen Sinn hat das Ganze hinsichtlich einer gezielten Funktionalität eigentlich nicht. Ich will lediglich
eine Beispiellösung für diese oder jene Funktionalität erreichen und da bin ich wohl noch weit entfernt. Für gezielte Hinweise Tutorials oder Beispielprogramme, in denen ähnliches bereits enthalten ist, wäre ich dankbar.
Norbert
Norbert
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Übungsprogramm Lagerverwaltung

  Alt 14. Mär 2017, 09:33
Vielleicht als Einstieg mal etwas Literatur zum Theme OOP?

http://openbook.rheinwerk-verlag.de/oop/
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#6

AW: Übungsprogramm Lagerverwaltung

  Alt 14. Mär 2017, 14:42
Moin...

oder das E-Book zu Delphi Starter... https://downloads.delphi-treff.de/DelphiStarter.pdf
Für dich bestimmt interessant:
4.1.4. Globale Variablen...und folgende.
4.2.2.3.1. Doppelt gemoppelt hält besser...und folgende.
4.6.6. Prozeduren und Funktionen überladen...und folgende.
4.8. Objektorientierung...und folgende.
4.10 Exceptions...und folgende.
4.12.2. Listen mit TList...und folgende.
4.12.3. Dictionaries mit TDictionary...und folgende.
5.4.1. Lesbarkeit des Quelltextes...und folgende.
7.2. Datenbankprogrammierung – SQLite mit Delphi...und folgende.


Geändert von haentschman (14. Mär 2017 um 14:46 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Übungsprogramm Lagerverwaltung

  Alt 14. Mär 2017, 20:59
Hallo zusammen, vielen Dank für die bisherige Hilfe. Ich habe da noch einiges zu tun. Nun komme ich auf den Beitrag von Hobbycoder zurück. An meiner naiven Frage zur Objectlist konntest du sicher erkennen, der ist sowas von ahnungslos - und da hattest du recht. Mit deinem Hinweis auf die Verwendung einer Objectlist habe ich eine Tür aufgestoßen und dann doch leider nur Nebel gesehen. Es gibt von Delphi-Treff einen Beitrag dazu, doch den verstehe ich leider noch nicht. Ich habe zwischenzeitlich Deinem Beispiel folgend das Programm umgestellt und stehe nun vor der unlösbaren Aufgabe eine Objectliste zu erstellen. Sicher ist erkennbar, dass ich auf diesem Gebiet so was von unbeleckt bin. Hat es Zweck, mir da auf die Hufe zu helfen, oder ist das doch eine wesentliche Nummer zu groß für mich? Was müßte ich also an dieser Stelle tun? Eine Komponente wie angenommen TListbox ist also überhaupt nicht im Spiel. Ich wäre wirklich nicht böse, wenn es doch zu kompliziert wäre, das mit mir Greenhon weiter zu probieren, denn so einiges in OOP habe ich bereits gelert und begriffen, doch das man auch wie in deinem Beispiel const Value... verwenden kann, war mir bislang neu. Das meinte ich mit der OOP-Literatur, die ich bislang ausgiebig studiert habe. Doch da wird ewig über Kapselung Polymorphologie und Vererbung referiert. Doch die hier erfahrenenen Untiefen konnte ich bisher an keiner Stelle ausloten.
Also was müßte ich tun um an dieser Stelle weiter zu kommen.
Ich bedanke mich im voraus für die Mühe mit mir.
Norbert
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz