Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Insert SQL (https://www.delphipraxis.net/6098-insert-sql.html)

Hansa 30. Jun 2003 13:37

Zitat:

Zitat von Lemmy
Im ersten Fall wirst Du doch sowieso die Daten des Lagers irgendwie in einer Tabelle anzeigen lassen, d.h. du hast schon eine TDataSet in Verwendung, die Du dann auch für die Neueingabe verwenden kannst.

Und wie soll ich das machen ? Was ist mit dem Dataset zu machen? Und was ist bei Zugängen von neuen Artikeln, wo halt gar kein Lagerbestand da ist, auch nicht mit Bestand=0?

Sharky 30. Jun 2003 14:30

Zitat:

Zitat von Hansa
Und wie soll ich das machen ? Was ist mit dem Dataset zu machen? Und was ist bei Zugängen von neuen Artikeln, wo halt gar kein Lagerbestand da ist, auch nicht mit Bestand=0?

Warenwirtschaftstechnich kann es ja keinen Zugang von Artikeln geben die nicht im Programm erfasst sind.
Wenn also ein neuer Artikel angelegt wird, wird ersteinmal der Lagerbestand auf 0 gesetzt.

Wenn nun dieser Artikel im Wareneingang gebucht wird :

- erzeugst Du in deiner Lagerwebewegung-Tabelle einen Eintrag mit den Daten
- Änderst Du (wenn Du es denn möchtest) den Bestand in der Tabelle deiner Artikel.

Lemmy 30. Jun 2003 14:31

Hi,

wir posten aneinander vorbei! Nochmal anders: Du musst doch irgendwo eingeben welche Artikel in Deinem Lager sind, oder? Dazu machst Du doch sicherlich ein Formular in dem der User neue Artikel anlegen kann, bzw. bei bestehenden Artikel die Menge editieren kann u. ä. Für dieses Formular wirst Du doch sicherlich eine TDataSet/TIBDataSet/TirgendwasDataSet verwenden um die Daten die schon erfasst sind, anzeigen zu lassen, d.h. Du setzt visuelle DB-Komponenten (TDBEdit, ....) auf das Formular und verbindest das mit der TDataSet.

So und jetzt kommen wir wieder zum eigentlichen Thema:

In diesem Szenario wirst Du der TDataSet in die SelectSQL-Eigenschaft so eine ähnliche SQL eingeben:

Code:
Select * from Lager;
Mit einem RMK (rechten Mausklick) kannst Du dann (zumindest bei IBX) einen Editor öffnen, in dem Du die Insert, Update, Delete und Refresh-SQL Statements automatisch erzeugen lassen kannst. Dann musst Du nur noch die TDataSet mit der Datenbank verbinden und schon kannst Du loslegen. In Diesem Fall sorgt die TDataSet selbst dafür, dass bei einem Aufruf der Methoden Insert/Edit/Post/Delete die entsprechende SQL die du eingegeben/erzeugt hast ausgeführt wird.

Nun zum großen Unterschied: Wenn du selbst einfach so ein Insert-Statement ausführen willst, ohne eine vorbereitete TDataSet zu haben (wie oben), dann musst Du das entsprechende SQL-Statement auch anders ausführen: entweder in einer TQuery (dann ist eigentlich alles klar) oder eben in einer TDataSet. Dann musst du das Statement eben in die SelectSQL eingeben und dann mittels ExecSQL ausführen. Da spielt es dann keine Rolle was in der Tabelle schon drinsteht, bzw. dass die Eigenschaft des TDataSet "SelectSQL" heißt obwohl Du eine Insert oder Delete-Anweisung eingibst. Denn diese SelectSQL wird bei ExecSQL verwendet und ausgeführt.

Grüße
Lemmy

Hansa 30. Jun 2003 19:28

Zitat:

Zitat von Sharky
Warenwirtschaftstechnich kann es ja keinen Zugang von Artikeln geben die nicht im Programm erfasst sind. Wenn also ein neuer Artikel angelegt wird, wird ersteinmal der Lagerbestand auf 0 gesetzt.

Wenn nun dieser Artikel im Wareneingang gebucht wird :

- erzeugst Du in deiner Lagerwebewegung-Tabelle einen Eintrag mit den Daten
- Änderst Du (wenn Du es denn möchtest) den Bestand in der Tabelle deiner Artikel.

Eben, so ähnlich ist das. Kein Lager-Dataset: Insert, aktualisieren : Update und nun kommen die Datenmangen ins Spiel. Beim Insert ist eben keine da und beim Update muß die vorhandene angepaßt werden. Nur wie ?

@Lemmy: Deine Frage vorher habe ich nicht sofort verstanden. Es geht um nicht visuelle Sachen. Das soll hinter den Kulissen laufen.

r_kerber 30. Jun 2003 19:37

Zitat:

Zitat von Hansa
Insert, aktualisieren : Update und nun kommen die Datenmangen ins Spiel. Beim Insert ist eben keine da und beim Update muß die vorhandene angepaßt werden. Nur wie ?

Wen Du Daten einfügen willst (z.B. einen Lagerartikel mit Art-Nr, Beschreibung, Menge etc), dann müssen dies Informationen selbstverständlich eingegeben werden.
Ich vermute mal Du meinst folgendes: Das Lager bekommt einen Zugang der Menge x des Artikels y:
  1. Überprüfen ob Artikel vorhanden -
    SQL-Code:
    Select * from blabla where ArtNr = Y
  2. Erhältst Du keinen Datensatz -> Eingabemaske für Artikeldaten + Menge Zugang -> Anschließend
    SQL-Code:
    Insert Into
  3. Erhälts Du einen Datensatz für den Artikel heißt das er ist schon auf Lager -> also Erfassung der Zugangsmenge ->
    SQL-Code:
    Update blabla Set menge = vorhanden + zugang

Hansa 30. Jun 2003 19:46

Zitat:

Zitat von r_kerber
...Ich vermute mal Du meinst folgendes: Das Lager bekommt einen Zugang der Menge x des Artikels y:
  1. Überprüfen ob Artikel vorhanden -
    SQL-Code:
    Select * from blabla where ArtNr = Y
  2. Erhältst Du keinen Datensatz -> Eingabemaske für Artikeldaten + Menge Zugang -> Anschließend
    SQL-Code:
    Insert Into
  3. Erhälts Du einen Datensatz für den Artikel heißt das er ist schon auf Lager -> also Erfassung der Zugangsmenge ->
    SQL-Code:
    Update blabla Set menge = vorhanden + zugang

Ja, das kommt der Sache schon recht nahe. Schlau werde ich aber immer noch nicht so recht. Wie mache ich das mit vorhanden und Zugang ? Und was ist mit den leeren Datenmengen? Was muß man da beachten ?

JoelH 30. Jun 2003 19:54

hmm,
 
du prüfst ja eh mit select ob was da ist da kannst du dass vorhanden ja auch auslesen und dann den zugang addieren und wieder reinschreiben mit Update. Bei leeren Mengen musst du darauf achten ob die DBSpalte NULL sein darf oder auf NOT NULL steht.Achtung '' also ein Leerstring ist nicht NULL.

Hansa 30. Jun 2003 20:00

Re: hmm,
 
Zitat:

Zitat von JoelH
...Bei leeren Mengen musst du darauf achten ob die DBSpalte NULL sein darf oder auf NOT NULL steht.Achtung '' also ein Leerstring ist nicht NULL.

NULL <> 0, schon klar und wie soll ich es jetzt machen? Was ist, wenn das SELECT etwas liefert und was, wenn nicht ?

JoelH 30. Jun 2003 20:03

hmm,
 
naja wenn halt die Zeile schon da ist recordcount > 0 dann UPDATE, ansonste INSERT

Hansa 30. Jun 2003 20:10

Re: hmm,
 
Zitat:

Zitat von JoelH
naja wenn halt die Zeile schon da ist recordcount > 0 dann UPDATE, ansonste INSERT

Das geht einfacher mit
Code:
IsEmpty
nur mal so nebenbei bemerkt. 8) Lemmy hat mich mit seinen leeren Datenmengen trotzdem verwirrt. Lemmy, wo bist Du :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz