Waarden in velden naar tabellen "schrijven"

Status
Niet open voor verdere reacties.

remcop1989

Gebruiker
Lid geworden
29 mrt 2012
Berichten
492
Ik heb een formulier met een aantal tekstvakken en keuzelijsten waar informatie ingetypt en/of geselecteerd kan worden. Deze informatie komt deels uit eigen invoer van de gebruiker en deels uit informatie-verschaffende-tabellen.

Vervolgens wil ik nu dat middels een druk op een knop de inhoud van deze tekstvakken en keuzelijsten naar andere tabellen wordt weggeschreven en hier ook een leuk rapport van gemaakt wordt.

Ik loop alleen heel even vast hiermee....Ik heb de handleidingen al bekeken, maar die hebben me tot nog toe niet veel verder geholpen.
 
Graag wat beter uitleggen wat de bedoeling is.... Doorgaans baseer je een formulier op een tabel, en worden de waarden daaruit automatisch opgeslagen. Er is dus geen enkele noodzaak om dat middels een knop te doen. Maar jij wilt de gegevens naar verschillende tabellen wegschrijven?
Om te beginnen klinkt dat als een slechte database; je wilt je gegevens bij voorkeur maar één keer opslaan, dit op grond van gegevensintegriteit en data-redundantie. Dus in meerdere tabellen wegschrijven, klinkt heel erg verkeerd. Als je de data in één tabel hebt opgeslagen, kun je met queries allerleid verbanden leggen tussen tabellen, en dan zie je de gegevens weer netjes terug. Dus nogmaals: meerdere keren opslaan????
 
Nou, het heeft als doel om offertes op te stellen en later terug te zoeken. Ik heb volgende tabellen:

- producten
Velden: artikelcode, omschrijving, prijs, minimale huurperiode
Hieruit wordt informatie gehaald mbt de producten die de klant aangevraagd heeft. Deze informatie moet gekoppeld worden aan een offertenummer zodat per offerte kan worden teruggekeken welke producten aangevraagd zijn.

- gebruikers
Velden: GebruikersID, naam en initialen
Ten behoeve van inloggen en koppelen van offertes aan gebruikers zodat later gezien wordt wie welke offerte heeft gemaakt

- klanten
Velden: klant-id, bedrijfsnaam, adres, postcode, plaats en land
Hier word info uit gehaald zodat offertes aan een specifieke klant worden gekoppeld en het adres boven aan de offerte getoond kan worden

- contactpersonen
Velden: Klant-id, contactpersoon-id, achternaam, voornaam, telefoonnummer en emailadres
Contactpersonen van de klanten (bedrijven) aan elkaar gekoppeld middels klant-ID

- offertes
Velden: Offertenummer, klant-ID, contactpersoon-ID, gebruikers-ID, onderwerp, soort offerte (huur of koop), taal, periode, methode van transport en verdere gegevens specifiek voor de betreffende offerte
Gegevens met betrekking tot deze specifieke offerte gekoppeld aan klant, persoon en gebruiker middels het ID

- offertedetails
Velden: Offertenummer, artikelcode, door klant gewenste hoeveelheid en prijs
De producten die door de klant gevraagd worden middels offertenummer gekoppeld aan de offerte en middels artikelcode gekoppeld aan de producten.

In mijn (amateuristische) ogen een mooie database zonder dubbele informatie. Alleen het nodige wordt door gebruikers zelf ingevoerd. Info wordt opgehaald uit 'producten', 'gebruikers', 'klanten' en 'contactpersonen'. Hier word geen info heen geschreven (behalve dan een nieuw product of klant aan de database toegevoegd). De tabellen 'offerte' en 'offertedetails' dienen ter opslag van informatie. Bepaalde gegevens moeten hier door gebruikers zelf toegevoegd aan tabellen terwijl andere gegevens middels sleutels (ID's bijvoorbeeld) gekoppeld worden.

Ik heb nu een formulier waarop gebruikers inloggen door kiezen van hun ID waar automatisch de naam bij wordt gezocht. het Offertenummer wordt automatisch ingevuld (met DMax wordt de hoogste waarde opgezocht in de tabel [offertes].[offertenummer] voor betreffende gebruikers-ID). Offerte-specifieke gegevens worden door de gebruiker handmatig ingevoerd omdat deze gewoon echt bij iedere offerte anders zijn (denk aan periode, transport etc.). Vervolgens word het klant-ID en contactpersoon-ID gekozen door de gebruiker zodat automatisch boven aan de offerte de juiste klantadres geplaatst word (dit wordt dus opgezocht aan de hand van de ID's.
Voor de producten van de offerte met omschrijving, artikelcode etc. gebruik ik een subformulier van de tabel "offertedetails". Deze info wordt dus al automatisch opgeslagen in de tabel "offertedetails".

Ik zoek nu dus een manier om de velden van de tabel "offertes" te vullen met de data die ingevuld wordt in de tekstboxen/comboboxen op het formulier. Dan gaat het dus om de velden zoals hierboven bij "- offertes" genoemd.

Bovendien bestaat de wens dat het formulier er luk ontworpen uitziet (dus met bijvoorbeeld velden en knoppen enzo en geen saaie layout
 
Laatst bewerkt:
Dan snap ik nog steeds de vraag niet waar je mee begint. Want zoals je het omschrijft, klopt het vrij behoorlijk. Je denkt een beetje te licht over de tabel Offerte (en Offertedetails) want dat is de basis van je database, en de legitimatie ervan. Denk deze twee tabellen weg, wat hou je dan over? Een zooitje tabellen (Klanten, Artikelen) waar je verder niks mee kunt. Het hart van je db, en daarmee het belangrijkste stuk, is je tabel met Offertes! Dat belang kun je voor jezelf makkelijk terughalen als je bedenkt waarom je met deze database bent begonnen. Dat is waarschijnlijk omdat je offertes (met de offerteregels) op een goede manier wilt kunnen vastleggen. De overige tabellen zijn daaraan ondergeschikt.
En dat maakt je formulier Offertes dus het belangrijkste formulier.... En daarom zou je het formulier ook moeten baseren op de tabel Offertes. En aangezien die tabel de hoofdsleutel is voor Offertedetails, is die tabel de bron voor het subformulier Offertedetails. En lees nu je eigen vraag nog eens na :)
 
Ik begin langzaamaan meer inzicht te krijgen. Ben nu thuis heel even opnieuw begonnen in Access 2010 (op kantoor is dat nog 2003) en ik moet zeggen, het wordt me duidelijker en duidelijker. Ik heb de tabellenstructuur hetzelfde gelaten maar begin nu met een heel simpel formulier gebaseerd op de tabel Offertes. Morgen gaat de laptop dus mee naar kantoor, want Access 2010 werkt uiterst aangenaam, beter dan 2003.
 
Nog een vraag in dit kader:

Als ik een formulier maak op basis van een tabel dan zijn de tekstvakken etc in het formulier uiteraard gebonden aan de velden van de tabel. Ik wil een enkel veld echter voorzien van een functie als DLookup of Dmax. Dit staat in hetzelfde vak van 'eigenschappen' van het tekstvak als de 'binding' naar de tabel.
Hoe kan ik dus een aan een tabel gebonden veld voorzien van een functie zonder dat dit invloed heeft op e "binding"

Helpt deze code dan?
Code:
Private Form_Load()
  Me.MijnTekstvak.DefaultValue = DMax(......)
End Sub
 
Laatst bewerkt:
Omdat ik wil dat het veld 'offertenummer' van de tabel 'offertes' voor de huidige gebruikerID het laatst gebruikte offertenummer zoekt in de tabel offertes en hier 1 bij optelt. Iedere gebruiker heeft namelijk zijn eigen nummers. Zo kan de een bij 20 zijn en de ander bij 30.
Ik denk vast weer te moeilijk waardoor er een abdere oplossing is, en die hoor ik dan ook graag...;-)
 
Bedenk me net dat dit ook in de eigenschap 'standaardwaarde' zou kunnen. Even proberen zo.
 
Oké, het lukt al aardig. Ik heb nu het formulier "Offertes" zoals ik het wil, gebaseerd op de tabel "Offertes. En inderdaad: ingevoerde gegevens worden direct weggeschreven naar de betreffende tabel.

Echter, de gegevens worden nu direct bij invoer naar de tabel weggeschreven en dat kan (in mijn ogen) leiden tot vervuiling van de database. Het kan bijvoorbeeld voorkomen dat een offerte tijdens het invoeren afgebroken moet worden en de tot dan ingevoerde gegevens niet in de tabel opgeslagen hoeven te worden.....hoe kan dit opgelost worden? :)

(dit was eigenlijk ook een van de redenen dat ik zo'n "opslaan" knop wilde. Zodat gegevens pas in de tabel worden opgenomen bij goedkeuring van de gebruiker)
 
Laatst bewerkt:
Je kunt een record natuurlijk altijd verwijderen. En tussentijds afbreken... bedoel je daarmee dat er eerst slechts een deel wordt ingevoerd, en op een ander moment de rest?
 
Nee, dat bedoel ik niet. Zie nu dat ik in het andere topic precies dezelfde vraag stel, dus nogmaals de uitleg:

Ik heb nu dus dat (eerste!) formulier (ik bedoel dus NIET de dialoog). Deze is gekoppeld aan de tabel. Alles wat ik op dat formulier invul word ook vrijwel meteen in de tabel opgeslagen. Als ik nu dus aan een offerte begin en hem halverwege het invullen wil/moet annuleren heb ik wel de al ingevulde gegevens in de tabel staan. Dit zorgt natuurlijk voor (uiterst ongewenste) vervuiling. Daarom dat ik hier/ergens anders vroeg naar een "knop" waarmee de gebruiker alles op het formulier pas naar de tabel overzet zodra hij dit goedkeurt.

De offerte word in 1 keer ingevoerd. Maar als een gebruiker halverwege (om wat voor reden dan ook) wil/moet stoppen met de offerte dan leid dit tot het bovenstaande....: de gegevens die al ingevoerd zijn, zijn ook al in de tabel opgeslagen terwijl deze er dus eigenlijk niet in horen (immers wilde/moest de gebruiker stoppen met invullen). De record moet nu dus handmatig verwijderd worden omdat hij er niet in hoort (de offerte is immers tijdens invullen geannuleerd)
 
Volgens mij heb je nu dezelfde vraag in twee topics lopen; dat is behoorlijk verwarrend aan het worden :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan