[RESOLVIDP] Widget de Índice - Função de Período - The active result for the que

Pessoal boa tarde,

Estou montando um dashboad comercial porém estou encontrando dificuldade com os Widgets de Índice. Estou comparando a quantidade total de produtos vendidos. No campo “Função de período” ao selecionar a opção “Mês”, o Widget está mostrando os meses Novembro e Dezembro, ou seja, está levando em consideração todos os anos e não somente o ano Corrente. ok, então tentei selecionar a opção “Ano e Mês”, porém aparece a mensagem: “Erro ao acessar o banco de dados (The active result for the query contains no fields.)”.

Na minha base SQL os valores do campo de período está no formato: 2015-10-25 00:00:00.000

Obrigado

O erro é que não existe campos… post aqui a instrução sql utilizada.

Joelton Boa tarde!

Como se trata de um widget de indice a instrução do SQL não fica visível. Fui em “Aplicaçao–>Código-Fone” e pedi para exibir o conteúdo do Index. O que eu encontrei com comando SELECT foi o seguinte:

1378| function getIndexContentData_widget2() {
1379| if (in_array(strtolower($this->Ini->nm_tpbanco), $this->Ini->nm_bases_mssql))
1380| {
1381| $sSql = “SELECT SUM(“qtde”), CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) FROM dbo.PedItem GROUP BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) ORDER BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) DESC”;
1382| }
1383| elseif (in_array(strtolower($this->Ini->nm_tpbanco), $this->Ini->nm_bases_sqlite))
1384| {
1385| $sSql = “SELECT SUM(qtde), strftime(’%Y’, dten) || ‘-’ || strftime(’%m’, dten) FROM dbo.PedItem GROUP BY 2 ORDER BY strftime(’%Y’, dten) || ‘-’ || strftime(’%m’, dten) DESC”;
1386| }
1387| else
1388| {
1389| $sSql = “SELECT SUM(qtde), YYYYMM(dten) FROM dbo.PedItem GROUP BY 2 ORDER BY YYYYMM(dten) DESC”;
1390| }
1391|
1392| $oRs = $this->Ini->Db->SelectLimit($sSql, 2);

Joelton,

Achei o debug que não estava encontrando. Segue o resultado:

[b]SELECT top 2 SUM(“qtde”), CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) FROM dbo.PedItem GROUP BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) ORDER BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) DESC

195: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]‘CONCAT’ is not a recognized built-in function name.[/b]

Estou usando SQL server 2008 R2

Aí está o problema, a função concat foi adicionada no SQL Server 2012, você está executando uma versão mais antiga do SQL Server.

Alguma sugestão de como fazer funcionar com o sql 2008 r2?

Veja a abaixo os códigos de exemplo:

1 – Concatenando valores utilizando o sinal de mais(+):

Select Nome+Sobrenome As NomeCompleto from Clientes

Ou

Select Nome+Sobrenome As ‘Nome do Cliente’ from Clientes

2 – Concatenando campos de diferentes tipos fazendo a conversão de dados:

Select Convert(VarChar(4), Codigo)+’ – ‘+Descricao As ‘Descrição do Produto’ from Produtos

Ou

Select Cast(Codigo As VarChar4))+’ – ‘+Descricao As ‘Descrição do Produto’ from Produtos

Ou

Select Codigo,
Descricao,
Convert(Char(10), DataInicialValidade,103)+’ – ‘+Convert(Char(10), DataFinalValidade,103) As ‘Período de Validade do Produto’
From Produtos

Sabe onde eu consigo editar o código SQL de um widget de indice?

No seu caso é a instrução SQL principal…

Exato, mas onde eu edito ela. Veja a tela de um widget de indice (anexo)


tela_widget.jpg

O problema não está no widget mas na tabela que está usando…

Consegue ser um pouco mais especifico?

Ao criar o Widget você chamou de uma tabela ou view… logo o problema está antes… entendeu?

Joelton,

Creio que não estamos nos entendendo muito bem! Primeiro o problema que identificamos foi que o meu SQL 2008 R2 não é compativel com a função concat. ok até ai tudo bem. Então você postou algumas alternativas para modificar a instrução do Select, porém a minha dúvida é onde eu consigo editar o Select??? Ao criar o widget eu chamei uma tabela do SQL que tem alguns campos e um campo data (smalldatetime), não entendo o que poderia estar errado na minha tabela.

Faz o seguinte, atualize manualmente o scriptcase, limpe a pasta temp e exclua tudo dentro da pasta app, depois tente novamente… houve correção quanto ao lookup do sql server…

SC Atualizado V9.0.023, Pasta tmp e app excluidas, cache navegador limpo.
Segue o mesmo problema.

Mandei uma mensagem privada para você…

Pessoal

Analisando um pouco melhor a situação:

Fiz alguns testes nas propriedades da conexão, alterando o campo “Driver de SGDB” e tive o seguinte resultado:

1- Para Driver = “MSSQL Server NATIVE SRV PDO”
O resultado do select através do sql builder foi 2017-11-01, o mesmo valor que está no banco. O Erro que apresenta ao executar o widget de indice é: Erro ao acessar o banco de dados (The active result for the query contains no fields.)

2- Para Driver = “MSSQL Server NATIVE SRV”
O resultado do select através do sql builder para o campo data foi 2017-11-01T00:00:00Z, enquanto que no banco está: 2017-11-01 O Erro que apresenta ao executar o Widget de indice é:
[b]SELECT top 2 SUM(“qtde”), CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) FROM dbo.PedItem GROUP BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) ORDER BY CONCAT(YEAR(“dten”), ‘-’, RIGHT(‘0’ + CAST(MONTH(“dten”) AS VARCHAR(2)), 2)) DESC

195: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]‘CONCAT’ is not a recognized built-in function name.[/b]

OBS:
Para Período “Ano”, “Data Completa” etc funciona normalmente.
Para Períodos com duas “quebras” tipo “Ano\Mes”, “Ano\Semana” e etc não funciona

Alguma luz?

Fechando o tópico como Resolvido. Após a atualização para o SC 9.1 o problema não aconteceu mais.