Hola a tod@s,
Tengo la siguiente función para construir una Select en función de diferentes parámetros que pueden seleccionarse en un formulario:
Código:
Function montarSelect(ByVal tipologias As String, ByVal subAct As Integer, _
ByVal soloActivos As Boolean, ByVal grupoClientes As Integer) As String
Dim clausulaWhere As String
Dim selectCommand As String
clausulaWhere = "where "
' tipologias: String con los tipos seleccionado "'E', 'F', 'I', 'A', ..."
' subAct: Subactividad
' soloActivos: Proyectos con periodo dentro del año seleccionado
If tipologias <> "" Then
clausulaWhere = clausulaWhere _
& "substring(id_proyecto, 1, 1) in(" & tipologias & ") "
If subAct <> 0 Then
' Si no ha elejido todas las Subactividades de este tipo de Actividad
If Not CInt(subAct) = 0 Then
clausulaWhere = clausulaWhere _
& " and subactividad = " & subAct
End If
End If
If soloActivos Then
clausulaWhere = clausulaWhere _
& " and (year(fecha_inicio) >= year(GetDate()) " _
& " or year(fecha_final) >= year(GetDate())) "
End If
If grupoClientes <> "0" Then
clausulaWhere = clausulaWhere _
& " and grupoCliente"
End If
ElseIf subAct <> 0 Then
' Si no ha elejido todas las Subactividades de este tipo de Actividad
If Not CInt(subAct) = 0 Then
clausulaWhere = clausulaWhere _
& " and subactividad = " & subAct
End If
If soloActivos Then
clausulaWhere = clausulaWhere _
& " and (year(fecha_inicio) >= year(GetDate()) " _
& " or year(fecha_final) >= year(GetDate())) "
End If
ElseIf soloaActivos Then
clausulaWhere = clausulaWhere _
& "subactividad = " & subAct
End If
clausulaWhere = clausulaWhere & " order by id_proyecto "
selectCommand = "select id_proyecto, nombre, descripcion, cliente, fecha_inicio, fecha_final " _
& "from proyectos " _
& clausulaWhere _
montarSelect = selectCommand
End Function
Si los parámetros enviados hacen que SelectCommand sea demasiado largo me da problemas ya que no recoge todos los caracteres que debiera.
Por ejemplo haciendo la siguiente llamada
Código:
montarSelect("'I'", 1, True, 0)
la variable selectCommand contiene:
"select id_proyecto, nombre, descripcion, cliente, fecha_inicio, fecha_final from proyectos where substring(id_proyecto, 1, 1) in('I') and subactividad = 1 and (year(fecha_inicio) >= year(GetDate()) or year(fecha_final) >= year(GetDate()))
order byi"
Si recibe otros parámetros que crean una select más corta, no tengo ningún problema pero.. no parece que el problema sea la longitud.
Alguien puede ayudarme?
Muchas gracias