Toon posts:

[acces] 2x combobox

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

Verwijderd

Topicstarter
Ik heb het volgende:

Ik heb een tabel zoals onderaan te zien op het plaatje
Ik heb een formulier voor gebruikers (zie plaatje onderaan)

1. De gebruikers moet eerst in de eerste combobox het bedrijf selecteren.
De berijfsgegevens zoals adres enzo worden vervolgens weergegeven
2. De gebruiker kan dan in het tweede combobox een factuur kiezen die dit bedrijf nog open heeft staan (niet betaald dus).
3. Vervolgens kan hij op een knop drukken waardoor er een aanmaning wordt verstuurd aan de hand van de gegevens op het formulier.

Mijn probleem is het volgende:
Als ik in de eerste combobox een bedrijf selecteer moet ik in de tweede combobox alleen de facturen van dat bedrijf kunnen zien. Maar dat lukt niet.

Verder wil ik graag dat als er op de knop print wordt gedrukt (die is nog niet aanwezig op het formulier) er aanm 1 (aanmaning 1) wordt aangevinkt en als dat al aangevinkt is aanm 2 wordt aangevinkt. Verder moet de knop print de gegevens die op dat moment op het formulier staan uitgeprint worden op een "sjabloon" , een rapport dus waar alles op de juiste plek staat ivm al aanwezige bedrijfslogo's en enveloppen met adresvensters.

Mensen, ik zit nu al twee volle dagen met deze problemen de haren uit mijn hoofd te trekken en ik kom er echt niet uit. Ik heb ook al gezocht op GOT maar ik ben niet zo heel erg goed weg Acces, er wordt gegooid met codes waar ik geen raad mee weet, maar ik heb van alles al geprobeerd.

De illustraties (tabel is goed, formulier is voorbeeld):
Afbeeldingslocatie: http://users.skynet.be/bk315211/tabel.jpg
Afbeeldingslocatie: http://users.skynet.be/bk315211/formulier.jpg

Verwijderd

Verwijderd schreef op 27 juli 2004 @ 18:07:Mijn probleem is het volgende:
Als ik in de eerste combobox een bedrijf selecteer moet ik in de tweede combobox alleen de facturen van dat bedrijf kunnen zien. Maar dat lukt niet.
Voor zover ik weet is dit (evenals je andere wensen) niet met de wizards te realiseren en zal je met zelfgemaakte formulieren en Visual Basic aan de slag moeten. Het is op zich niet zo moeilijk, maar erg tijdrovend als het je eerste keer is. In jouw geval zou ik professionele hulp inschakelen.

(Overigens, is het niet makkelijker om alle openstaande facturen weer te geven (dus niet in een combobox) nadat je een klant geselecteerd hebt?)

Verwijderd

Topicstarter
Verwijderd schreef op 27 juli 2004 @ 19:43:
[...]

Voor zover ik weet is dit (evenals je andere wensen) niet met de wizards te realiseren en zal je met zelfgemaakte formulieren en Visual Basic aan de slag moeten. Het is op zich niet zo moeilijk, maar erg tijdrovend als het je eerste keer is. In jouw geval zou ik professionele hulp inschakelen.

(Overigens, is het niet makkelijker om alle openstaande facturen weer te geven (dus niet in een combobox) nadat je een klant geselecteerd hebt?)
Ja okey, mar dat realiseren met VB en zelfgemaakte formulieren dat zou ik graag zelf willen doen.

Dat van het weergeven van openstaande facturen is wel makkelijker, maar hoe realiseer ik dan dat je een bepaalde openstaande factuur kan selecteren en daarvan een aanmaning kan sturen zoals al eerder beschreven?

Verwijderd

Verwijderd schreef op 27 juli 2004 @ 19:58:Ja okey, mar dat realiseren met VB en zelfgemaakte formulieren dat zou ik graag zelf willen doen.
Zorg dan dat je de uitgebreide (VB) help-bestanden hebt geinstalleerd, en lezen maar. . .
Dat van het weergeven van openstaande facturen is wel makkelijker, maar hoe realiseer ik dan dat je een bepaalde openstaande factuur kan selecteren en daarvan een aanmaning kan sturen zoals al eerder beschreven?
In een list-box kun je een selectie maken (met muis of toetsen) en deze gebruiken om de aanmaning(en) te maken en de aanmaningsstatus te updaten.

Verwijderd

Topicstarter
Verwijderd schreef op 27 juli 2004 @ 20:09:
[...]
Zorg dan dat je de uitgebreide (VB) help-bestanden hebt geinstalleerd, en lezen maar. . .


[...]
In een list-box kun je een selectie maken (met muis of toetsen) en deze gebruiken om de aanmaning(en) te maken en de aanmaningsstatus te updaten.
Ja, dit wist ik wel, maar hoe en welke code's gebruik je dan? Ik ben al bezig geweest met de help bestanden, ik heb lopen zoeken op got en op internet, maar als iemand mij al een klein beetje op weg kan helpen ben ik al harstikke blij!

Als het nodig is kan ik de database zelf wel op internet zetten, als personen mij willen helpen of op weg helpen. Ik e-mail dan het adres wel...

Verwijderd

Verwijderd schreef op 27 juli 2004 @ 22:02:Ja, dit wist ik wel, maar hoe en welke code's gebruik je dan? Ik ben al bezig geweest met de help bestanden, ik heb lopen zoeken op got en op internet, maar als iemand mij al een klein beetje op weg kan helpen ben ik al harstikke blij!

Als het nodig is kan ik de database zelf wel op internet zetten, als personen mij willen helpen of op weg helpen. Ik e-mail dan het adres wel...
Ik begrijp dat je graag een kant-en-klare oplossing voor je probleem wil hebben. Mijn probleem is dat het ruim 6 jaar geleden is dat ik voor het laatst serieus met Access (Office 97 dus, welke versie gebruik jij?) bezig ben geweest en dat ik momenteel weinig tijd heb om alles weer op te graven.

Los van dit probleem is het mijns inziens erg lastig(/omslachtig) om hier op het forum uit te leggen hoe je precies jouw gewenste functionaliteit bewerkstelligt.
Een basis-aanzet: Bepaal welke functionaliteit je formulier moet hebben (1. een combo-box {source: query met alle klanten} met alle klanten die na een keuze {OnUpdate: query met alle facturen van die klant met filter: ongefactureerd} de 2. text-boxen update met gegevens van de klant en de 3. list-box vult met vier kolommen (1: verborgen factuur-ID (indien nodig) 2: factuurnummer 3: aanmaning1 4: aanmaning2 [5: opmerking bij factuur, datum aanmaning?]). Verder heb je minstens een 4. button {OnClick: code om de klant/factuur-gegevens in je Word-template te plaatsen en om de aanmanings-status in je DB aan te passen} om de aanmaning(en) te printen en een 5. button om alles te cancellen/het formulier te sluiten.) en schrijf code voor de gewenste properties van je objecten op je formulier (zie de {} hierboven).

Ik zal binnenkort eens kijken of ik wat oude bestanden kan opduikelen die je als voorbeeld kunt gebruiken, indien succesvol mail ik je wel (check dus even of je profiel nog klopt).

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Ik heb even een testformuliertje in elkaar gezet wat ongeveer doet wat jij wilt.
De twee comboboxen heb ik cboKlant en cboRekeningNr genoemd.

In dit geval zijn de properties/eigenschappen Rowsource en BoundColumn van belang. In Rowsource staat welke gegevens er opgehaald moeten worden en in BoundColumn staat uit welke kolom de waarde gehaald moet worden.

De boundcolumn van cboKlant heb ik als 2 en de Recordsource heb ik als volgt:
code:
1
2
SELECT DISTINCT [tblKlantEnFactuurNr].[Klant], [tblKlantEnFactuurNr].[KlantNr] 
FROM tblKlantEnFactuurNr;

Dit houdt in dat de combobox gevuld wordt met alle unieke Klantnaam en Klantnummer combinaties uit tabel tblKlantEnFactuurNr en dat als je de .value property uitleest van de combobox je de waarde van het veld KlantNr krijgt.

De boundcolumn van cboRekening heb ik als 1 en de Recordsource heb ik als volgt:
code:
1
2
SELECT DISTINCT [tblKlantEnFactuurNr].[FactNr] FROM tblKlantEnFactuurNr
 WHERE ((([tblKlantEnFactuurNr].[KlantNr])=[Forms]![frmKlantEnFactuurNr]![cboKlant]));

Dit houdt in dat de combobox gevuld wordt met alle unieke Factuurnummers die horen bij het in combobox cboKlant gekozen klantnummer en dat als je de .value property uitleest van de combobox je de waarde van het veld FactNr krijgt.
Via [Forms]![frmKlantEnFactuurNr]![cboKlant] wordt naar het formulier frmKlantEnFactuurNr verwezen en dan daarop de combobox cboKlant.

Zo zorg je ervoor dat de comboboxen de juiste waardes ophalen, nu moet je er alleen nog voor zorgen dat er iets gebeurt als je wat in zo'n combobox kiest en daarvoor moet je VBA code schrijven.
Ik heb de volgende code aan de AfterUpdate events van de comboboxen gehangen, dit event treedt op als er iets gekozen wordt in de combobox.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub cboKlant_AfterUpdate()

    ' zorg dat de huidige waarde in de rekening combobox geleegd wordt
    Me.cboRekeningNr = ""
    ' vul de rekening combobox met nieuwe waardes
    Me.cboRekeningNr.Requery
    
    ' zoek het gekozen klantnummer op in de tabel/query die aan het formulier hangt
    RecordsetClone.FindFirst "KlantNr = " & Me.cboKlant.Value
    If Not (Me.RecordsetClone.EOF) Then
        ' er is een record gevonden, toon deze
        Me.Bookmark = Me.RecordsetClone.Bookmark
    End If
    
End Sub

Private Sub cboRekeningNr_AfterUpdate()

    ' zoek het gekozen rekeningnummer op in de tabel/query die aan het formulier hangt
    Me.RecordsetClone.FindFirst "FactNr = " & Me.cboRekeningNr.Value
    If Not (Me.RecordsetClone.EOF) Then
        ' er is een record gevonden, toon deze
        Me.Bookmark = Me.RecordsetClone.Bookmark
    End If
    
End Sub


Ik hoop dat het commentaar in de code genoeg zegt, waar je wel op moet letten is dat ik het formulier gebaseerd heb op de tabel tblKlantEnFactuurNr waarin de velden "FactNr" en "KlantNr" staan, jij moet waarschijnlijk andere namen gebruiken.

En het RecordsetClone.FindFirst gedeelte is gewoon een standaard manier in Access om een bepaald record te tonen in je formulier. En ik doe dat ook bij het kiezen van een klant zodat de gegevens van een eventuele eerder gekozen klant niet meer getoond worden.

Voor het printen kan je het beste een rapport in Access maken waarop je alles goed zet en dat moet je dan via de Print knop aanroepen met het factuurnummer.
Dan moet je even zoeken op DoCmd.OpenReport.

Ik hoop dat je hier voorlopig weer wat verder mee kan, zo niet dan lees ik het wel.

P.S. Ik zie dat je een veld "Adresregel#1" genoemd hebt, ik wil je aanraden om voortaan in namen van tabellen en velden geen leestekens of spaties te gebruiken, (behalve "_"), want dat kan soms nog wel eens voor onverwachte problemen zorgen in queries. De velden Klant en Datum zou ik ook ter verduidelijking KlantNaam en FactuurDatum noemen.

Verwijderd

Topicstarter
Private Sub cboKlant_AfterUpdate()

' zorg dat de huidige waarde in de rekening combobox geleegd wordt
Me.cboFactNR = ""
' vul de rekening combobox met nieuwe waardes
Me.cboFactNR.Requery

' zoek het gekozen klantnummer op in de tabel/query die aan het formulier hangt
Dim rs As ADODB.Recordset
Set rs = Me.RecordsetClone
rs.Find "[QFacturen].[KLANT] = " & Me.cboKlant.Value
Me.Bookmark = rs.Bookmark

Hij geeft een foutmelding bij de regel Set rs = Me.Recordsetclone:

Fout 7951 tijdens uitvoering:

De expressie bevat ongeldige verwijzing naar de eigenschap RecordsetClone.


Ik heb de gegeven code uitgeprobeerd maar dat ging niet, dus ik ben gaan zoeken. Nou is het zo dat de al eerder gegeven code niet werkt bij Access 2000 of Access 2002 (XP). De code zoals hier aangegeven zou de goede code zijn voor Access 2002 (XP)

Verwijderd

Topicstarter
[kick]

Verwijderd

Ik heb je eerder een (wellicht te verkapt) voorstel gedaan: ik kan een relevant Access 97 voorbeeld mailen. Helaas heb je geen adres in je profiel, of het moet die the.joker@ verwijzing zijn. Laat dus maar horen.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op 28 juli 2004 @ 20:21:
[...]

Hij geeft een foutmelding bij de regel Set rs = Me.Recordsetclone:

Fout 7951 tijdens uitvoering:

De expressie bevat ongeldige verwijzing naar de eigenschap RecordsetClone.


[...]
Normaliter duidt dat op een formulier zonder recordset, of te wel geen geldige recordbron. Andere mogelijkheid is dat je DAO en ADO recordsets door elkaar gebruikt.

[ Voor 9% gewijzigd door Lustucru op 29-07-2004 22:28 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Verwijderd schreef op 29 juli 2004 @ 22:18:
Ik heb je eerder een (wellicht te verkapt) voorstel gedaan: ik kan een relevant Access 97 voorbeeld mailen. Helaas heb je geen adres in je profiel, of het moet die the.joker@ verwijzing zijn. Laat dus maar horen.
Ja dat weet ik, meteen nadat ik dat had gelezen heb ik direct mijn e-mail adres verandert naar het goede e-mail adres.

Voor het geval die niet helemaal goed is doorgekomen of telaat: sclaassen@skynet.be

Verder ga ik eerst even uitzoeken hoe ik een recordset kan gebruiken binnen een form, maar ik laat nog wel even weten hoe het (af)loopt.

Alvast iedereen bedankt die mij heeft willen helpen, echt harstikke bedankt!!! _/-\o_
Pagina: 1