Access 2007: hoe per klant opties te selecteren in een voorgepoppuleerde optielijst.

Status
Niet open voor verdere reacties.

irisvanlaere

Gebruiker
Lid geworden
3 okt 2011
Berichten
5
Hallo ,

Ik ben al een tijdje aan het zoeken om in Access 2007 per klant opties te selecteren in een voorgepoppuleerde optielijst.
Een klant besteld een boot met een aantal opties, die hij uit een optielijst kiest (bv. kleur, generator, spi, zwemtrap, …). Een optie kan per klant maar 1 waarde hebben.

Ik dacht dus om volgende tabellen te creëren:
1) “Klanten”tabel: gegevens klanten
2) “Optielijst”tabel: verschillende mogelijke opties (70)
3) “Optiekeuze per klant”tabel: per klant hoeveel maal hij de optie neemt (0, 1, 2, …) en datum waarop


Voorbeeld
Klant - Optieomschrijving - Aantal - Datum
X - Optie 1 - aantal 2 - 15/9/2011
X - Optie 2 - aantal 0 - 30/9/2011
X - Optie 3 - aantal 1 - 15/9/2011
X - Optie … - aantal … - ...
X - Optie 70- aantal 1 - 15/9/2011

Y - Optie 1 - aantal 0 - 17/9/2011
Y - Optie 2 - aantal 1 - 17/9/2011
Y - Optie 3 - aantal 1 - 27/9/2011
Y - Optie … - aantal … - ...
Y - Optie 70 - aantal 0 - 27/9/2011

Hoe maak ik een voorgepoppoleerd formulier aan waarin ik per klant het aantal per optie kan invullen?

M.a.w. wanneer een nieuwe klant wordt aangemaakt, zou ik een voorgepoppuleerd formulier willen hebben:
- Met de lijst van alle opties (70), default optie aantal 0, default datum: huidige datum
- Waarin per optie het aantal en datum moet worden aangepast
En de gekozen opties automatisch gekoppeld worden aan de klant (veronderstel in tabel 3)

Indien 2 maanden later de klant nog een extra optie wilt:
- Zelfde lijst wordt geopend
- Het aantal van de betreffende optie wordt van 0 in 1 veranderd en de datum wordt aangepast

Hoop dat ik duidelijk genoeg ben en dat iemand mij kan helpen.

Bedankt alvast,

Iris
 
Er zijn twee opties: ofwel je maakt in je orders tabel 70 velden aan (Plus uiteraard het KlantID) met daarin alle opties die je wilt hebben, en op basis van die tabel maak je een formulier. Dan staan alle opties bij elkaar. Nadeel daarvan is dat je een grote tabel krijgt, met naast die 70 opties ook nog eens een keer 70 datumvelden. Bovendien weet ik uit jouw verhaal niet of alle klanten ook wel alle 70 opties bestellen; uit het voorbeeldje blijkt dat je ook nullen gebruikt, en dan is iets dus niet besteld. Neem ik aan.
Wat ik zou doen is dus een aparte tabel voor de Order_Opties maken, waarin je alleen díe regels opslaat van opties die zijn aangevraagd. In jouw voorbeeldje heeft klant X dan 3 records: Optie 1, Optie 3 en optie 70. Klant Y heeft er twee: Optie w en Optie 3.
Je kunt alle opties uiteraard op het formulier zetten, maar dat maakt je scherm redelijk onoverzichtelijk. Ik zou dan in ieder geval met tabbladen gaan werken waarin je de opties onderbrengt in groepen die bij elkaar horen. Dan heb je nog een beetje overzicht. Voor het opslaan van de gegevens zou ik het formulier ook niet-afhankelijk maken. Het opslaan doe je dan met een aparte knop, die alle gekozen opties netjes uitleest, en wegschrijft in de tabel Order_Opties. Diezelfde tabel gebruik je voor het teruglezen van de bestelde opties, zodat er mutaties gedaan kunnen worden.
 
Bedankt voor de snelle reactie.

Het formulier met de lijst van opties per klant is meer een intern document en ik zou op basis daarvan een rapport maken met de geselecteerde opties. Goed idee voor de tabbladen, daar de opties effectief per categorie zijn ingedeeld.

Wat betreft het formulier niet-afhankelijk te maken, heb ik nog 2 vragen
1ste vraag:
Ik dacht eraan om een formulier per klant te hebben met de gekozen optielijst als subformulier.
Als ik het juist versta zou ik dan de optielijst als niet-afhankelijk subformulier moeten maken -> correct?
2de vraag:
Ik heb niet veel ervaring met niet-afhankelijke formulieren. Een aparte knop maken voor het opslaan zal wel lukken. maar als ik het wegschrijf in tabel Order_Opties, hoe belet ik dat dit overschreven wordt bij de volgende klant? Of moet ik een Order_Opties tabel per klant aanmaken (wat mij niet logisch lijkt)

Bedankt alvast voor je raad

Iris
 
Laatst bewerkt:
Vraag 1 zie je goed; het subformulier is dan niet-afhankelijk. Al moet je wel de KlantID overnemen.
Bij een niet-afhankelijk formulier kun je het beste de naamgeving van de objecten zoals keuzelijsten en tekstvakken algemeen laten, dus cboKeuzelijst1, cboKeuzelijst2 etc. en txtAantal1, txtAantal2 en zo voorts.
Met een lus loop je dan door alle tekstvelden, en vul je de tabel met de opties. Omdat je Opties en Aantal aan elkaar wilt koppelen, maar ze wel in een overzichtelijke tabel wilt opslaan, zou ik voor de opties zelf geen veld maken, maar een 'virtueel' veld gebruiken. Elke keuzelijst die je uitleest geef je uiteraard een herkenbare naam, die je normaal gesproken als veldnaam zou gebruiken. Die naam zet je nu ook in het veld <Extra info> van het veld Aantal waar hij bij hoort. En eventueel ook voor het veld Datum. Dat is, begrijp ik uit je vraag, een soort drie-eenheid.
Dus het veld txtAantal1 heeft dan in de eigenschap <Extra Info> staan: Kleur|Datum. En het veld txtAantal2 heeft dan in de eigenschap <Extra Info> staan: generator|Datum.

Op basis van de eigenschap <Extra info> (Tag in het engels) het veld txtAantal vul je de tabel dan als volgt:

Code:
Function Opslaan()
Dim sVelden() As Variant
    For Each ctl In Me.Controls
        If Left(ctl.Name, 9) = "txtAantal" Then
            If ctl.Value > 0 Then
                sVelden = Split(ctl.Tag, "|")
                With CurrentDb.OpenRecordset("tOrders_Opties")
                    .AddNew
                    !KlantNr= Me.KlantID
                    !Optie = sVelden(LBound(sVelden))
                    !Aantal = clt.Value
                    !Datum = sVelden(UBound(sVelden))
                    .Update
                    .Close
                End With
            End If
        End If
    Next ctl
End Function

En zo maak je dus voor elke optie een apart record aan.

Bij het teruglezen bewandel je de omgekeerde weg; eerst controleer je of er minstens één record in [tOrders_Opties] bestaat. Is dat niet het geval, dan is er nog niks geboekt. Is dat wel zo, dan lees je de tabel [tOrders_Opties] record voor record uit, en vul je de comboboxen en velden met de ingelezen waarden.
 
Hallo,

Bedankt voor de feedback. Ik raak er nog niet helemaal aan uit en heb een voorbeeld gemaakt. Jammer genoeg lukt het mij niet om die in bijlage op te sturen. Document is een .rar bestand van 35kB. Zoekende op deze site blijkt er waarschijnlijk een probleem in de vBulletin software. Enig idee of dit reeds is opgelost?

Met vriendelijke groeten,

Iris
 
Geen idee; ik lees het wel vaker van mensen die niks kunnen uploaden. Mij lukt het doorgaans prima, dus ik weet ook niet waar het probleem ligt. Je kunt www.mijnbestand.nl eens proberen, dat gaat meestal wel goed.
 
Hallo,

Bedankt voor de tip voor het uploaden!

Zoals reeds gezegd: vrees ik dat ik er niet goed aan uit geraak met mijn beperkte access ervaring (ga nog een aantal handleidingen doornemen (o.a. deze op deze van de site) in de hoop meer wegwijs te geraken)

In bijlage vind je een vereenvoudigde versie van wat ik wil maken.
http://www.mijnbestand.nl/Bestand-E86JPEYTTLSE.rar
In het formulier "fOptie per client" zou ik dus het aantal van de gekozen opties willen ingeven (kan soms 2 zijn ook) en de datum
Automatisch moet de "prijs excl. BTW" gerekend worden per gekozen optie en een totaal van alle opties (bovenaan links).

Problemen:
1: aantal en datum kunnen ingeven (als ik nu een getal of datum ingeef verschijnt dit overal)
2: het totaal weergeven van de gekozen opties
3: deze lijst weg te schrijven zodat ik later voor die klant de gekozen opties kan zien
4: blanco optielijst (met de 20 opties) voor een nieuwe klant (dus waar aantal en datum nog moet ingevuld worden)

Bedankt alvast
Iris
 
Kan er vanavond naar kijken; ik heb op het werk nog Access 2003.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan