Valores por defecto y condiciones en campos

Ante todo, muchas gracias por tu anterior respuesta aunque debí de expresarme de pena, porque lo que necesitaba lo arreglé creando una tabla "hoja diaria" e incrustando un subformulario de artículos en ella. Perdón por haberme liado tanto.
Mi duda ahora es sobre cómo fijar valores por defecto. Veo que en las propiedades de los campos puedo poner uno, pero puede ser cualquiera incluso aunque no sea uno de los registros de la tabla (ejemplo: tomo valores de la tabla sexo (mujer y hombre) pero puedo poner "agaga" como valor por defecto lo que me parece un poco forzado.
Respecto a las condiciones, aparte de la tabla artículos he creado una tabla "operación" donde pudiera escoger compra/reparación. Como tengo en artículos los campos cliente origen/destino, quisiera que por defecto si operación=reparación entonces cliente destino=cliente origen y en caso de operación=compra dejar el campo vacío a la espera de a quién se revendería.

1 Respuesta

Respuesta
1
Lamento decirte que creo que capto la idea de lo que me comentas, pero no lo veo muy claro con la información que me das ;)
Vamos a ver. Respecto de tu primera consulta un par de consideraciones:
- Cuando tú creas la tabla, y vas añadiendo los campos, todos (o casi todos) te dejan poner un valor por defecto. Lógico es pensar que tú, como creador de la BD, no pondrás un valor absurdo.
- Si te refieres a que quieres que un usuario, al trabajar sobre un formulario, no pueda poner los valores que quiera en un campo hay varias maneras de hacerlo. Te explico dos maneras de hacerlo a través de un ejemplo:
MODO 1
Imagínate que tienes una tabla POR con varios campos, uno de ellos es "Sexo", y que sólo quieres que se pueda escribir "Hombre" o "Mujer". Lo que tienes que hacer es crear el formulario basado en la tabla X. Una vez hecho coges el campo "Sexo" y lo borras. A continuación creas un cuadro combinado y sacas sus propiedades, y las estableces de la siguiente manera:
->Pestaña Datos->Origen del control->Seleccionas el campo "Sexo"
->Pestaña Datos->Origen de la fila-> Escribes (sin comillas): "Hombre; Mujer"
->Pestaña Datos->Tipo de origen de la fila-> Seleccionas "Lista de valores"
->Pestaña Datos->Limitar a la lista-> Cambias su valor a Sí
->Pestaña Datos->Permitir ediciones de la lista->Cambias su valor a NO
Y ya está
MODO 2
Creas una tabla auxiliar Z con un solo campo, "Sexo", que tendrá únicamente dos registros: Hombre y Mujer.
Creas una tabla X, y cuando crees el campo "Sexo", en tipo de datos, le das al último tipo (asistente para búsquedas). Te saldrá un asistente que te dirá de dónde quieres extraer lo datos. Seleccionas la tabla Z y el único campo que tiene.
Cuando hagas el formulario basado en la tabla X automáticamente verás que el campo Sexo te aparece como un cuadro combinado.
Ahora sólo tienes que repasar las propiedades de ese combo (en vista diseño), en cuanto a las opciones "Limitar a la lista" y "permitir ediciones", que de cabeza no recuerdo cómo estarán.
---
En cuanto a la segunda parte de tu pregunta necesitaría saber si para hacer lo que comentas utilizas un formulario, y si es así qué campos te aparecen en ese formulario.
Ya me dirás cosas.
Muchas gracias me ha sido de gran ayuda:).
Respecto a la segunda parte, sí se trata de formularios. Te lo describo un poco. He creado un formulario base llamado "hoja del día" donde fijo fecha, numeración y cliente. Dentro, he insertado un subformulario donde iría añadiendo los artículos con sus campos de características y uno de operación a realizar. De esta manera consigo "rellenar" automáticamente el campo de clienteorigen/fecha/... de todos los artículos que pertenecen a la misma "hoja del día".
Ahora bien, en una misma hoja del día del cliente POR, dentro de la lista de artículos, algunos querrá que se los reparemos y otros que se los compremos. Por eso me parecería interesante que cuando rellenase el campo "operación" en el subformulario, si esta fuera una reparación, el campo "cliente destino" fuera automáticamente el mismo valor que el campo "cliente" que tengo en el formulario "hoja del día". Del mismo modo, si se tratase de una venta, el campo de cliente destino quedase en blanco o asignado a un cliente llamado "almacén".
Creo que lo tengo un poquito más claro ahora ;) (aunque sigo teniendo alguna que otra duda). Me voy a arriesgar y voy a suponer que lo que estoy intuyendo es lo correcto.
Para hacer lo que pides tienes que hacer lo siguiente (lo de las negritas te lo explico al final del código):
Te vas al campo operación, dentro del subformulario, y sacas sus propiedades. Te vas a la pestaña eventos y al evento "Después de actualizar" le generas el siguiente código:
---
Private Sub operacion_AfterUpdate()
        'Creamos la variable que recoge el valor
        'del cliente
    Dim valorCliente As Variant
    valorCliente = Forms![Hoja del dia].cliente.Value
        'Comprueba que se haya introducido algún valor
'para evitar el error de NULL. Si no hay valor
'sale del procedimiento
    If IsNull(valorCliente) Then Exit Sub
        'Creamos la variable que recoge el valor
        'introducido en la operación
    Dim valorOperacion As Variant
    valorOperacion = Me.operacion.Value
        'Comprueba que se haya introducido algún
'valor para evitar el error de NULL
        'Si no hay valor sale del procedimiento
    If IsNull(valorOperacion) Then Exit Sub
        'Toma una decisión en funcón del valor introducido
'en el campo operación
    Select Case valorOperacion
        Case "reparacion"
            Me.cliente_destino.Value = valorCliente
        Case "compra"
            Me.cliente_destino.Value = "almacén"
        Case Else
            Me.cliente_destino.Value = ""
    End Select
End Sub
---
Te explico las equivalencias (que he marcado en negrita):
- [Hoja del dia] -> Es el nombre del formulario principal. Tú tienes que poner el que tú tengas
- Cliente -> es el nombre del campo que en el formulario principal recoge el nombre del cliente.
- Operación-> es el nombre del campo que en el subformulario recoge el tipo de operación.
- "reparación", "compra" y "almacén"-> revisa cómo las tienes tú escritas, porque deberías escribirlas exactamente iguales a cómo las tienes tú en tu BD
Otra pequeña consideración. Lo lógico hubiera sido escribir el código utilizando un estructura de bloque If... End If... Sin embargo he preferido escribirte una estructura Select Case... End Select por si, en un futuro, te aparecen más opciones. Me explico a través de un ejemplo. Si en un futuro quieres que al seleccionar la operación "revisión temporal" el valor de cliente destino fuera "taller1", bastaría con que en el código, y siempre por encima de la línea "Case Else", escribieras:
Case "revisión temporal"
            Me.cliente_destino.Value = "taller1"
Bueno. Ya me dirás cómo te ha ido.
Muchísimas gracias, era justo lo que buscaba :D. Intentaré en la medida de lo posible que las dudas sean siempre "únicas" y que en realidad no conlleven varias preguntas unidas entre sí (salvo que me sea imposible). Considero que no es justo que te lleves sólo una buena puntuación por darme dos buenas respuestas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas