Olá Fábio,
A questão é mais ou menos assim...
|------------------------------ |
| combo1 form1 |
| ------------------------ |
| | | |
| | fomr2 | |
| ------------------------ |
|-------------------------------|
No form1 tenho um combo com os valores Cancelado, Concluído, Em Espera, Todos
De acordo com o que escolho neste combo do form1, é o que vou trazer no meu form2, pois a tabela que dou o select contém os mesmos valores que passo pelo combo, EXCETO o valor "Todos", logo quando eu seleciono "Todos", acusa um erro.
A forma como tentei foi, clicando com o botão da direita do mouse no form2 > propriedades > Record Source > onde há o seguinte select (ver mais abaixo):
Obs: A montar no design a query abaixo, utilizei em "criterios" a seguinte função:
IIf([forms]![FRM_SOLICITACAO_2]![cmb_list_st]="Todos";([TB_SOLICITACAO].[status])="Concluído" Or ([TB_SOLICITACAO].[status])="Cancelado" Or ([TB_SOLICITACAO].[status])="Em Espera";[forms]![FRM_SOLICITACAO_2]![cmb_list_st])
Ou no caso... se meu combo apresentar o valor "Todos", então mostre os status "Concluído", "Cancelado", "Em Espera", caso contrário me traga um dos valores selecionados (que são os diferentes de "Todos" ou seja, Concluído, Cancelado.....etc..). Enfim a query gerada foi:
SELECT TB_RESPONSAVEL.NOME_RESPONSAVEL, TB_RELATORIO.nome_relatorio, TB_SOLICITANTE.NOME_SOLICITANTE, TB_SOLICITACAO.status, TB_SOLICITACAO.prioridade, TB_SOLICITACAO.dt_validado, TB_SOLICITACAO.id_solicitacao, TB_SOLICITACAO.id_relatorio, TB_SOLICITACAO.id_solicitante, TB_SOLICITACAO.motivo, TB_SOLICITACAO.descricao, TB_SOLICITACAO.evidencia, TB_SOLICITACAO.dt_abertura, TB_SOLICITACAO.dt_concluido, TB_SOLICITACAO.id_responsavel, TB_SOLICITACAO.Retorno, TB_SOLICITACAO.observacao1, TB_SOLICITACAO.dt_hr1, TB_SOLICITACAO.observacao2, TB_SOLICITACAO.dt_hr2, TB_SOLICITACAO.observacao3, TB_SOLICITACAO.dt_hr3, TB_SOLICITACAO.observacao11, TB_SOLICITACAO.dt_hr11, TB_SOLICITACAO.observacao22, TB_SOLICITACAO.dt_hr22, TB_SOLICITACAO.observacao33, TB_SOLICITACAO.dt_hr33, Format(([tb_solicitacao.dt_abertura]),"dd/mm/yyyy") AS [Data de Análise], CStr((DateDiff("n",[tb_solicitacao.dt_abertura],[tb_solicitacao.dt_concluido])\60)\24) & " days," & CStr((DateDiff("n",[tb_solicitacao.dt_abertura],[tb_solicitacao.dt_concluido])/60) Mod 24) & " hours and " & CStr(DateDiff("n",[tb_solicitacao.dt_abertura],[tb_solicitacao.dt_concluido]) Mod 60) & " minutes" AS [Tempo Abertura >> Conclusão]
FROM ((TB_SOLICITACAO LEFT JOIN TB_RESPONSAVEL ON TB_SOLICITACAO.id_responsavel = TB_RESPONSAVEL.ID_RESPONSAVEL) INNER JOIN TB_RELATORIO ON TB_SOLICITACAO.id_relatorio = TB_RELATORIO.id_relatorio) INNER JOIN TB_SOLICITANTE ON TB_SOLICITACAO.id_solicitante = TB_SOLICITANTE.ID_SOLICITANTE
WHERE (((TB_SOLICITANTE.NOME_SOLICITANTE)=[forms]![FRM_SOLICITACAO_2]![cmb_list_sol]) AND ((TB_SOLICITACAO.status)=IIf([forms]![FRM_SOLICITACAO_2]![cmb_list_st]="Todos",([TB_SOLICITACAO].[status])="Concluído" Or ([TB_SOLICITACAO].[status])="Cancelado" Or ([TB_SOLICITACAO].[status])="Em Espera",[forms]![FRM_SOLICITACAO_2]![cmb_list_st])))
ORDER BY TB_SOLICITACAO.prioridade;
Ao executar o formulário e pedir o status "Todos" acusou:
This expression is typed incorrectly, or it is too complex to be evaluated. For example, a numeric expression may contain too many complicated elemens. Try simplifying the expression by assigning parts of the expression to variables
Acredito que o erro esteja na forma de montar o IIF.... o que eu preciso é algo como:
Se o status vindo do combo = "Todos", mostre todos os status que possuo, caso contrário me traga apenas um dos status selecionados (que não seja "Todos")