alternatief combobox

Status
Niet open voor verdere reacties.

Tony De Wilde

Gebruiker
Lid geworden
8 mei 2009
Berichten
16
Graag even uw aandacht voor volgende vraag . Had graag iets geweten zit hier met een stuk software die ik graag zou willen namaken voor andere doeleinden. (De software is aangekocht en beveiligd) .
Stel dat ik een factuur wil maken , iedere record is een factuur en alle records behoren tot hetzelfde formulier. Op zo een factuur staan verschillende velden : het veld leverancier (textvak met opdrachtknop naast) , de velden naam , adres en postcode. De gekochte goederen aantallen en totaal prijs.
Wanneer er nu op de opdrachtknop geklikt wordt naast het veld leverancier , gaat er een ander formulier open ik denk toch dat het een formulier is , de records zijn doorlopend geschikt onder elkaar en is een lijst van alle leveranciers met de naam , adres en postcode. Bij dubbelklikken op zo een record worden deze waarden gezet in het formulier waar de factuur wordt aangemaakt. Men kan nadien nog eventueel de straat zelf aanpassen .
Mijn vraag hoe werkt zo iets ??.
Verder had ik nog een vraag ik kan ook zoiets maken via een combobox in het formulier van de aankoopfacturen en dan via de column() eigenschappen die de ontbrekende velden op deze zelfde record invullen . Mijn vraag hierbij
Tijp ik de expressie in de besturingselement bron ? van de controls naam , adres en postcode ?
Gebruik ik VBA zodat ik de waarden kan toewijzen aan de controls naam, adres en postcode (die in dit geval afhankelijke besturingselementen zouden zijn?, als ik dit goed begrijp kan dit niet expressies mogen volgens de normalisatie normen niet worden opgeslagen )
Gebruik ik beter dlookup ipv column() ?.
 
Hallo Tony,

Als ik het zo lees, gebruikt de applicatie een knop om een nieuw (doorlopend) formulier te openen, waarin je een leverancier selecteert. Vervolgens worden de gegevens van de geselecteerde leverancier met een dubbelklik gekopieerd naar het oorspronkelijke formulier, en wordt het tweede formulier gesloten.

Dit systeem klinkt in vrij omslachtig, omdat je alles ook kunt vervangen door een Keuzelijst met Invoervak op je Factuurformulier. In deze keuzelijst gebruik je een query om de leveranciersgegevens die je wilt zien te selecteren. Vervolgens heb je dan een aantal Tekstvakken, die je een Besturingselementbron geeft die de verschillende extra velden uit de keuzelijsten toont.
Voorbeeldje: stel dat je een keuzelijst hebt gemaakt die cboLeverancier heet. Deze heeft een query als basis, met de velden LeverancierID, LevNaam, LevAdres, LevHuisNr, LevPostCode, LevPlaats.
De keuzelijst laat bijvoorbeeld het LeverancierID zien.
Het tekstvak txtLevNaam krijgt dan de Besturingselementbron: =cboLeverancier.Column(1)
Het tekstvak txtLevAdres krijgt dan de Besturingselementbron: =cboLeverancier.Column(2)
Het tekstvak txtLevHuisnr krijgt dan de Besturingselementbron: =cboLeverancier.Column(3)
Het tekstvak txtLevPostCode krijgt dan de Besturingselementbron: =cboLeverancier.Column(4)
Het tekstvak txtLevPlaats krijgt dan de Besturingselementbron: =cboLeverancier.Column(5)
Enzo voorts...

Als ik dit goed begrijp kan dit niet expressies mogen volgens de normalisatie normen niet worden opgeslagen ) Gebruik ik beter dlookup ipv column() ?
Normalisatienormen komen hier eigenlijk niet bij om de hoek kijken; dat geldt pas op het moment dat je alle adresgegevens behalve in je tabel Leveranciers ook nog eens in je tabel Facturen opslaat. Dat is eigenlijk niet de bedoeling: in je tabel Facturen sla je het LeveranciersID namelijk op. Hiermee weet je de leverancier, en weet je dus ook het adres van de leverancier. Door op het formulier in te stellen of een adres mag worden veranderd, kun je een tijdelijk adres creeëren voor die ene factuur. In de tabel Leveranciers hou je dan je bestaande adres. Dus een volgende factuur krijgt dan weer het goede adres.
Wil je via het formulier Facturen de adresgegevens kunnen wijzigen, dan is de constructie met het tweede formulier wel handig, omdat je daarmee je adresgegevens uit de tabel haalt. Waarschijnlijk kun je in dat formulier ook muteren. De totale werkwijze is echter een stuk omslachter dan de keuzelijst, waar je immers met één handeling (record selecteren in keuzelijst) gelijk alle adresgegevens hebt ingevuld. Eventueel kun je nog een knop maken om een specifiek adres te muteren, maar dat is een ander verhaal....
Op het laatste puntje: ik zou nooit DLookup voor dit gebruiken; de keuzelijst met Column(#) is veel en veel sneller, en makkelijker...
 
Beste
ik begrijp uw reactie de tabel van het formulier slaat dan in feite enkel de Id van de leverancier op .
MAAR ,MAAR

Het nadeel van een combobox is het volgende stel dat je een leverancier zoekt ... en de lijst is zeer lang wat dan?. De lijst wordt enkel gefilterd op de eerste letter die je intypt wat wanneer er zo danig veel leveranciers zijn dat de beginletter niet altijd gekend is en dat er moet gefilterd worden dit zou wel kunnen in een tweede formulier met een lijst van waarden , waarop dan filters staan , die bijvoorbeeld zoeken op een stukje tekst of een combinatie van filters ?. Eenmaal gevonden dubbelklikken en overdracht eerste formulier ....
 
Da's niet waar wat je zegt; als je een naam zoekt begin je met de eerste letter in te typen, waarna de volgende letter die je typt de lijst verkort tot leveranciers die met die twee letters beginnen. Bij elke letter wordt de lijst dus nauwkeuriger. Als je de lijst vervolgens voldoende lang maakt (30 rijen i.p.v. de standaard 8 rijen) kom je al een heel eind. Zeker als je ook de kolombreedtes en lijstbreedte nog eens zodanig instelt dat alles netjes leesbaar is.
 
Nog een aanvulling hierop:
Ik snap uiteraard wel wat je probleem (ongeveer) is. Met een extra tekstvak en selectievakje kun je de bron van de Leveranciers keuzelijst simpel baseren op een filtertekst die je intypt.

Code:
Private Sub chkBegin_AfterUpdate()
Call FilterMaken
End Sub
Code:
Private Sub txtZoek_Change()
Call FilterMaken
End Sub
Code:
Private Sub FilterMaken()
Dim sSelect As String
If Me.chkBegin = -1 Then
    sSelect = "Like '"
Else
    sSelect = "Like '*"
End If
Me.txtZoek.SetFocus
strSQL = "SELECT Medewerker_ID, Name FROM tbl_Medewerker WHERE Name " & sSelect & Me.txtZoek.Text & "*' ORDER BY Name"
With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
        Me.cboEmployee.RowSource = strSQL
        Me.cboEmployee.Requery
    Else
        MsgBox "Deze combinatie levert niks op..."
        Me.txtZoek.SetFocus
        Me.txtZoek = ""
    End If
    .Close
End With
End Sub
Je moet uiteraard wel ruimte hebben voor zo'n extra tekstvak, maar dat is eigenlijk de enige voorwaarde. Persoonlijk zou ik hier de voorkeur aan geven boven het starten van een extra formulier. Het lijkt mij meer werk...
 
slimmerik

Geachte

Hoe komt het dat jij dat allemaal weet ? , zou me graag verdiepen in VBA voor ACCESS welke boeken raad jij aan ?. Op het net ligt alles een beke versnippert . Ik heb een zeer beperkte kennis van ACCESS .

Graag had ik toch ook eens geweten hoe het zou kunnen werken met een 2 de formulier gaat dit via docmd.openform ,,, openarguments ?.
 
Tja, hoe weet je iets? Meestal (in mijn geval) dan toch door veel proberen, en zo af en toe eens een boek erbij. Maar ik maak zelden een boek af, dus daar zit het 'm ook niet in ;) Nieuwsgierig blijven, denk ik...
Er zijn, denk ik, geen slechte boeken mee op de markt; door de jaren heen zijn er zoveel nieuwe versies van de Office op de markt verschenen, dat de slechte (slecht verkopende) boeken zichzelf wel uit de markt hebben gewerkt. De boeken die je nu koopt zijn redelijk uitgekristalliseerd; alle foutjes zijn er wel uit. Het gaat dan dus om de toon die het boek aanslaat; leest het makkelijk, vind je de layout overzichtelijk. Dat soort vragen. En besteden ze voldoende aandacht aan de onderwerpen die je belangrijk vindt. Kies een boek dat daar zoveel mogelijk bij aansluit, zou ik zeggen... Als je niet van een specifieke versie afhankelijk bent, kun je voor veel minder geld een boek over een oudere versie aanschaffen; de db technieken zijn immers niet veranderd, en de programmeertaal VBA ook nauwelijks. Nu verschijnen bijvoorbeeld de boeken over Office 2010, en dat houdt in dat de boeken over 2007 nu voor minder geld in de aanbieding liggen. Omdat die twee niet zoveel verschillen, wat ik er zo van gezien heb, kun je makkelijk een 2007 boek kopen.
Zelf gebruik ik nog steeds met veel plezier de Access 2000 boeken, terwijl ik toch al een tijdje met 2003 werk. De verschillen die ik tegenkom, zoek ik wel in de Help op, als ik tegen problemen aanloop.

Wat betreft het werken met twee formulieren: je opent vaak inderdaad het tweede formulier met OpenArgs, als je het tweede formulier tenminste wilt vullen op basis van het eerste formulier. In jouw geval zou dat niet eens nodig zijn. Wel wil je de gegevens van het tweede formulier 'overhalen' naar het eerste formulier. Dat betekent, dat je ofwel een string meegeeft met het sluiten van het tweede formulier, of het eerste formulier (bijvoorbeeld) verbergt i.p.v. te sluiten, zodat je eenvoudig het eerste formulier kunt bijwerken.
Er zijn dus verschillende manieren...
 
Hoe komt het dat jij dat allemaal weet ? , zou me graag verdiepen in VBA voor ACCESS welke boeken raad jij aan ?

Hallo Tony,

Als beginner in access heb ik veel opgestoken door veel met de wizard te werken en de code's te bestuderen die door de wizard werden aangemaakt. Tevens kun je gemaakte macro's converteren naar VBA. Ook daar steek je veel van op.

Verder is het bestuderen van de noordenwinddatabase ook heel leerzaam. Daar staan veel mooie voorbeelden in.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan