none
Não consigo preencher DataGridView RRS feed

  • Discussão Geral

  • Boa Noite a Todos,

    Pessoal estou com dificuldades pra preencher um DATAGRIDVIEW, com a consulta abaixo, podem me ajudar.

    Observação Importante: Se eu executar essa consulta usando o SQL MANAGEMENT STUDIO funciona perfeitamente. Só não funciona pra carregar o datagrid.

    Obs: O erro que aparece está no final desse post.

    select
    Pontuacao.Cpf
    , sum(Pontuacao.Pontuacao) as Pontos
    , coalesce(Resgate.Pontos, 0) as PontosGastos
    , sum(Pontuacao.Pontuacao) - coalesce(Resgate.Pontos, 0) as SaldoPontos
    from
    Pontuacao as Pontuacao
    outer apply
    (
    select
    Resgate.Usuario
    , sum(Resgate.Pontos) as Pontos
    from
    Resgate as Resgate
    where
    UPPER(Resgate.Usuario) = UPPER(Pontuacao.Cpf)
    group by
    Resgate.Usuario
    ) as Resgate
    group by
    Pontuacao.Cpf
    , Resgate.Pontos

    Estou usando esse método:

    O interessante é que se eu tirar o comando "COALESCE" e seu atributo ",0", carrega o datagrid  perfeitamente.

    Mas gostaria que funcionasse com o COALESCE, pois dessa forma ele me retorna os registros que estão zerados também.

    public void pesquisar()
            {
                try
                {
                    con.Open();

                    SqlCeDataAdapter pesq = new SqlCeDataAdapter("SELECT Pontuacao.Cpf, sum(Pontuacao.Pontuacao) as Pontos,  coalesce(Resgate.Pontos, 0) as PontosGastos, sum(Pontuacao.Pontuacao) - coalesce(Regate.Pontos, 0) as SaldoPontos from Pontuacao as Pontuacao outer apply (select Resgate.Usuario, sum(Resgate.Pontos) as Pontos from Resgate as Resgate where UPPER(Resgate.Usuario) = UPPER(Pontuacao.Cpf) group by Resgate.Usuario) as Resgate group by Pontuacao.Cpf, Resgate.Pontos", con);


                    DataTable tabela = new DataTable();

                    pesq.Fill(tabela);

                    dataGridView2.DataSource = tabela;

                    this.dataGridView2.DefaultCellStyle.Font = new Font("Tahoma", 12);
                    this.dataGridView2.DefaultCellStyle.ForeColor = Color.DarkSlateGray;
                    dataGridView2.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

                }
                catch (Exception E)
                {
                    MessageBox.Show(E.Message);

                }
                finally
                {
                    con.Close();
                }

            }

    Esse é o erro que dá:

    segunda-feira, 12 de junho de 2017 05:03

Todas as Respostas

  • Olá, Edson!

       Neste caso, o erro está ocorrendo porque não existe a tabela ou alias "Regate", mas sim "Resgate". Corrija esta linha:

    , sum(Pontuacao.Pontuacao) - coalesce(Resgate.Pontos, 0) as SaldoPontos 

    Substituindo todo o comando ficaria assim:

    SqlCeDataAdapter pesq = new SqlCeDataAdapter("SELECT Pontuacao.Cpf, sum(Pontuacao.Pontuacao) as Pontos,  coalesce(Resgate.Pontos, 0) as PontosGastos, sum(Pontuacao.Pontuacao) - coalesce(Resgate.Pontos, 0) as SaldoPontos from Pontuacao as Pontuacao outer apply (select Resgate.Usuario, sum(Resgate.Pontos) as Pontos from Resgate as Resgate where UPPER(Resgate.Usuario) = UPPER(Pontuacao.Cpf) group by Resgate.Usuario) as Resgate group by Pontuacao.Cpf, Resgate.Pontos", con);
    Se você executasse este mesmo código no sql server, daria erro também. Você deve estar executando a consulta que você já tinha montada, e não a mesma que está nesta linha.

    Bom trabalho!


    • Editado Rodrigo CdS segunda-feira, 12 de junho de 2017 13:17
    segunda-feira, 12 de junho de 2017 13:13
  • Bom dia Rodrigo,

    Cara a gente fica igual um louco retardado procurando a solução, e as vezes por estarmos tão cansados e estressados não reparamos erros bobos, como não percebi, era só ler as mensagem até o final com atenção.

    Fazer o quê, é rir pra não chorar.

    Rodrigo obrigado por sua colabolaração.

    Atenciosamente,

    Edson

    segunda-feira, 12 de junho de 2017 16:00
  • Olá, Edson!

       Neste caso, o erro está ocorrendo porque não existe a tabela ou alias "Regate", mas sim "Resgate". Corrija esta linha:

    , sum(Pontuacao.Pontuacao) - coalesce(Resgate.Pontos, 0) as SaldoPontos 

    Substituindo todo o comando ficaria assim:

    SqlCeDataAdapter pesq = new SqlCeDataAdapter("SELECT Pontuacao.Cpf, sum(Pontuacao.Pontuacao) as Pontos,  coalesce(Resgate.Pontos, 0) as PontosGastos, sum(Pontuacao.Pontuacao) - coalesce(Resgate.Pontos, 0) as SaldoPontos from Pontuacao as Pontuacao outer apply (select Resgate.Usuario, sum(Resgate.Pontos) as Pontos from Resgate as Resgate where UPPER(Resgate.Usuario) = UPPER(Pontuacao.Cpf) group by Resgate.Usuario) as Resgate group by Pontuacao.Cpf, Resgate.Pontos", con);
    Se você executasse este mesmo código no sql server, daria erro também. Você deve estar executando a consulta que você já tinha montada, e não a mesma que está nesta linha.

    Bom trabalho!


    Bom dia Rodrigo,

    Cara a gente fica igual um louco retardado procurando a solução, e as vezes por estarmos tão cansados e estressados não reparamos erros bobos, como não percebi, era só ler as mensagem até o final com atenção.

    Fazer o quê, é rir pra não chorar.

    Rodrigo obrigado por sua colabolaração.

    Vou testar aqui, te retorno.

    Atenciosamente,

    Edson



    • Editado Edson535 segunda-feira, 12 de junho de 2017 16:05
    segunda-feira, 12 de junho de 2017 16:01
  • Boa Tarde Rodrigo

    Deu certo Rodrigo.

    A pressa, o cansaço e a falta de atenção tudo junto, me fez não perceber esse erro bobo.

    Obrigado,

    Edson

    segunda-feira, 12 de junho de 2017 19:04