[Access VBA] zoeken op basis van 2 argumenten

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

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 21-05 17:08
Hoi,

Ik heb het volgende probleem:
Ik heb een vba code om op basis van een ingevulde waarde in een formulier iets op te zoeken uit een andere tabel. Deze code gaat als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub ProductNaam_AfterUpdate()
ProductID = ProductNaam

Dim Product
Product = Forms!Tabel_orders.ProductID

DoCmd.OpenForm "Form_producten", , , , , acHidden
DoCmd.GoToRecord acDataForm, "Form_producten", acGoTo, Product

VraagTrailingOp 'naar module
DoCmd.Close acForm, "Form_producten"

End Sub


en in de module:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Sub VraagTrailingOp()

'fee uit record halen
Trailing = Forms!Form_producten.Trailing
'controle goede naam gekozen

Dim bericht
bericht = MsgBox("Je past nu de reseller aan, hiermee verandert de Fee in " & Trailing, vbYesNo)
If bericht = 7 Then
    Exit Sub 'wanneer antwoord "nee" is gebeurt er niets
End If

Forms!Tabel_orders.Trailing = Trailing
End Sub


Maar nu wil ik op basis van 2 argumenten gaan zoeken. Ik heb een tabel waarin deze 2 argumenten staan maar hoe laat ik hem nu op 2 argumenten zoeken?
Hij moet zoeken op basis van waarden uit het formulier: de 2 argumenten zijn:
ProductID en ResellerID.

Achterliggend verhaal is dat elke verschillende Reseller per product verschillende percentages als afspraak heeft dus:
Reseller1 heeft bij:
product 1 als percentage 4%
product 2 als percentage 2%
product 3 als percentage 8%
enz.

Reseller2 heeft bij:
product 1 als percentage 5%
product 2 als percentage 9%
product 3 als percentage 3%
enz.

Al deze afspraken zijn vastgelegd in 1 tabel namelijk: tabel_afspraken_resellers
Deze tabel is opgebouwd als volgt:
Kolomtitels: ResellerID------ProductID------AfgesprokenPercentage
-----------------1-----------------1-----------------4%
-----------------1-----------------2-----------------2%
-----------------enz.
-----------------2-----------------1-----------------5%
-----------------2-----------------2-----------------9%


Is het mogelijk om met de huidige code op basis van 2 argumenten te gaan zoeken of moet ik daarvoor een andere manier gebruiken?


Ik probeerde zelf o.a.:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Dim Reseller
Dim Product
Reseller = Forms!Tabel_orders.ResellerID
Product = Forms!Tabel_orders.ProductID

DoCmd.OpenForm "Tabel_afspraken_resellers", , , , , acHidden 
DoCmd.GoToRecord acDataForm, "Tabel_afspraken_resellers", acGoTo, Reseller  
DoCmd.GoToRecord acDataForm, "Tabel_afspraken_resellers", acGoTo, Product 

VraagFeeOp 'naar module
'DoCmd.Close acForm, "Form_producten"
DoCmd.Close acForm, "Tabel_afspraken_resellers"

maar dat werkt dus niet, hij blijft maar op 1 argument steken.

Tis een heel verhaal, maar ik hoop dat iemand hier iets op weet, ben er namelijk al een tijd mee bezig en heb tot nu toe nog geen oplossing gevonden.

[ Voor 13% gewijzigd door ErikNL op 03-06-2004 15:24 . Reden: opmaak ]


  • Pannenkoekkie
  • Registratie: April 2004
  • Laatst online: 28-03-2025

Pannenkoekkie

Sugar or Cheeze?

Wat ik uit het verhaal opmaak wil je het volgende... Let wel goed op, deze code is BEFORE update, omdat je velden nooit wil controleren NA dat de gebruiker iets heeft ingevoerd. Het werd me alleen niet helemaal duidelijk waar je je ResellerID vandaanhaalt

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub ProductNaam_BeforeUpdate(Cancel as Integer)
Dim rstProducten as Recordset
Dim intProductID as Integer
Dim intResellerID as Integer

' Altijd een controle uitvoeren of er uberhaupt een productnaam is
If Not isNull(me.productnaam) Then
    
    intProductID=Me.Productnaam

Else
    
    'Als dat niet zo is, wel ff laten weten aan je n00b user
    MsgBox("Er is geen geldig product ingevoerd")
    Me.Productnaam.Setfocus

End If

ResellerID = HIER INVOEREN HOE JE ERAANKOMT!!

'Recordset aanmaken (Soort Query) die filtert op beide selectie-criteria (WHERE gedeelte)
Set rstProducten = Currentdb.OpenRecordset("SELECT ResellerID, ProductID, AfgesprokenPercentage FROM " & _
tabel_afspraken_resellers WHERE ProductID='" & ProductID &"' AND ResellerID='" & IntResellerID & "';", dbOpenSnapShot)

If not rstProducten.RecordCount=0 Then
    
    'Volgens je verhaaltje kan er maar 1 combinnatie van Product en Reseller tegelijk
    rstProducten.MoveFirst  
    
    'Gebruiker bevestigd
    If MsgBox("Je past nu de reseller aan, hiermee verandert de Fee in " & rstProducten!AfgesprokenPercentage, vbYesNo)= vbNo Then
        
        'Veranderingen in vak Productnaam terugdraaien
        Me.Productnaam.undo

        Exit Sub

    End if

    'Je formpje (aan de andere kant neem ik aan) wordt geupdate
    Forms!Tabel_orders.Trailing = rstProducten!AfgesprokenPercentage

End If

'Recordset verdwijnt in /Dev/Null
Set rstProducten=Nothing

End Sub

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 21-05 17:08
Thanks, ik zal dit weekend even kijken of het hiermee zal lukken! In ieder geval bedankt dat je de moeite hebt genomen om het hele verhaal te lezen!

  • Pannenkoekkie
  • Registratie: April 2004
  • Laatst online: 28-03-2025

Pannenkoekkie

Sugar or Cheeze?

Overigens:
Je moet bij Opties->Verwijzingen (Tools->References) wel:
Microsoft DAO 3.6 (OF Hoger) Object Library aanvinken, en zorgen dat bij in de lijst op de 3e plaats komt te staan (Onder VBA, en Access referenties)

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

SA ---> Programming & Webscripting, daar staat er nu geen meer open :P

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • ErikNL
  • Registratie: April 2004
  • Laatst online: 21-05 17:08
Ja ik weet soms niet waar ik een post moet plaatsen hoor, ik kom regelmatig posts tegen waarin ook VBA code staat.... tis nou niet echt nodig om de hele tijd te modden...

Tis trouwens nog gelukt met de hulp van een vriend van me. De code was:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub NaamReseller_AfterUpdate()


ResellerID = NaamReseller

Dim Product
Dim Reseller

Product = Forms!Form_orders.ProductID 'var1
Reseller = Forms!Form_orders.ResellerID 'var2

DoCmd.OpenForm "Form_afspraken_resellers"  'open form
DoCmd.ApplyFilter , "Reseller = Forms!Form_orders.ResellerID AND Product = Forms!Form_orders.ProductID" 'filter met 2 variabelen


Dim Fee
Fee = Forms!Form_afspraken_resellers.AfgesprokenFee ' get afgesproken fee


Forms!Form_orders.Fee = Fee ' % aanpassen

DoCmd.Close acForm, "Form_afspraken_resellers" 'form close


op- en of aanmerkingen altijd welkom!
Pagina: 1