Toon posts:

Access97 voorraad beheer -mn SQL moet nog iets verander HELP

Pagina: 1
Acties:
  • 213 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een probleempje met access voorraad beheer.
Ik heb het zover dat de "voorraad" in de tabel "1artikelen" met een query veranderd wordt als je een bestelling invoerd.
de Update query:
UPDATE 1Artikelen AS a, 1bestellingregel AS br, 1bestelling AS b SET voorraad = voorraad + aantalin
WHERE br.Artikelnr = a.artikelnr AND b.bestelnr > br.bestelnr;
(Dat laatste gedeelte "AND b.bestelnr > br.bestelnr" is een probeersel van mij om alleen de laatste record te verwerken in de voorraad, maar tevergeefs..... )

Dit gaat doormiddel van de SAVE knop die ik gemaakt heb in een formulier.
Scriptje in de knop:
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE 1Artikelen AS a, 1bestellingregel AS br, 1bestelling AS b SET voorraad = voorraad + aantalin WHERE br.Artikelnr = a.artikelnr AND b.bestelnr > br.bestelnr"
DoCmd.SetWarnings False
Allemaal leuk en aardig maaruuuh... het werkt dus nog neit perfect! Mijn grootste probleem is dat ik bij iedere keer dat ik save, alle bestelde artikelen (dus niet alleen de artikelen van de record die ik wilde saven, maar ALLE records) bij elkaar opteld and bij de voorraad op doet.

De tabbellen zien er als volgd uit:
1Bestellingen
bestellingnr

1bestellingregel
Bestellingnr
artikelnr
aantalin

1artikelen
artikelnr
voorraad

Als je bij "aantalin" wat veranderd moet het ook de "voorraad" veranderen

Ik hoop dat iemand me kan helpen, ik krijg er een 8)7 van!!!

thzx

  • Boss
  • Registratie: September 1999
  • Laatst online: 09:19

Boss

+1 Overgewaardeerd

(waarom een 1 voor de tabelnamen?)

Ik snap niet waarom je je queries zo moeilijk maakt. Het kan toch gewoon met iets van "UPDATE 1artikelen SET voorraad = voorraad + aantalin WHERE artikelnr = 1bestellingregel.artikelnr" (moet je nog ff een goede "FROM" aanplakken geloof ik)

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Um...dat is precies wat ik gedaan heb! :P het "AS" gebeuren moest ik gebruiken omdat ik die 1 voor de tabellen heb gebruikt....daar doet access moeilijk over, dus heb ik ze maar hernoemd.
aangezien ik alles moet aanpassen als ik de 1'en weg haal laat ik ze maar lekker staan en hernoem ik gewoon alles! :) snappie?

Heeft iemand anders nog goeie tipzz?

  • Boss
  • Registratie: September 1999
  • Laatst online: 09:19

Boss

+1 Overgewaardeerd

Geen tips, maar nog een vraagje:
Waarom b.bestelnr > br.bestelnr?
Kan dat ook niet gewoon een = zijn?

Als je dr echt niet uitkomt kan je me evt de tabellen wel mailen. Die query kan echt niet zo moeilijk zijn, maar zo 'uit t hoofd' vind ik het altijd een beetje vaag.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
het was maar een testje. Ik dacht dat zodra je een nieuwe bestelling aanmaakt het bestelnummer in de ene tabel groter is dan het bestelnummer in de oude tabel. Zodra je hem saved zijn ze pas gelijk. Dus zou hij met deze code alleen de voorraad updaten als de bestelling nieuw is.

Tis maar een gedachtengang hoor.... ik weet niet of het echt zo is... misschien wat ver gezocht. :O

Wat is je mail adres? dan mail ik het wel even :) zou wel kool wezen als je me kan helpen! _/-\o_

  • Boss
  • Registratie: September 1999
  • Laatst online: 09:19

Boss

+1 Overgewaardeerd

In de queries die je gemaakt hebt, heb je geen relaties aangegeven. Access 'weet' dus niet welke bestelregels bij welke bestelling horen. Daardoor worden alle bestellingen + alle bestelregels verwerkt.
De juiste query voor de bestelling zou zijn:

code:
1
2
UPDATE 1Artikelen INNER JOIN (1Bestelling INNER JOIN 1BestellingRegel ON [1Bestelling].Bestelnr = [1BestellingRegel].Bestelnr) ON [1Artikelen].Artikelnr = [1BestellingRegel].artikelnr SET [1Artikelen].voorraad = [voorraad]+[aantalin]
WHERE ((([1BestellingRegel].Bestelnr)=" & Bestelnr & "));

Let vooral op het laatste stukje "& Bestelnr & ". Daar wordt dus het bestelnummer van het huidige formulier/record ingevuld. Op die manier worden dus alleen de bestelregels die het bestelnummer hebben van het huidige record verwerkt. Ook werkt Access prima met tabelnamen die met een 1 beginnen. De SELECT ... AS ... is dus niet nodig.

Op dezelfde manier kan je de voorraad laten aanpassen na een verkoop.

[ Voor 4% gewijzigd door Boss op 13-02-2004 12:07 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • IS128AE
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:24
En wil je ervoor zorgen dat alles wordt opgeslagen (en niet alleen het laatst bewerkte record) dan kan je de volgende code erin zetten:

DoCmd.RunCommand acCmdSaveRecord
DoCmd.RunCommand acCmdRefresh

ITIL sucks ;-)


  • Boss
  • Registratie: September 1999
  • Laatst online: 09:19

Boss

+1 Overgewaardeerd

Hoe bedoel je? Sowieso wordt ieder record opgeslagen als je naar een ander gaat. Het laatst bewerkte record wordt ook opgeslagen bij afsluiten van het formulier.
En een acCmdRefresh is al helemaal niet nodig in dit geval.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1