Usuário com melhor resposta
DataGridView não carrega coluna

Pergunta
-
Olá pessoal, boa noite!
Tenho a seguinte instrução SQL:
SELECT Tbl_Financeiro_Temp.IDMov, Tbl_Financeiro_Temp.DTMov, Tbl_Financeiro_Temp.Nome, Tbl_Financeiro_Temp.Categoria, Tbl_Financeiro_Temp.Titulo, CD AS CDT, DB AS DBT, (SELECT Sum(DD.CD - DD.DB) FROM Tbl_Financeiro_Temp AS DD WHERE DD.IDMov <= Tbl_Financeiro_Temp.IDMov) AS SaldoT, Tbl_Financeiro_Temp.Pagamento, Tbl_Financeiro_Temp.IDFinanceiro
FROM Tbl_Financeiro_Temp
ORDER BY Tbl_Financeiro_Temp.IDMov;
A coluna SaldoT é uma SubQuery, e, já tentei de tudo mas o DataGridView não exibe essa coluna corretamente de jeito nenhum.
O DataGrid não aceita subQuerys?
Um Abraço, Nelson
Respostas
-
Nelson, realmente não vi nada no seu código que possa ser causador do problema, mas pesquisando vi que o driver de conexão com Access tem alguns problemas com subqueries no SELECT.
Então no seu caso poderia contornar o problema fazendo dois SQLs separados (o atual sem subquery e um outro que seria apenas a subquery) para então mesclar os resultados via código VB.Net.
A única coisa que vi de estranho no seu código é que no código da função RetornarDataSet você executa o ExecuteNonQuery do OleDbCommand e depois executa o Fill do OleDbDataAdapter. Assim você está executando uma consulta a mais, desnecessariamente, visto que o próprio DataAdapter realiza a execução do DbCommand.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
- Marcado como Resposta Nelson Sousa quarta-feira, 26 de outubro de 2016 18:14
Todas as Respostas
-
Nelson,
Como você executa esse SQL e alimenta o grid? Usando Commnad e DataSet?
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Olá Juliano,
Eu carrego um DataSet com essa instrução SQL e o coloco como DataSorce do Grid.
Veja o código:
ds = Busca.RetornarDataSet(sSQL) 'preenche a dgCustoFixo With dgFluxo_Caixa .Columns.Clear() .DataSource = ds.Tables(0) .Update() .Refresh() End With
Para efeito de testes, retirei todas as formatações das colunas e deixo o grid simplesmente carregar o dataset.
A coluna SaldoT, ao invés de assumir o valor carregado pela coluna correspondente na instrução SQL, assume o valor da coluna anterior(DBT) porém, nem isso ela o faz corretamente, não carrega os centavos.
Um Abraço, Nelson
-
Você já checou se no DataSet o valor da coluna SaldoT está correto? Pergunto isto para descobrir se o erro está antes ou após chegar no DataSet.
Se o DataSet já estiver com valor errado, possivelmente seu erro está no código que executa o SQL e preenche o DataSet.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Sim, chequei sim.
Uso o Access como banco de dados.
Peguei a instrução SQL, criei uma consulta no Access com a mesma, e, os dados são exibidos na consulta corretamente.
Minha conclusão é de que o DataGridView não lida muito bem com subQuerys como a da coluna SaldoT.
Esse então é o motivo de minha solicitação aqui no fórum, saber se alguém já teve esse tipo de "experiência" com o DataGrid.
Um Abraço, Nelson
-
Você verificou o valor da coluna no DataSet ou na consulta no Access?
Se no DataSet o valor está correto, o grid nem sabe que a coluna é originada de uma subQuery.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
Acabo de fazer as duas verificações.
Realmente o valor está sendo carregado errado no DataSet. Percorri todas as linhas do DataSet e o valor da coluna está errado.
No Access, o valor da coluna é exibido corretamente.
Salvei então a consulta no Access, fiz um vinculo direto com a consulta salva, acrescentei um segundo grid no formulário para efeito de teste, vinculei à consulta salva no Access...e...continuou o erro.
O erro da Coluna SaldoT, é provocado em algum lugar da "ponte" entre Access e vb.net.
Um Abraço, Nelson
-
Como está o código do seu método Busca.RetornarDataSet?If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
-
O código do RetornarDataset é:
Public Function RetornarDataSet(ByVal strQuery As String) As DataSet Dim cn As New OleDbConnection() Try 'Abrir o banco de dados e passar os 'parametros da consulta SQL, parametros 'e ordem de execução. cn = AbrirBanco() Dim cmdCommand As New OleDbCommand With cmdCommand .CommandText = strQuery.ToString .CommandType = CommandType.Text .Connection = cn .ExecuteNonQuery() End With 'Declarado um dataadapter e um dataset 'passar o comando para o dtAdapter e 'carregar o dataset com resultado da busca Dim dtAdapter As New OleDbDataAdapter Dim dsDataSet As New DataSet With dtAdapter .SelectCommand = cmdCommand .Fill(dsDataSet) End With 'Retorna o Dataset Return dsDataSet Catch ex As Exception Throw ex Finally FecharBanco(cn) End Try End Function
Um Abraço, Nelson
-
Nelson, realmente não vi nada no seu código que possa ser causador do problema, mas pesquisando vi que o driver de conexão com Access tem alguns problemas com subqueries no SELECT.
Então no seu caso poderia contornar o problema fazendo dois SQLs separados (o atual sem subquery e um outro que seria apenas a subquery) para então mesclar os resultados via código VB.Net.
A única coisa que vi de estranho no seu código é que no código da função RetornarDataSet você executa o ExecuteNonQuery do OleDbCommand e depois executa o Fill do OleDbDataAdapter. Assim você está executando uma consulta a mais, desnecessariamente, visto que o próprio DataAdapter realiza a execução do DbCommand.
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".
Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
- Marcado como Resposta Nelson Sousa quarta-feira, 26 de outubro de 2016 18:14
-
Blz,
Corrigi a consulta dupla no RetornarDataSet...obrigado!
Quanto ao DataGrid, acho que vou mudar o enfoque. Fica tudo muito "bonitinho" quando são poucos dados, mas acho que quando o sistema estiver realmente em uso, e forem mais registros, vai ser meio demorado pra carregar o DataGrid.
Vou estudar um pouco mais a situação deste formulário.
Muito grato pela ajuda!
Um Abraço, Nelson