Usuário com melhor resposta
Group By ou Disctinct ignoram primeiro registro em uma listagem de While ou Repeater

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
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
- Marcado como Resposta Alessandro Barros terça-feira, 27 de novembro de 2012 18:34
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
-
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
O Resultado mostrado pelo .NET
Alebarros
-
-
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
-
-
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
- Marcado como Resposta Alessandro Barros terça-feira, 27 de novembro de 2012 18:34
-
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
Alebarros
-