Formulieren openen via keuzevak

Status
Niet open voor verdere reacties.

BananaJuice

Gebruiker
Lid geworden
20 aug 2009
Berichten
14
Er is mij gevraagt om een Acces database te maken, waar je via een keuzevak de software kan selecteren, en dan als je op openen klikt, opent een nieuw formulier met daar op de gegevens van die software.

Ik denk dat dit misschien vrij simpel kan zijn, ik heb al even zitten knoeien in vb.
Ik ben student informaticabeheer (middelbaar, Ga naar 6de) , dus ben nog beginnent met Acces en VB

Een screenshot voor te verduidelijken.
keuzemenu.jpg
 
Ik denk dat het zou moeten lukken door in het formulier de besturingselementbron van elk tekstvak aan te passen.
dan wordt het iets van; selecteer de rij in de tabel, en haal de index uit de keuzelijst.
Maar ik heb geen idee hoe dit moet via de opbouwfunctie.
 
Ik heb nu al gevonden (dankzij de andere topic) hoe je het geselecteerde item in een tekstvak plaatst, zie onder.

Code:
=[Forms]![Keuzemenu]![lstSoftware].[column](0)

Het moeilijke (denk ik) word nu alle data die bij de software hoort, in tekstvakken op het 2de formulier te zetten.
 
Als je alle veldinformatie voor het tweede formulier in de keuzelijst opneemt, al dan niet verborgen om de keuzelijst niet te onoverzichtelijk te maken, kun je op dezelfde manier (met Column(n)) variabelen vullen vanuit de keuzelijst.
Vervolgens kun je met OpenArgs het tweede formulier openen, en het OpenArgs argument overzetten op het tweede formulier.

In bijgaand voorbeeld kun je wel uitvogelen hoe e.e.a. werkt. Anders hoor ik het wel!

Michel
 

Bijlagen

Laatst bewerkt:
Als je alle veldinformatie voor het tweede formulier in de keuzelijst opneemt, al dan niet verborgen om de keuzelijst niet te onoverzichtelijk te maken, kun je op dezelfde manier (met Column(n)) variabelen vullen vanuit de keuzelijst.
Vervolgens kun je met OpenArgs het tweede formulier openen, en het OpenArgs argument overzetten op het tweede formulier.

In bijgaand voorbeeld kun je wel uitvogelen hoe e.e.a. werkt. Anders hoor ik het wel!

Michel

Uit het voorbeeld kan ik niet veel afleiden maar, met die kolommen bijvoegen en verbergen lukt het wel om ze in het tekstvak te krijgen.
En kan je dat van OpenArgs eens uitleggen?
Moet je de databank hebben of zal het lukken zonder? (veel staat er nog niet in)
 
In het voorbeeld zit nog een verborgen formulier. Dat kun je toonbaar maken via <Extra>, tabblad Weergave, optie <Verborgen Objecten>. Daarna kun je op wat mij betreft de optie Verborgen wel uitzetten bij de eigenschappen van het formulier frmPrijslijst_Toevoegen. Is in het voorbeeld niet handig dat-ie verborgen is ;)
De truc met OpenArgs is eigenlijjk heel simpel: je hebt een hoofdformulier waarin je een selectie maakt. Vervolgens wil je een aantal gegevens van dat record uit het hoodformulier gebruiken op een tweede formulier. Die gegevens wil je uiteraard niet over hoeven te tikken.
Via een knop kun je, in het voorbeeld onder de knop <Prijs toevoegen> een formulier openen met de opdracht DoCm.Openform. Als je daar de code van bekijkt, zie je dat er een filterstring wordt gemaakt, waarbij een aantal velden uit het hoofdformulier bij elkaar wordt gezet, gescheiden door een | teken.
Deze filterstring wordt als laatste element toegevoegd aan de DoCmd opdracht.
Hiermee geef je het tweede formulier a.h.w. een extra tekststring mee, die in het tweede formulier weer uit elkaar wordt getrokken.
Als je dan ook het tweede formulier bekijkt, zie je dat met de regels
If Not IsNull(Me.OpenArgs) Then
sArgs = Split(Me.OpenArgs, "|")
het argument OpenArgs in een matrix variabele wordt gezet. Deze constructie moet wel via een matrix, omdat je in een OpenArgs argument maar één string kunt opnemen. Wil je meerdere variabelen gebruiken, dan moet je die dus kunnen splitsen.

Vervolgens wordt de matrixvariabele sArgs op de verschillende elementen van het formulier gezet. Dit hele proces doe je in het Load-event van het tweede formulier, want je wilt de gegevens bij openen al ingevuld hebben.

Als je het handiger vindt als ik het op jouw db toepas, dan mag je hem uiteraard wel posten, zal ik er een blik op werpen!

Michel
 
nu heb ik nog een probleem,
De tekstvakken worden nu wel gevuld, maar er moet ook een memo kunnen worden geopend.
En aangezien die niet bij de kolommen staat weet ik niet hoe.


De database zit erbij, niet dat er al veel inzit.
 

Bijlagen

Hoe wil je dat memoveld opslaan? Kun je dat niet gewoon aan de tabel toevoegen? Want dan lijkt mij dat je het memoveld er gewoon bij kan zetten op het formulier. Of bedoel je het memoveld [Installatieprocedure] uit de tabel Software?
Ik zie wel dat je de velden in het formulier [Gegevens software] volledig afhankelijk hebt gemaakt van het keuzeformulier. Persoonlijk zou ik dat niet doen; ik zou het formulier [Gegevens software] koppelen aan de tabel Software, zodat je ook het memoveld kunt gebruiken, en het hoofd(selectie) formulier om het juiste record in het formulier [Gegevens software] te openen. Daarvoor heb je dan alleen het SoftwareID nodig, dat je uit de keuzelijst ophaalt. Dan kan de hele constructie met Column(1) etc. op de velden in het subformulier weg, want je ziet de veldgegevens direct uit de tabel. En kunt ze dus ook heel simpel dan bijwerken/updaten.
Maak het niet te moeilijk, zou ik zeggen...

Michel
 
Hierbij een versie met een extra knop, die het bovenstaande demonstreert.

michel
 

Bijlagen

Code:
Private Sub cmdFormOpenen_Click()
Dim iSoftware As Integer
iSoftware = Me.lstSoftware.Value
DoCmd.OpenForm "GegevensSoftware", , , "SoftwareID=" & iSoftware
End Sub

Is dit de code die alles op zijn plaats zet?
Want ik probeer nu de installatieprocedure in een apart formulier te plaatsen (geen idee waarvoor dat goed is..) maar zo willen zij het.
Ik heb al wat geknoeit maar krijg er niets in.
 
De code onder de knop cmdFormOpenen leest het SoftwareID uit, en gebruikt dat als filtering voor het formulier GegevensSoftware.
Wat is het probleem waar je tegen aan loopt?

Michel
 
De code onder de knop cmdFormOpenen leest het SoftwareID uit, en gebruikt dat als filtering voor het formulier GegevensSoftware.
Wat is het probleem waar je tegen aan loopt?

Michel

Dus eigenlijk zou ik gewoon de naam van het formulier moeten veranderen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan