Passar Data Como Parâmetro

Senhores,

Não estou conseguido passar uma data como parâmetro, vamos lá

1 - Criei uma Formulário de controle, em campos, cria um campo com o tipo DATA.
2 - Fiz a ligação com um Consulta, liguei as duas.

Quando selecione a data e ele chama a consulta da um erro, já percebi que o erro é porque a informação passada como parametro do controle, vem cem as aspas simples, como deve ser uma data.

Como faço par resolver isso ?

Segue o erro abaixo.

206: SQLState: 22018 Error Code: 206 Message: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Operand type clash: date is incompatible with int

ADOConnection._Execute(select count(), sum(VALOR) from dbo.ContasPagarAbertoSC where ((convert(DATE,DTAPGTO) >= 2021-03-23 AND convert(DATE,DTACON…, false) % line 1149, file: [adodb.inc.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/prod/third/adodb/adodb.inc.php) ADOConnection.Execute(select count(), sum(VALOR) from dbo.ContasPagarAbertoSC where ((convert(DATE,DTAPGTO) >= 2021-03-23 AND convert(DATE,DTACON…) % line 58, file: [ContasPagarSC_total.class.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/RELATORIOS/ContasPagarSC/ContasPagarSC_total.class.php) ContasPagarSC_total.quebra_geral_sc_free_group_by() % line 685, file: [ContasPagarSC_grid.class.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/RELATORIOS/ContasPagarSC/ContasPagarSC_grid.class.php) ContasPagarSC_grid.inicializa() % line 107, file: [ContasPagarSC_grid.class.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/RELATORIOS/ContasPagarSC/ContasPagarSC_grid.class.php) ContasPagarSC_grid.monta_grid(0) % line 3003, file: [index.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/RELATORIOS/ContasPagarSC/index.php)

Não conheço botão do tipo data.
Na consulta como insere o parâmetro passado pela controle?
Porque não usou o filtro da própria grid.

Haroldo, desculpe criei um campo do tipo DATA, que passa o parâmetro para o Formulário.

Passa o a data juntamente com os demais campos do Controle, tais como, Filial, Fornecedor, Data.

Declarei elas como variais globais, os parametros são recebidos pelo SQL do formulário, e executado conforme a necessidade do cliente, não utilizamos o Filtro do Formulário porque a tabela é muito grande, para otimizar tempo de resposta.

Filtro da grid vc pode usar campos manuais como na controle.

Vc mesmo deve inserir as aspas na query da grid.

Então, essa é a questão.

Eu já tentei inserir na consulta do próprio formulário, utilizando a macro sc_select_where(add)

Adicionei no OnScipt o código baixo, sendo que o campo DataCorte é o campo do que criei.

if (empty({sc_where_atual})){
sc_select_where(add) = “WHERE
((convert(DATE,DTAPGTO) >= {DATACORTE}
AND convert(DATE,DTACONTA) <= {DATACORTE})
OR
(convert(DATE,DTAPGTO) IS NULL
AND convert(DATE,DTACONTA) <= {DATACORTE}))”;
}
else{
sc_select_where(add) = “AND
((convert(DATE,DTAPGTO) >= {DATACORTE}
AND convert(DATE,DTACONTA) <= {DATACORTE})
OR
(convert(DATE,DTAPGTO) IS NULL
AND convert(DATE,DTACONTA) <= {DATACORTE}))”;
}

Eu já tentei manipular a entrada da Global, passando para outra variável local e adicionar as aspas, mas não obtive sucesso, não sei onde estou errando, já estou trava nisso a horas.

((convert(DATE,DTAPGTO) >= ‘{DATACORTE}’

1 Curtida

Haroldo,

Muito obrigado pela ajuda, consegui resolver, graças a sua ajuda, parabéns pela paciência com nós iniciando na ferramenta.

Aproveitando o posto, eu não consigo fazer funcionar a macro sc_select_where(add), adicionei ela na Consulta - onApplicationInit, para verificar, as globais que são passada pelo Formulário de Controle, se existe o valor eu adiciona ela na clausula where, se não permanece como está, até coloquei um echo para me retornar o valor que está vindo nna global para ter certeza, executa o IF, mostra que tem valor, mas não muda o Where da consulta, pode me dar uma direção ?

Segue comando utilizado.

if (empty([FORNECEDOR]))
{
echo “VARIÁVEL ESTÁ VAZIA”;
}
else
{
echo "DADOS DA VARIÁVEL ".[FORNECEDOR];
sc_select_where(add) = “AND ID_ENTIDADE = [FORNECEDOR]”;

}

Primeiro utilize na onscriptinit.
Segundo, não tenho como afirmar que seu código está ok.

@InfinitusWeb,

Conforme orientação, mudei para onScriptinit, mesmo assim não funcionou, o SQL acredito estar certo, pois se executo direto funciona, vou adicionar dois print aqui, para melhor explicar.

percebe que é o mesmo SQL da aplicação, oque quero é adicionar mais uma clausula ao WHERE quando a variável não for vazia, se for permanece como está.

Localizei o problema, é o order by, se tirar ele funciona.

Mas vc já tem cláusula Where no SQL principal

@InfinitusWeb, sim já tenho, mas como as variáveis são globais e vem de outra aplicação, elas podem vir sem informação de dados, com isso eu preciso validar elas antes de aplicar no where, a Data é um campo obrigatório, então ela fica no select principal fixa, os campos de fornecedor e filial, podem vir zerados, preciso validar as mesmas, se não for nulo, adicionar elas a clausula where, com o AND.

Então a macro deve acrescentar com AND e não com Where

@InfinitusWeb, conforme a primeira imagem, está sendo acrescentado AND.

Só tirei o comando ORDER BY, funcionou.

Obrigado pela ajuda, a resolução não seria possível seu sua ajuda, muito obrigado!

1 Curtida