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


4 participantes

    [Resolvido]Expressões Complexas

    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Expressões Complexas

    Mensagem  MSoccol 18/5/2011, 15:53

    Bom dia, o título é vago pois estou com dificuldades de definir o problema. Tinha duas consultas que acessavam uma tabela e comparavam com um valor de um formulário modificado por uma função interna ao meu sistema.

    Tudo funcionava perfeitamente, mas quando tive que adicionar mais dados a minha tabela. passou a dar o erro de Expressao complexa demais para ser avaliada. Ao adicionar novos dados tive que mudar as chaves primarias da minha tabela, pois estavam mal definidadas. Então fica a pergunta:

    - Seria uma forma de resolver expressões complexas, as chaves primárias e indexaçoes das tabelas? Ou o problema está na consulta?
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  JPaulo 18/5/2011, 16:54

    Infelizmente é um problema comum que ocorre quando se coloca algo como uma das seguintes expressões com um operador OU (Or) na linha critérios das consultas:

    Formulários!SeuFormulario!SeuControle Ou Formulários!SeuFormulario!SeuControle Is Null

    Ou ainda

    Como Formulários!SeuFormulario!SeuControle & "*" Ou Formulários!SeuFormulario!SeuControle Is Null


    Para evitar esse problema, você pode colocar os critérios para cada campo em uma nova coluna da consulta:

    CampoNovo:[SeuCampo] Como Formulários!SeuFormulario!SeuControle & "*" Ou Formulários!SeuFormulario!SeuControle Is Null

    Mostrar:desmarque o visto

    No Critério você coloca:Verdadeiro



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Expressões Complexas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Expressões Complexas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Expressões Complexas Folder_announce_new Instruções SQL como utilizar...
    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 18/5/2011, 17:45

    Não funcionou! Meu problema é que não uso Ou estou usando <= e > para um mesmo campo. Tentei seu exemplo mas o erro continua o mesmo.

    O engraçado que só começou esse problema depois que inseri mais registros na tabela. Funcionava quando eram 28 e agora com 120 está com problemas.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  Alexandre Neves 18/5/2011, 19:09

    Boa tarde, MSoccol

    Primeiro, escreva de forma que seja intelegível e não deixe dúvidas. Para tal, pontue o texto.
    Espero que não tenha interpretado mal a sua dúvida.
    O e que utilizou, suponho tratar-se da partícula de conjunção. Se for o caso, a sua consulta não devolverá valores, pois quer que: campo<= DeterminadoValor And campo> DeterminadoValor. Ora, ou o campo é menor ou igual ou maior que o valor de comparação. A conjunção de duas das condições incompatíveis resulta em nada.
    Cumprimentos,
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  JPaulo 18/5/2011, 19:30

    Excelente observação Grande Alexandre.

    Essa parte do <= e >, não estava no tópico principal.



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Expressões Complexas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Expressões Complexas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Expressões Complexas Folder_announce_new Instruções SQL como utilizar...
    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 21/5/2011, 15:35

    Bom dia a todos. Iniciarei novamente meu problema de forma a não deixar mais nenhuma dúvida.

    Existe uma tabela de codigos, com 3 campos: uma letra, um valor de ínicio e um valor de fim(cod_letra, cod_inicio, cod_fim)

    Preciso codificar itens com essa letra quando o valor de um campo (frm_item), de um formulário, está entre o cod_inicio e o cod_fim, por isso utilize o <= e o >. Ou seja, utilizo uma consulta com as clausulas where:

    - cod_inicio <= frm_item
    - cod_fim > form_item

    Isso retornaria o cod_letra para esse item..

    No entanto ao aumentar o número de registros da tabela de códigos, o erro de expressão complexa começou a aparecer. Tentei utilizar as expressões acima para valores de campo na consulta, colocando Verdadeiro no critério, mas o erro é o mesmo.

    Outro fator importante é que antes de aumentar a tabela o cod_letra era único, era chave primária da minha tabela de códigos. A questão é que: o mesmo código deve ser aplicado para vários intervalos de valores, então quando aumentei minha tabela de códigos alterei minhas chaves primárias para cod_inicio e cod_fim, já que o cod_letra se repetiria, mas a dupla cod_inicio e cod_fim é única.

    Continuarei fazendo testes, mas espero que a dúvida tenha ficado mais clara agora.



    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  criquio 21/5/2011, 16:00

    Não seria o contrário? >= CodInicio E < CodFim


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    Convidad
    Convidado


    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  Convidad 21/5/2011, 21:52

    tente compliar o seu banco, em alguns casos desse erro resolve.

    no seu PC
    botão iniciar
    executar

    cole isto e altere para o correto, faça enter

    "C:\Program Files\Microsoft Office\Office11\MSACCESS.EXE" "C:\pasta\banco.mdb" /decompile

    Office11 é do 2003 se for o 2007 é Office12
    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 22/5/2011, 03:42

    É e não é Críquio! Escrevemos a mesma coisa: o valor do form tem que estar entre os valores da tabela!
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  criquio 22/5/2011, 11:37

    Acho que não é assim amigo. Olha só, vamos imaginar que tenho na tabela os números de 1 a 500. Se eu quiser CodInicio=150 e CodFim=210, terá que ser CodInicio >= 150 E CodFim <= 210. Dessa forma, terei os códigos no intervalo que quero. Se eu colocar CodInicio <= 150 E CodFim > 210, não terei nenhum resultado, pois nesse caso estou pedindo o que for menor ou igual a 150 E maior que 210. Aí não tem jeito, pois não tem como um número ser as duas coisas ao mesmo tempo. No primeiro caso, estou solicitando um intervalo de números entre um inicial e outro final. A não ser que você esteja querendo excluir esse intervalo da pesquisa. Aí teria que trocar o E por Ou: <= CodInicio Ou > CodFim.
    Pode ser tambem que eu que não esteja entendendo como deve funcionar o esquema.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 22/5/2011, 12:49

    Bom dia!
    O fato é que na minha tabela é que tenho os valores extremos, e no formulário terá um único valor que deve ser analisado para retornar em qual intervalo ele se situa.

    Isso foi o que eu escrevi no início:
    - cod_inicio <= frm_item
    - cod_fim > form_item

    Posso escrever assim também:
    - cod_inicio <=frm_item < cod_fim
    Terei escrito a mesma coisa que acima, parecido com uma fórmula Between.

    E ressalto que meu problema não problema não seria o retorno de nenhum valor, mas sim, a indicação de expressão complexa.
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  criquio 22/5/2011, 13:10

    Ah, você quer fornecer um valor e quer que retorne os valores imediatamente maior e menor, é isso? Supondo uma sequência assim: 200, 201, 205, 207, 211, 212, 215, 218. Se você fornecer 211, deve retornar 207 e 212, seria isso?


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 22/5/2011, 13:14

    É por aí Criquio!

    Na verdade trabalharei com decimais, da seguinte forma
    Tabela:
    cod_letra------cod_inicio-------cod_fim
    A------------------30-------------31
    B------------------31-------------32
    C------------------32-------------33
    .
    .
    .

    Daí quando meu frm_item for = 30,2 quero que a consulta retorne "A", quando for 32,9, "C".

    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 25/5/2011, 21:06

    Evoluindo o problema. Busquei sair do das consultas. Fiz o seguinte:

    Crie um formulário (frm_cod) com todos os campos da tabela de códigos(cod_letra, cod_inicio, cod_fim)

    No VBA criei um sub
    Private Sub cod_click()
    Dim teste as Double

    teste = função_interna(forms!meuform!campo_filtro)

    DoCmd.OpenForm "frm_cod", acNormal, , " cod_inicio <= " & teste & " AND cod_fim >= " & teste &"

    End Sub


    Quando executo esse sub aparece a seguinte mensagem de erro:
    Erro de Sintese (vírgula) na expressão de consulta 'cod_inicio <= -27,9133 AND cod_fim > -27,9133'

    Nos testes para resolver isso, troquei o tipo de variável de double para integer, aí acaba com o problema do erro, mas não retorna nenhum valor já que ele arredonda para teste=-28

    Dito isso, minha pergunta é, qual a sintese para que o VBA entenda a vírgula do valor da minha variável teste?
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  JPaulo 25/5/2011, 21:21

    Ola Matias boa tarde !

    O VBA não entende a virgula como pretende, porque a virgula é considerada um delimitador.

    Tem de utilizar a função Replace e substiuir a virgula por ponto 27.9133

    Para isso procure aqui nos postes do Assis, que já não é a primeira vez que o ajudei a ultrapassar esse problema.



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Expressões Complexas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Expressões Complexas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Expressões Complexas Folder_announce_new Instruções SQL como utilizar...
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  JPaulo 25/5/2011, 21:25

    Veja este;

    http://maximoaccess.forumeiros.com/t2139-resolvidolocalizar-com-varias-condicoes


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Expressões Complexas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Expressões Complexas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Expressões Complexas Folder_announce_new Instruções SQL como utilizar...
    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 25/5/2011, 21:38

    Boa Tarde JPaulo!

    Tentei fazer inserir o replace na definição de variável, e deu um erro com a inscrição "estouro" ele passou a considerer 279133, eu acho. Quando inseri na clausula where do openform, não teve erro nenhum, só que ele retorna nenhum valor. Acho que ele não consegue comparar -27 com -27.91

    avatar
    MSoccol
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 74
    Registrado : 24/03/2011

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  MSoccol 25/5/2011, 22:12

    Bem pessoal, revi tudo que tinha feito até agora e refiz minhas tabelas troquei o início pelo fim, e o fim pelo início, isso tava causando muita confusão. Acho que ficou mais coerente assim, e o Access também, as consultas passaram a funcionar.

    A tabela antiga, tinha valore maiores no inicio e valores menores no fim (talvez por isso o Criquio estava achando estranho). Na nova tabela, os valores menores são os iniciais e os maiores os finais. Não sei se foi só isso, mas refiz minhas tabelas e minhas consultas, e está funcionando, vamos ver até quando...

    Outro ponto importante foi aquilo que o JPaulo falou de utilzar o valor do campo da consulta como [cod_fim] > [frm_filtro] e ulilizar o critério como verdadeiro.

    No entanto com a inscrição verdadeiro, as expressões complexas continuavam, então utilizei -1 no critério e tudo funcionou.

    Obrigado a todos, e espero que este post possa ajudar muitos outros.
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  JPaulo 26/5/2011, 12:27

    Bom dia amigo Matias;

    Muito valioso esse seu retorno.

    O forum agradece.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Expressões Complexas Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Expressões Complexas Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Expressões Complexas Folder_announce_new Instruções SQL como utilizar...

    Conteúdo patrocinado


    [Resolvido]Expressões Complexas Empty Re: [Resolvido]Expressões Complexas

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 13:43