Toon posts:

SQL-code probleem!

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben op dit moment bezig met het aanmaken van een database-systeem..

Ik heb de volgende tabellen:

klant
artikel
leverancier
order
bestelling

de tabel klant bevat uiteraard de klantgegevens. Primaire sleutel = klantnr.
de tabel artikel bevat de artikelgegevens. Primaire sleutel = artnr.
de tabel leverancier bevat de leveranciergegevens. Primaire sleutel = levnr.
de tabel order bevat de orders die de klanten maken. Primaire sleutel is ordernr. Klantnr en Artikelnr zijn de vreemde sleutels.
de tabel bestelling bevat de bestellingen die bij de leveranciers gemaak worden om de voorraad aan te vullen. Primaire sleutel = bestelnr. Vreemde sleutel artnr.
de tabel factuur met de facturen. Primaire sleutel = facnr. Vreemde sleutels artnr, kltnr en ordernr.

Klant bevat verder de velden naam en adres.
Artikel bevat verder prijs, omschrijving en aantal.
Leverancier bevat verder de velden naam en adres.
Order bevat verder datum (waarop de order gemaakt is) en het aantal dat geleverd kan worden (veld aantal) .
Bestelling bevat verder datum (waarop besteld is) en het aantal (per artnr) dat bestelt is. De bestelling komt standaard 3 dagen nadat ze besteld zijn binnen.
Factuur bevat verder de totaalprijs van de factuur. (prijs)

Nu is mijn probleem:

Hoe programmeer ik (ongeveer mag ook) dat als een klant een order geeft, er gelijk wordt gekeken of er genoeg is van het produkt. En als dit niet het geval is dat het aantal dat er is geleverd wordt en dat de rest gelijk bij besteld wordt.

Ik hoop dat het een beetje duidelijk is. Als er iemand een voorbeeld heeft wat er op lijkt, dan zie ik dit ook graag!

Alvast bedankt!
Hoe programmeer ik in sql dat automatisch als er een klant een order plaatst er gekeken wordt of er genoeg is en als dit niet het geval is er automatisch

Verwijderd

kan niet :)
je kunt wel als er een order geplaatst wordt, kijken of er genoeg is, zo ja, de bestelling doorvoeren en het aantal van de voorraad afhalen. Zo nee, geef een waarschuwing dat het artikel bijna op is ofzo.
Maar volgens mijn beste weten is zoiets niet mogelijk met alleen sql.

Verwijderd

Topicstarter
Verwijderd schreef op 06 december 2002 @ 19:30:
kan niet :)
je kunt wel als er een order geplaatst wordt, kijken of er genoeg is, zo ja, de bestelling doorvoeren en het aantal van de voorraad afhalen. Zo nee, geef een waarschuwing dat het artikel bijna op is ofzo.
Maar volgens mijn beste weten is zoiets niet mogelijk met alleen sql.
k bedankt... zou je een voorbeeld kunnen geven van wat jij zegt?

Verwijderd

Neem een database die triggers ondersteund, volgens mij moet het daar wel mogelijk mee zijn.

Interbase of Oracle bijvoorbeeld.

[ Voor 7% gewijzigd door Verwijderd op 06-12-2002 19:34 ]


  • ycode
  • Registratie: Februari 2000
  • Laatst online: 02-07 23:23
Het probleem zou opgelost kunnen worden in SQL als je Oracle gebruiikt. Daar kun je een PL/SQL Stored Procedure kunnen gebruiken die bij een bepaalde trigger acties uitvoert.

Als je geen Oraclegebruikt, kun je het beste een transactie starten en eerst controleren of er een aantal gegevens in tabellen aanwezig zijn en daarna de transactie te committen.
Gebeurt er iets in de transactie ( iemand anders plaatst een order of iets dergelijks) en de transactie kan niet plaatsvinden, dan is de gehele transactie niet gedaan.
Daarvoor moet je wel een database hebben die transacties ondersteund en dat houd in dat de standaard MySQL database niet werkt.

Als je MySQL kunt aanpassen zodat hij InnoDB tabellen gebruikt, kan MySQL wel transacties aan. Verder doen de andere databases (Oracle, PostgreSQL, DB2 etc gewoon wel aan transacties)

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

niet alleen triggers, maar ook stored procedures.

Interbase is denk het makkelijkst, is niet zo groot om te installeren, de nieuwste oracle is al snel een paar cd's om te installeren. :) Interbase is ook zeker aan te raden als je dit in Delphi wilt maken. Er zitten bij Delphi standaard uitstekende componenten om Interbase te kunnen gebruiken.

[ Voor 11% gewijzigd door FendtVario op 06-12-2002 19:43 ]

www.fendt.com | Nikon D7100 | PS5


Verwijderd

Topicstarter
het moet in een gewone postgresql-database onder linux

  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 24-08 18:08

reddog33hummer

Dat schept mogelijkheden

postgresql ondersteund net als oracle triggers, procedures en transacties

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dus es rustig bekijken wat er aan procedures en functions in postgresql mogelijk is, je kan kiezen het in triggers te stoppen (en er dus absoluut geen mogelijkheid is er van af te wijken) of gewoon in een function die je in je query aanroept.

Echt moeilijk is het niet, zeker als je PL/PGSQL als taal kiest in Postgresql kan je er behoorlijk krachtige dingen mee doen. Als je liever C gebruikt kan ook dat.

Kijk hier iig es:
http://www.postgresql.org/idocs/index.php?programmer.html
en dan vooral naar deel III over procedural languages.

Verwijderd

Topicstarter
thanks all!
Pagina: 1