Hoe maak ik een DLOOKUP die aan TWEE voorwaarden voldoet?

Status
Niet open voor verdere reacties.

Tonete

Gebruiker
Lid geworden
24 aug 2010
Berichten
18
Beste allemaal,

Ik heb de volgende, werkende, DLOOKUP in een formulier van een Access 2007 database:

Precio = DLookup("[Precio Factura]", "TBL Precios", "[Código de Producto] =" & "CódigoProducto")

Maar omdat er in de tabel TBL Precios waarin hij zoekt meerdere records zijn die aan de voorwaarde voldoen, geeft hij de waarde van [Precio Factura] in het eerste record weer dat aan de voorwaarde voldoet, en dat is meestal niet het goede record.

Daarom wil ik naast de huidige voorwaarde ook de volgende voorwaarde toevoegen, waarmee de records wel uniek worden:

"[Clave de Cliente] =" & "Forms![FRM Pedidos]!Klantkiezer"

Hoe kan ik die voorwaarde toevoegen? Ik ben redelijk nieuw in VBA dus het zal wel iets simpels zijn met AND ofzo, weetikveel. Ik krijg het in ieder geval niet gevonden. :confused:
 
Je kunt het inderdaad proberen met een AND:

Code:
Precio = DLookup("[Precio Factura]", "TBL Precios", "[Código de Producto] =" & "CódigoProducto AND [Clave de Cliente] =" & Forms![FRM Pedidos]!Klantkiezer)
Overigens is de kracht van DLookup dat je een waarde opzoekt in een tabel waarin de criteriumwaarde uniek is. In een productentabel zou je die toch moeten hebben... Zodra je voor één product meerdere records maakt, is je db niet goed genormaliseerd. Ik vermoed dat je dan voor elke leverancier die het produkt levert een extra record toevoegt. Die constructie, als dit klopt, zou je moeten veranderen in een tabel met de produkten, een tabel met leveranciers en een tabel tlevert, waarin je voor elke product-leverancier combinatie een nieuw record maakt. Daarmee houd je de Producten tabel schoon, en is je opzoek functie een stuk eenvoudiger.
 
Hartelijk dank Michel voor de snelle reactie!

Ik begrijp wat je bedoelt over unieke waarde en opzet van de database. Zo heb ik het ook gedaan. Ik heb een tabel PRODUCTOS waarin de producten uniek zijn en een tabel CLIENTES waarin de klanten uniek zijn. Die worden gecombineerd in een tabel PRECIOS want verschillende klanten hebben voor hetzelfde product verschillende prijzen.

In het orderformulier PEDIDOS wordt (o.a.) de klant bekend gemaakt, dit orderformulier heeft een subformulier DETALLE PEDIDOS waar de orderlijnen in staan met hun productnummer/aantal/prijs, etc. Formulier en subformulier hebben als basis de tabellen met dezelfde naam.

Wat ik nu wil is dat in het ordersubformulier de prijs vanzelf wordt ingevuld als suggestie wanneer er een product wordt geselecteerd (wel zodanig dat de prijs voor deze order nog te veranderen is). Het productnummer is dan bekend in het ordersubformulier en het klantnummer in het bijbehorende orderformulier.

Vandaar dat ik dacht aan een DLOOKUP met twee criteria (klantnummer gelijk aan orderformulier en productnummer gelijk aan de betreffende regel in het ordersubformulier).

Als ik nu de tekst invul die je me gegeven hebt krijg ik de volgende foutmelding:

Fout 2766 tijdens uitvoering:
Het automatiseringsobject CL2914169 bevindt zich niet in het object.


Het klantnummer CL2914169 is inderdaad goed gevonden, maar toch werkt het nog niet. :confused:

Ik heb de gestripte database bijgevoegd, just in case.
 

Bijlagen

Mijn Spaans is niet geweldig, dus het was af en toe wel een beetje zoeken, maar volgens mij is de keuzelijst nu wel in orde. Kijk maar eens of je er verder mee kunt.
 
Dank je Michel, klasse! Ik kijk er van het weekend even naar.
 
Hee Michel, nogmaals bedankt voor je input.:thumb: Ik heb ernaar gekeken maar zie dat het subform nog steeds niet werkt.

Als je in bijgevoegde database het form PEDIDOS ("orders" in het Spaans) opent, dan zie je dat het subform DETALLE PEDIDOS in gegevensbladweergave als subform aanwezig is. Dat is allemaal prima.

Als je nu, werkend in het form PEDIDOS, in het subform DETALLE PEDIDOS een product toevoegt (door een code in de keuzelijst van het veld Código te selecteren), dan moet er automatisch in het veld Precio de prijs worden gesuggereerd die in tabel PRECIOS overeenkomt met die productcode en de klantcode (Clave de Cliente) van de klant waar de order voor is (die code staat geselecteerd in het veld Klantkiezer van het form PEDIDOS).

Krijg je dat voor elkaar?
Sorry voor het gedoe met het Spaans trouwens. :rolleyes:

Groeten & thanks!
Tonete
 

Bijlagen

Tonete,

kijk eens naar de Noordenwind voorbeelddatabase.
Staat op je Office CD, op je PC en anders kun je hier een Access 2000 versie dowenloaden (werkt ook onder Access 2003):

http://www.microsoft.com/downloads/...72-8DBE-422B-8676-C632D66C529C&displaylang=EN

In de Noordenwind database staat een orderformulier.
Dat werkt in principe conform je vraag.
Kwestie van bekijken, doorgronden en vertalen naar jouw toepassing.

Tardis
 
Dank je Tardis voor je input.

Ik heb het orderformulier in NorthWind doorgelicht en het is inderdaad (bijna) wat ik zoek.

Echter, in NorthWind wordt er een prijs opgezocht die alleen afhankelijk is van het product, en dus volstaat in principe een simpele DLOOKUP. Wanneer het product wordt gekozen verschijnt de prijs.

In mijn database echter, is de prijs niet alleen afhankelijk van het product, maar ook van de klant (want de prijs voor hetzelfde product verschilt per klant). In de voorwaarde van de DLOOKUP moet ik dus TWEE voorwaarden stoppen en dan loopt hij vast.

Komt het misschien omdat ik een verkeerde syntax gebruik ofzo? Mijn DLOOKUP ziet er als volgt uit:

Precio = DLookup("[Precio Factura]", "TBL Precios", "[Código de Producto] =" & Me.CódigoProducto & " AND [Clave de Cliente] =" & Forms![FRM Pedidos]!Klantkiezer)

Ik krijg dan de foutmelding die is bijgevoegd. Daaruit blijkt dat het juiste produktnummer en klantnummer inderdaad worden opgehaald, maar toch werkt de DLOOKUP niet. Weet jij waarom?

Thanks,
Tonete
 

Bijlagen

  • Foutmelding.jpg
    Foutmelding.jpg
    17,2 KB · Weergaven: 75
Klantkiezer is blijkbaar geen nummeriek veld. Daarom zul je extra aanhalingstekens moeten toevoegen aan de code. Probeer eens:

Code:
Precio = DLookup("[Precio Factura]", "TBL Precios", "[Código de Producto] =" & Me.CódigoProducto & " AND [Clave de Cliente] =[COLOR="DarkRed"]'[/COLOR]" & Forms![FRM Pedidos]!Klantkiezer [COLOR="DarkRed"]& "'"[/COLOR])

Rebmog
 
Probeer, om te beginnen, DLookup zoveel mogelijk te vermijden, omdat het een lastige functie is, die ook nog eens een tekstwaarde terugleest, wat je niet altijd wilt.
in jouw voorbeeld is DLookup helemaal niet nodig; ik heb je voorbeeld zodanig aangepast, dat er geen meer in zit. En dan werkt-ie nog sneller ook...
 
Bedankt Michel, GEWELDIG! Ik probeer dit al weken op te lossen en nu is het gelukt, dankzij jouw hulp.
Nogmaals hartstikke bedankt! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan