Ayuda con el uso de los datos de varias tabla

Buenas Tardes, Manuel: De vueltas con la dichosa base de datos de Gestión de Averías, en la que me ayudaste de forma Excepcional (pregunta realizada el 03/11/10), me he encontrado con otro problema, voy a intentar definirlo lo mejor posible. El problema es tengo un campo en la tabla Averías que determina que uso se puede hacer del vehículo por cada avería. Ejemplo: (Avería)Fundida bombilla de Matricula (Campo "Uso") Utilizable. La opciones que tiene este campo son: Utilizable (poca importancia), Utilizable con condiciones (Importancia Media), Inutilizable (Máxima Importancia)., cada registro de avería tiene un valor de uso, de esta manera, sabemos que uso se le puede dar a un vehículo que tiene varias averías según su importancia, hasta que pueden ser reparadas. El problema es que quiero conseguir que cuando dé de alta un nuevo registro de avería y se introduzca el valor de "Uso" la base evalúe la importancia de las averías que pertenecen al vehículo y que el valor más importante, lo muestre ademas de en el subformulario de Averías, en un cuadro de texto independiente en el formulario principal, repitiéndose la evaluación cada vez que se introduzca, modifique o elimine un registro.
Espero haber explicado mi problema de forma entendible, ya que es complicado explicarlo.
Un Saludo.
Respuesta
1
Yo crearía una tabla maestro del campo Uso
Tabla / Campos
TblMaestroUso
IdUso Clave principal, Numérico
TextoUso Texto
En esta tabla incorporaría los datos
1 Utilizable
2 Utilizable con condiciones
3 Inutilizable
A medida que incorporemos registros de avería en el evento después de actualizar del subformulario de averías, incorporaríamos un código que buscara el IdUso más alto y lo incorporaría en los campos que deseas.
A ver si puedes adaptar esta sugerencia.
Una aperta
Hola Manuel: gracias por contestar. Dos cosas te quería preguntar.
1º Lo de tabla maestro, para que es, que funcionalidad tiene crearla o no hacerlo.
2º he puesto este código, pero no me funciona bien, haber si me puedes ayudar.
Private Sub boxEstado_AfterUpdate()
Me.Refresh
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rs3 As Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Select tblAverias.tblReparaciones, tblAverias.fReparado FROM tblAverias WHERE fReparado Is Not Null") 'Aqui intento limitar a los registro de averias que no estan reparado (es esto lo que no me funciona bien, creo)
If Not rs1.BOF Then
Set rs2 = db.OpenRecordset("Select Max(nEstado) As Mayor from tblAverias where tblReparaciones='" & Forms![00GESTIONDEAVERIAS]![SubfortblAverias].Form![tblReparaciones] & "'")
If Not rs2.EOF Then
Set rs3 = db.OpenRecordset("Select Descripcion from tblMaestra_Usos where Uso=" & rs2!Mayor & "")
Forms![00GESTIONDEAVERIAS]!txtEstado.Value = rs3!Descripcion
End If
End If
End Sub
Un Saludo
1. Las tablas maestro son tablas con un identificador numérico único y una serie de campos ligados como el caso que te propongo el TextoUso. Así en una tabla donde se van a repetir muchas veces los mismos datos en un campo, lo que se hace es se crea la tabla maestro con ese dato texto y un campo numérico que es el que se agrega al a primera tabla. Cuando trabajas con cientos de miles de registros y en red, la agilidad de la base de datos es enorme, dado a que el manejo de datos numéricos es más ágil que el de texto. Para representar visualmente el resultado cruzamos las tablas y ponemos el campo de TextoUso y no el numérico. En este caso te vale incluso para suponer una importancia en la avería ya que lo ordenaríamos de esa manera y el numérico más alto nos da el dato que deseamos.
2. Si me la envías con los formularios implicados y algún ejemplo te busco una solución. Entiende que a través de la lectura del comando me es muy difícil detectar la incidencia.
[email protected]
Envíala en access 2003 y comprimida en ZIP o RAR.
Una aperta.
Ok, te la envío y te cuento
En primer lugar decirte que he estado fuera por motivos personales y no he podido responderos hasta hoy.
He recibido tu correo y espero haber entendido tu problema.
Parece ser que quieres que el estado de un coche esté supeditado a un campo tInfluencia de la tabla tblMaterialAsociado y dependiendo de su valor, leerá en la tabla tblAverias según indicas:
Influencia MAXIMA ..... El Estado del vehiculo ha de cambiar, al Max estado del Material Asociado. (material=INUTILIZABLE, vehiculo=INUTILIZABLE)
Influencia MEDIA ... El Estado del vehículo ha de cambiar, a un estado menos del estado del Material Asociado. (material=INUTILIZABLE, vehiculo=CONDICIONADO)
Influencia BAJA ... El Estado del vehículo no se modifica por la influencia del Material Asociado.
En el evento después de actualizar del combo tInfluencia sitúas este código.
Private Sub tInfluencia_AfterUpdate()
Dim C As Integer
Dim M As Integer
M = DMax("[nEstado]", "tblAverias", "[tblMatAsoc] = '" & Me.tMatriculaMA & "'")
If Me.tInfluencia = 3 Then Me.tEstadoMA = M
If Me.tInfluencia = 2 Then
    For C = 1 To 5
        If IsNull(DLookup("[nEstado]", "tblAverias", "[tblMatAsoc] = '" & Me.tMatriculaMA & "' and [nEstado]=" & M - C)) = False Then
            Me.tEstadoMA = M - C
            Me.Refresh
            Exit Sub
        End If
    Next C
End If
Refresh
End Sub
Te envío la BD por correo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas