Erro ao montar SQL usando o Assistente SQL



  • Caríssimos, estou precisando montar uma Consulta em uma tela para saber se a data que está sendo informada já está cadastrada para algum registro da tabela. Fazendo manualmente o SQL ficaria assim se fosse executar manualmente.
    Pergunto, como implementar esse SQL no Assistente de SQL, lembrando que a data fixa que aparece deve ser um parâmetro ou campo de tela e esse SQL estou pensando em colocar no evento Antes de Incluir pois não posso incluir um registro se a data já estiver presente em outro registro.

    SELECT planocontas_id, empresa_id, contaconbail, nomeconta, dtincio,
    dtfim, ativo, temmovimento
    FROM public.planocontas
    WHERE '2019-04-10' BETWEEN dtincio AND dtfim

    Eu consegui criar a consulta desse jeito:

    No Assistente de Consulta o campo Critério eu coloquei da seguinte forma:
    quando o campo for P.DTINICIO, o campo critério ficou assim: < :DtHoje OR = :DtHoje
    quando o campo for P.DTFIM o campo critério ficou assim: > :DtHoje OR = :DtHoje

    Quando vejo o SQL e monta da seguinte maneira:
    Select
    Count(P.planocontas_id) As Count_planocontas_id
    From
    planocontas P
    Where
    (P.dtincio < DATE '2019-04-10' Or
    P.dtincio = DATE '2019-04-10') And
    (P.dtfim > DATE '2019-04-10' Or
    P.dtfim = DATE '2019-04-10') And
    (P.ativo = 'true')


    Mais uma informação que acho importante, quando tento trabalhar com data no Assistente de Consultas me apresenta a seguinte mensagem quando tento ver o resultado da consulta: [b]InvalidDate String[/b]



    Desde já agradeço a atenção.


  • Olá Nilton, tudo bom?

    Confesso que não entendi muito bem o objetivo da consulta, a data fixa na consulta é uma opção sua mesmo ou não encontrou outra forma de fazer? Não seria o caso você comparar com um campo data na tabela? Veja esse exemplo: [code] -- TABELA CREATE TABLE public.sig_funcionario ( fun_cod integer NOT NULL DEFAULT nextval('sig_funcionario_fun_cod_seq'::regclass), fun_cod_gerente integer, fun_nome character varying(100) NOT NULL, fun_idade integer, fun_salario double precision, fun_sexo character varying(1) NOT NULL, dep_cod integer NOT NULL, fun_cpf character varying(20), fun_data_admissao date, fun_ativo character varying(1), fun_foto bytea, fun_observacoes text } -- CONSULTA Select S.fun_nome, S.fun_data_admissao From sig_funcionario S where S.fun_data_admissao BETWEEN :dtInicio AND :dtFim [/code] Neste exemplo, se você tentar visualizar o resultado da consulta no Assistente, terá de fato o erro de "Invald DATE string". Isso porque o assistente não vai conseguir entender que deve esperar um parâemtro. Em execução, passando datas no formato adequado, não ocorreria erro.

    [color=#FF0000]Outra coisa..[/color]

    Lembre-se que você pode ativar o ImportSQLFromClipBoard pra importar de forma rápida suas querys.

    Link do manual falando sobre o parâmetro: [url]http://suporte.softwell.com.br/maker/manual_3/pt/estrutura_maker_e_webrun/arquivo_maker3_ini.htm[/url]

    Abraços :)


  • Aproveitando o tópico,

    Mais dicas e detalhes podem ser vistas nos links:
    http://suporte.softwell.com.br/maker/manual_3/pt/maker_3/formulario/assistente_sql/iniciando_com_o_assistente_sql.htm
    e
    http://suporte.softwell.com.br/maker/manual_3/pt/maker_3/formulario/assistente_sql/usando_funcoes_predefinidas_em_consultas.htm


  • Bom dia Éric e Ronélio.

    Obrigado pela atenção, deu certo e obrigado pelas outras dicas, já modifiquei o Maker3.ini.

    Só para explica meu SQL, eu tenho uma tabela de Contas e tenho a data de Criação da Conta e a Data de Validade da Conta, o que estava querendo testar é se a Data de Movimentação da Conta, que está na tabela Movimento Mensal está entre as 2 datas da Tabela de Contas, por isso coloquei a data fixa que representa a data da tela do movimento e as outras 2 datas são da tabela de contas. Isso eu faço em outros sistemas e funciona legal. Mas deu certo, só mudei o jeito usando MAIOR IGUAL e MENOR IGUAL.

    O manual é muito grande, tem muita informação, é difícil ficar bom do dia para a noite mas vou tentando.
    Valeu, mais uma vez muito obrigado.

Log in to reply