¿Concatenar.si en Access? ¿Concatenar.si en Access? Necesito concatenar según criterios pero son 4 los criterios, con el siInm s

Necesito concatenar según criterios los cuáles son 4, con el siInm se hace extensa la expresión.

Tiene que analizar lo siguiente si grúa tipo 1 (cmb_gru1) es mayor a 1, grúa tipo 2 (cmb_gru2) sí es nulo, grúa tipo 3 (cmb_gru3) sí es nulo y grúa tipo 4 también es nulo entonces el calculado para otro campo sería "Se usó 'cmb_gru1' grúas tipo 1", en caso de que grúa grúa tipo 1 (cmb_gru1) fuese igual a 1, grúa tipo 2 (cmb_gru2) nulo, grúa tipo 3 (cmb_gru3) nulo y grúa tipo 4 también nulo entonces el calculado para otro campo sería "Se usó 1 grúa tipo 1". Y así con todas las demás grúas.

Se pueden hacer todas las mezclas. Enviar una grúa tipo 1; tipo 2; tipo 3 o 4, y/o enviar una grúa tipo 2 y tres grúas tipo 3.

Como ven hay muchas posibilidades y usando el siInm la expresión sería muy extensa. ¿Cuál sería la forma correcta de hacerlo?

1 Respuesta

Respuesta
2

Yo crearía una función en VBA que analice todas las posibilidades y devuelva el texto correspondiente. Por ejemplo (así a lo rápido):

Public Sub fncNumGruas(tipo1 as Integer, tipo2 as Integer, tipo3 as Integer, tipo4 As Integer) As String
Dim miTexto as String
Const inicio as String="Se usó " 
If tipo1>0 Then
   miTexto=IIF(tipo1=1,"1 grúa",tipo1 & " grúas") & " tipo 1, "
End If
If tipo2>0 Then
   miTexto=miTexto & IIF(tipo2=1,"1 grúa",tipo2 & " grúas") & " tipo 2, "
End If
If tipo1>0 Then
   miTexto=miTexto & IIF(tipo3=1,"1 grúa",tipo3 & " grúas") & " tipo 3, "
End If
If tipo1>0 Then
   miTexto=miTexto & IIF(tipo4=1,"1 grúa",tipo4 & " grúas") & " tipo 4"
End If
If Right(mitexto,2)=", " Then miTexto=Left(mitexto,len(miTexto)-2))
fncNumGruas=inicio & miTexto
End Function

Luego para usarla en un formulario o informe harías (por VBA):

Me.txtNumGruas=fncNumGruas(Nz(Me.cmb_gru1,0),Nz(Me.cmb_gru2,0),Nz(Me.cmb_gru3,0),Nz(Me.cmb_gru4,0))

O podrías usarla en el origen del cuadro de texto en que lo quieras mostrar, o en una consulta, pero siempre usando Nz() para convertir los nulos a 0 para que no "casque" la función.

Un saludo.


bit.ly/NkSvAcademy   /    bit.ly/ForoNkSv 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas