Las funciones de dominio comparten el método de aplicación y para ello constan de tres partes:
.- En la primera definen el resultado a obtener (un dato con DLookup, el mayor del conjunto con DMax ....)
.- En la segunda el conjunto donde están esos datos (tabla, consulta, ..... )= el dominio
.- En la tercera las condiciones que han de cumplir los datos (que el nombre sea Pepe, que el dia sea lunes que el precio sea inferior a ...)
Para obtener el dato condicionado, el conjunto de condiciones (al evaluarlo) ha de devolver un TRUE
Analizando lo publicado:
...
precio = Dlookup ("precio", "tprecios", "(codproducto)" & "tipocliente" ...
"precio " como dato a devolver define a un campo de ese conjunto (en principio es correcto)
"tprecios" se da por supuesto que es una tabla, también cumple la condición
"(codproducto)" & "tipocliente" esta parte no sirve al no cumplir las mínimas reglas (no es una condición)
Una condición es básicamente una comparación y devuelve como respuesta (SI/NO, TRUE/FALSE), si hay más de una condición se han de unir con AND (que es excluyente) o con OR (que es incluyente)
La condicion deberia ser algo como: "codproducto =" & el_código_de_un_producto
Y finalizar con el paréntesis ')' que indica el final de la función de dominio:
Aun desconociendo los datos reales en la tabla, creo que no funcionara, con la excepción de que el dato 'tipocliente' sea un coeficiente a aplicar al precio, esto es:
Tipo1 = sin descuentos ( = 1)
TIpo2 = descuento un 5% (= 0.95)
Tipo3 = descuento un 20% (= 0.8)
En este caso el precio se calcularía así (el dato tipocliente se obtendría de la tabla clientes):
Hay un método alternativo, que en 'tprecios' exista un campo por cada tipo de cliente (Precio1 = 1000, Precio2 = 950, Precio3 = 800)
Lo que permite precios independiente (habrá precios que pueden reducirse en base a un coeficiente y otros con limite para no entrar en perdidas)
En este caso (seleccionar uno de varios campos en el mismo registro) en la función de dominio (y en cualquier búsqueda de ese precio) habrá que indicarle que devuelva el del campo que corresponda en función de 'tipocliente'
De este tipo de busqueda (selección del campo adecuado en función de un dato externo) hay un ejemplo reciente en el que la seleccion utiliza una funcion (Choose) que devuelve el nombre del campo para el DLookup
Tomando como referente lo anterior seria algo así:
La función Choose devuelve el nombre del campo de la tabla (precio1 // precio2 //precio3 // ....) en función de 'tipocliente', esto es:
Choose evalúa el dato 'tipocliente' y...
Si 'tipocliente' = 1 devuelve el primer dato como parámetro
precio = Dlookup ("precio1", "tprecios", "codproducto =" & 123456)
Si 'tipocliente' = 2 devuelve el segundo dato como parámetro
precio = Dlookup ("precio2", "tprecios", "codproducto =" & 123456)
Si 'tipocliente' = 3 devuelve el tercer dato como parámetro
precio = Dlookup ("precio3", "tprecios", "codproducto =" & 123456)
Tú eres quien decide que método es el mas adecuado o bien describe el que has planificado para poder 'traducírselo' a Access, existen mas posibilidades, por ejemplo: duplicar los registros y añadir un campo en ellos (el tipo de cliente) que se utilizará en la condición quedando algo como:
Sea el método que sea ha de cumplir -la condición indispensable- de devolver un resultado correcto y repetible.
Es muy probable que tras leer esto surjan dudas (no te quedes con ellas), publícalas para aclararlas:
Al dar una respuesta es fácil caer en el error de que quien pregunta ya alcanzo un determinado nivel (nivel que lograra mas tarde)