MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Função com String como Criterio de Consulta

    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 4/11/2015, 11:18

    Bom dia abigos de forum,

    Tenho várias checkbox no meu formulário, minha idéia era que eu pudesse marca-las e gerar uma consulta com critério de acordo com o checkbox selecionado. Segue um exemplo das checkbox
    [Resolvido]Função com String como Criterio de Consulta 2i95qu9


    Ao marcar as checkbox (no exemplo estão marcados na LINHA A), ao clicar no 01 e 03 significa que eu gostaria de verificar a prensa 'A01' e a 'A03'. As prensas são nomeadas pela letra referente a LINHA e o numero referente a prensa.
    Criei o Sub abaixo e o coloquei num botão, para que ele faça a verificação das checkbox e veja quais estão marcadas, sendo que nomeei cada uma delas com 'chkbox_' + (nome da prensa). Ex: A01 se chama 'chkbox_A01'.

    [Resolvido]Função com String como Criterio de Consulta 2i99ut

    Usando debug.print, posso ver que minha variavel criterio recebe:

    [Resolvido]Função com String como Criterio de Consulta Dyu9gh


    Daí criei uma função que recebe essa variavel global criterio para usá-la como um critério na minha consulta! O problema é que se eu coloco essa função diretamente como criterio de consulta, ela não retorna nada. Minha consulta fica vazia. Entretanto, se coloco o que me é mostrado via debug.print, <> funciona!.

    Alguém ai pode me ajudar com essa duvida ? Sei que há codigo na minha pergunta, o que faz parecer não tratar necessariamente de CONSULTAS, mas eu quero mesmo é saber como usar uma função no critério. Eu uso funções que recebem date, double, integer, mas sempre quando tento usar string fico agarrado.


    Agradeço desde já pela ajuda!


    Última edição por cr4sh em 6/11/2015, 16:41, editado 1 vez(es)
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 4/11/2015, 11:36

    Rodrigo

    Faltou exibir a função, já que está recebendo o texto para SQL na variável criteiro.

    E para desencargo de consciência ( Razz  ) verifique antes o conteúdo dessa variável.
    Digo isso porque dificilmente uma variável inicia com valor = sequência vazia (Empty)
    Geralmente é Nulo (null).
    Então na linha onde está escrito And criterio = Empty o certo seria   And criterio = Null

    [ ]'s

    e
    Aguardo ...


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 4/11/2015, 11:51

    [Resolvido]Função com String como Criterio de Consulta Mru4x5


    Essa ai é minha função que estou tentando usar como CRITÉRIO de consulta, e também la no inicio, após definir o array, coloquei pra variavel criterio receber empty quando apertar o botão!

    Obrigado pelo esclarecimento Noobezinho.
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 4/11/2015, 12:10

    Rodrigo

    Ainda estou dormindo Sleep Sleep

    Não percebi a variável.

    Tente isso:

    1º - utilize a variável diretamente no critério da consulta:

    = criterio

    Mude a consulta para sql e verifique se criterio está dentro de aspas simples (string)
    se não tiver coloque e veja se funfa.

    2º - Teste a função diretamente na janela imediata
    e veja se retorna o conteúdo.
    Veja que dentro do sub click() retorna o dado no debug.print.
    Esse teste é para verificar se a variável mantém o dado
    após sair desse sub.

    Aguardo...








    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 4/11/2015, 13:05

    Fiz o que você falou,

    • chamar a função na Verificação Imediata (OK)

    • Tentar usar a váriavel criterio diretamente (ERRO)

    • Adicionar aspas simples no criterio (OK, mas não funcionou



    Eu pensei em fazer um Docmd.openquery com o sql que eu preciso, concatenando os paramentros que eu quero, porem não consegui dessa forma.
    Tentei usar o Docmd.Runsql só que pelo visto só funciona consultas de ação, select nem da pra usar.

    Obrigado ai Noobezinho, mas acho que o jeito é improvisar mesmo, usar o famoso RTA uaheuihaeuea
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 4/11/2015, 13:08

    Pode fazer uma copia, colocando a tabela, form e consulta afins,
    para eu poder analisar?


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 5/11/2015, 10:47

    Desculpe a demora Noobezinho, segue em anexo no link:

    https://drive.google.com/file/d/0B1c9lDS28LHEUTVnRU95cmZ1TlE/view?usp=sharing
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 5/11/2015, 11:33

    Rodrigo

    A função Init_SELCAB é chamada 2 vezes no exemplo.

    Mas, ela está ausente.

    Coloque-a aqui, para eu poder copia-la.


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 5/11/2015, 11:51

    Código:
    Function Init_SELCAB()

        Dim Matab As Recordset
        Dim bd As Database

        Application.SetOption "ShowWindowsInTaskBar", False

        Set bd = CurrentDb()
        Set Matab = bd.OpenRecordset("T_SEL_CAB")

        Vg_SEL_CAB = Matab![CAB]

        Matab.Close

    End Function

    Desculpa, ela ta até no modulo "Principal", mas está comentada.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 5/11/2015, 11:58

    aquele botão "teste" lá que é o gatilho, qualquer coisa é só verificar o codigo contido nele!
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 5/11/2015, 15:28

    Rodrigo

    Apanhando um pouco para entender teu código,

    Mas...

    Veja isso:


    If Me.Controls("chkbox_" & prensa) = -1 Then criterio = " Como " & criterio & " OU '" & prensa & "'"


    Mude para:

    If Me.Controls("chkbox_" & prensa) = -1 Then criterio = "LIKE" & criterio & " OR '" & prensa & "'"

    Porque está no VBA e não no corpo da consulta  Wink

    Aqui também:

    Acrescente as aspas simples antes e depois de criterio

    .sql = "select * from t_cqs_asp_sco where [DATA_CONT] Between " & Sel_prem_date_MT & " and " & Sel_der_date_MT & " AND [CURE_PRESS] '" & criterio & "';"

    Verifique se era somente isso que tava 'pegando'

    Como disse, não entendi o que de ocorre quando se clica no botão teste.

    Se era para abrir uma consulta:

    SelecionaPrensas = criterio

    Set db = CurrentDb

    With qd
    .Name = "Selecao_Multiplas_Prensas" '<-------------aqui tem um nome de consulta que será agregada a coleção de querydefs
    .sql = "select * from t_cqs_asp_sco where [DATA_CONT] Between " & Sel_prem_date_MT & " and " & Sel_der_date_MT & " AND [CURE_PRESS] '" & criterio & "';"
    End With

    db.QueryDefs.Append qd

    DoCmd.OpenQuery "sel_prensas_individual" '< ---- Aqui está chamando uma consulta que não existe

    Error2:
    Set qd = Nothing
    Set db = Nothing


    End Function


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 6/11/2015, 10:31

    Bom dia, Noobezinho.

    Desculpe a demora, não funcionou aqui. Sad

    Pelo que eu to entendendo, quando a função usada como critério retorna uma string, ela já retorna as aspas concatenadas no inicio e fim do que eu inseri.
    Por exemplo, se eu seleciono a prensa B13, ele me retorna "B13". Com isso, funciona perfeitamente quando selecionada. Entretanto, quando seleciono mais de uma, por exemplo a B13 e a A01, ele me retorna "B13 OR A01", tratando toda essa string como um parametro só. Já tentei concatenar somente uma aspa após a primeira prensa e uma após o OR, mas nada de funcionar.

    Já descobri que não vai ser tão facil fazer dessa maneira. Qualquer avanço aqui eu atualizo o topico.

    Agradeço pela ajuda, e que você tenha um bom dia!
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 6/11/2015, 12:05

    Como disse anteriormente, ainda não entendi o que pretende.

    Me diga o seguinte, que não me respondeu.

    nesta Função:

    Function SelecionaPrensas() As String
    Dim db As DAO.Database
    Dim qd As New DAO.QueryDef
    On Error GoTo Error2
    SelecionaPrensas = criterio

    Set db = CurrentDb

    With qd
    .Name = "Selecao_Multiplas_Prensas"
    .sql = "select * from t_cqs_asp_sco where [DATA_CONT] Between " & Sel_prem_date_MT & " and " & Sel_der_date_MT & " AND [CURE_PRESS] '" & criterio & "';"
    End With

    db.QueryDefs.Append qd

    DoCmd.OpenQuery "sel_prensas_individual"

    Error2:
    Set qd = Nothing
    Set db = Nothing


    End Function


    Porque o comando para abrir a consulta se ela não existe.
    E quando irá usar a consulta que acabou de criar nessa função ("Selecao_Multiplas_Prensas")

    Verifique esse trecho do código do botão teste:

    For i = 0 To 4

       For j = 1 To 15
           If j < 10 Then
               prensa = letras(i) & 0 & j
           Else: prensa = letras(i) & j
           
           End If
           If Me.Controls("chkbox_" & prensa) = -1 And criterio = Empty Then criterio = " '" & prensa & "'": GoTo proximoJ
           If Me.Controls("chkbox_" & prensa) = -1 Then criterio = "LIKE" & criterio & " OR '" & prensa & "'"
    proximoJ:
       Next j

    Next i


    'Debug.Print ssql
    'Debug.Print criterio
    SelecionaPrensas
    End Sub


    Veja na gravura que esse Loop For next está com problemas

    Se escolher apenas uma prensa, não é colocado o LIKE na instrução SQL

    E se escolher mais de uma prensa, é colocado mais de um  LIKE .
    Veja isso na janela imediata , na imagem abaixo.

    Quanto a aspas simples, se verificar  nos dois retornos do conteudo da .SQL,
    Verá que as aspas simples antes e depois  irão dar erro.
    Essa aspas devem ser colocadas em cada prensa.

    Acredito que saiba usar o ponto de interrupção e fazer a depuração do código
    como pode ver na imagem.

    Luiz - Clique aqui para ver a imagem:


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    cr4x
    cr4x
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 25
    Registrado : 22/07/2015

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  cr4x 6/11/2015, 16:40

    Consegui fazer funcionar, Noobezinho.

    Criei uma função:

    Código:
    '************************  FUNCAO CRIAR CONSULTA  ***************************
    Public Function criarConsulta(queryName As String, varString As String)

    Dim db As DAO.Database
    Dim qd As New DAO.QueryDef
    On Error GoTo Error

    Set db = CurrentDb
    'Debug.Print "varString = " & varString
    With qd
    .Name = queryName
    .sql = varString
    End With
    'DoCmd.DeleteObject acQuery, "Selecao_Multiplas_Prensas"
    102 db.QueryDefs.Append qd
    Set qd = Nothing
    Set db = Nothing

    DoCmd.OpenQuery queryName
    Exit Function
    Error:
    If Err.Number = 3012 Then
    DoCmd.DeleteObject acQuery, queryName
    GoTo 102
    End If
    End Function

    E coloquei esse codigo aqui no meu botão pra executar a consulta:

    Código:
    Private Sub selecaoaspscoR_btn_Click()
    Dim letras(4) As String, i As Integer, j As Integer, prensa As String, sSQL As String
    'Dim db As DAO.Database
    'Dim qd As New DAO.QueryDef
    'On Error GoTo Error

    letras(0) = "A"
    letras(1) = "B"
    letras(2) = "C"
    letras(3) = "D"
    letras(4) = "E"
    criterio = Empty
    For i = 0 To 4

        For j = 1 To 15
            If j < 10 Then
                prensa = letras(i) & 0 & j
            Else: prensa = letras(i) & j
            
            End If
            If Me.Controls("chkbox_" & prensa) = -1 And criterio = Empty Then criterio = " AND [CURE_PRESS] = '" & prensa & "'": GoTo proximoJ
            If Me.Controls("chkbox_" & prensa) = -1 Then criterio = criterio & " OR [CURE_PRESS] = '" & prensa & "'"
    proximoJ:
        Next j

    Next i

    sSQL = "select * from t_cqs_asp_sco where ([CLASS] Like '1D' or '1E' or '1J' or '3E' or '4D') AND ([DATA_CONT] Between #" & Format(CDate(Sel_prem_date_MT), "mm/dd/yyyy") & "# and #" & Format(CDate(Sel_der_date_MT), "mm/dd/yyyy") & "#)" & criterio & ";"
    'Debug.Print sSQL
    Call criarConsulta("Selecao_Multiplas_Prensas", sSQL)
    End Sub

    O problema era que no momento da consulta, eu estava colocando como critério :

    select * from t_cqs_asp_sco where ([CLASS] = 'H') AND ([DATA_CONT] Between #10/01/2015# and #11/02/2015#) AND [CURE_PRESS] = 'A01' OR 'A02' OR 'A03' OR 'A04';

    E o certo é:

    select * from t_cqs_asp_sco where ([CLASS] = 'H') AND ([DATA_CONT] Between #10/01/2015# and #11/02/2015#) AND [CURE_PRESS] = 'A01' OR [CURE_PRESS] = 'A02' OR [CURE_PRESS] = 'A03' OR [CURE_PRESS] = 'A04';

    Valeu mesmo Noobezinho, agora ta funcionando tranquilo! Se quiser posso enviar ele funcionando pra você entender melhor.

    Ps: agora ta organizadinho hahaha!
    Noobezinho
    Noobezinho
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4140
    Registrado : 29/06/2012

    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Noobezinho 6/11/2015, 16:55

    Entendi

    E daí saiu aqueles likes que estavam dando problemas.

    Ótimo!

    Quando a gente consegue solucionar, é mais gostoso,né? Razz Razz Razz

    Lava a alma! Laughing Laughing

    Valeu pelo retorno.

    Não precisa enviar não, agradeço a presteza!

    Boa sorte!


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.

    Conteúdo patrocinado


    [Resolvido]Função com String como Criterio de Consulta Empty Re: [Resolvido]Função com String como Criterio de Consulta

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 12:10