none
Group By ou Disctinct ignoram primeiro registro em uma listagem de While ou Repeater RRS feed

  • Pergunta

  • Sempre que uso o Group By ou Distinct a primeira linha não aparece em uma listagem de while ou repeater, faço o mesmo teste direto no Mysql e funciona normalmente

    Dim cmdText_1 As String = "SELECT year(periodo)as ano,  from ctc_rem group by year(periodo) order by year(periodo) asc"
    Alguem já passou por isso?


    Alebarros

    terça-feira, 27 de novembro de 2012 02:51

Respostas

  • Fiz alguns testes aqui e funcionou corretamente

            cn.Open();
            OleDbCommand cmd = new OleDbCommand("SELECT CODIGO,NOME FROM CLIENTES ORDER BY CODIGO ASC", cn);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Response.Write(dr["CODIGO"].ToString() + " - " + dr["NOME"].ToString() + "<br>");
            }

    Da uma olhada nesse codigo ele le a tabela e gera o DataReader escrevendo campo codigo + campo nome ele esta em C# mas é bem semelhante ao VB


    Junior

    terça-feira, 27 de novembro de 2012 18:07

Todas as Respostas

  • Ola

    Olha ja tive problemas usando Oracle durante a utilização de alguns comandos, mas nunca problemas como esse seu, para problemas "fantasmagoricos" eu uso o seguinte

    Dim cmdText_1 As String = "SELECT * FROM (SELECT year(periodo)as ano,  from ctc_rem group by year(periodo) order by year(periodo) asc)"

    Tenta usar essa forma, inesplicavelmente fazendo isso ja resolvi varios problema estranhos rss

    Qualquer coisa posta de volta


    Junior

    terça-feira, 27 de novembro de 2012 09:53
  • Junior, obrigado pela ajuda mas ainda continua..

            Dim cmdText_1 As String = "SELECT * FROM (SELECT year(periodo)as ano, periodo  from ctc_rem group by year(periodo) order by year(periodo) asc) ano"
    
    'Após a seleção vou popular com While e onde não aparece o primeiro registro'
    
     While rs.Read
    
      drCurrentRow = dtCurrentTable.NewRow()
                
      drCurrentRow("ano") = rs("ano")
    
      dtCurrentTable.Rows.Add(drCurrentRow)
            
      End While

    Consulta no BD

    Consulta no BD

    O Resultado mostrado pelo .NET


    Alebarros

    terça-feira, 27 de novembro de 2012 10:38
  • Alessandro tenta jogar seu result para um datatable e depois vc usa o datatable como datasource do gridview, acho que já passei por algo assim e a solução foi essa, ou então não usa o while usa um for para popular.

    Junior

    terça-feira, 27 de novembro de 2012 11:43
  • Agora vendo esse exemplo que você passou estou me lembrando ja tive esse problema por acaso você esta usando um teste de IF antes do While ?

    IF DR.READ() THEN pois se você fizer isso o ponteiro do DataReader ja avança uma posição agora se você usar o somente o WHILE DR.READ() deveria dar certo mas se você estiver usando um IF DR.READ antes do While tira ele e executa a rotina que deve dar certo


    Junior

    terça-feira, 27 de novembro de 2012 12:38
  • Não tem if, tentei com o For e acontece a mesma coisa.. não entendo porque ele salta

    Alebarros

    terça-feira, 27 de novembro de 2012 17:38
  • Fiz alguns testes aqui e funcionou corretamente

            cn.Open();
            OleDbCommand cmd = new OleDbCommand("SELECT CODIGO,NOME FROM CLIENTES ORDER BY CODIGO ASC", cn);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Response.Write(dr["CODIGO"].ToString() + " - " + dr["NOME"].ToString() + "<br>");
            }

    Da uma olhada nesse codigo ele le a tabela e gera o DataReader escrevendo campo codigo + campo nome ele esta em C# mas é bem semelhante ao VB


    Junior

    terça-feira, 27 de novembro de 2012 18:07
  • Junior, obrigado funcionou, acredito que tenha sido a maneira como estava fazendo a trazendo os campos do banco declarava de maneira diferente o DataReader.

    o código ficou assim:

            Dim cnnString As String = ConfigurationManager.AppSettings("ConnectionString")
            Dim cn As New MySqlConnection(cnnString)
    
    
            cn.Open()
            Dim cmd As New MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM (SELECT year(periodo)as ano, periodo  from ctc_rem group by year(periodo) order by year(periodo) asc) ano", cn)
            
    Dim dr As MySql.Data.MySqlClient.MySqlDataReader = cmd.ExecuteReader()
    
            While dr.Read()
                Response.Write(dr("ano").ToString() + "<br>")
            End While
    

    Já continuando, se quiser quiser me ajudar estou com um problemão sério.

    Campos do repeater retornam valores em branco ao salvar

    Valeu!!


    Alebarros

    terça-feira, 27 de novembro de 2012 18:34
  • Blza amigo, que bom que deu certo depois marca como resposta ai flwwww

    Respondi uma questão sua referente ao repeater


    Junior

    terça-feira, 27 de novembro de 2012 22:35