DATAGRIDVIEW LENTO - OUTRAS LINGUAGEM RAPIDA
Bom dia amigos do VBmania,
Conforme muita pesquisa antigamente em relação ao filtro do datagridview com o MySQL fiz o mesmo filtrar somente o que o cliente precisa, porém essa semana eu estava em um cliente q faço somente a parte de hardware da empresa e lá eles tem um sistema em Windows que utiliza como banco de dados o Firebird e eu estava vendo o modo de trabalho deles, pqp eles carregam 30 mil item instantâneo e ainda vai a pesquisa dele selecionando a linha para qual ele pesquisou (EX: PESQUISOU MONICA E APARECE OS MONICA NA GRID POREM JA SELECIONADO NO MEIO DA GRID PODENDO DESCENDO E PROCURANDO OUTROS ITENS QUE COMEÇA COM NAVIO E SUBINDO ATé A LETRA B OU A), porém carregando todos os itens e ele podendo ir descendo e encontrar outros produtos, mto bom mesmo!
Será possivel fazer isso com o vb.net e o MySQL, pelo oq vi o sistemas dele trabalha parecida com a buscas efetuadas no antigos sistema em DOS (utilizando indices)
Bem amigos é isso valeu
Conforme muita pesquisa antigamente em relação ao filtro do datagridview com o MySQL fiz o mesmo filtrar somente o que o cliente precisa, porém essa semana eu estava em um cliente q faço somente a parte de hardware da empresa e lá eles tem um sistema em Windows que utiliza como banco de dados o Firebird e eu estava vendo o modo de trabalho deles, pqp eles carregam 30 mil item instantâneo e ainda vai a pesquisa dele selecionando a linha para qual ele pesquisou (EX: PESQUISOU MONICA E APARECE OS MONICA NA GRID POREM JA SELECIONADO NO MEIO DA GRID PODENDO DESCENDO E PROCURANDO OUTROS ITENS QUE COMEÇA COM NAVIO E SUBINDO ATé A LETRA B OU A), porém carregando todos os itens e ele podendo ir descendo e encontrar outros produtos, mto bom mesmo!
Será possivel fazer isso com o vb.net e o MySQL, pelo oq vi o sistemas dele trabalha parecida com a buscas efetuadas no antigos sistema em DOS (utilizando indices)
Bem amigos é isso valeu
Caro LEANTRONIC
Sim realmente é possivel e os objetos dentro dos atuais framework está realmente cada verz mais rápido se utilizar ADO.Net pode perfeitamente obter resultados expressivos quan a dinâmica de consulta e filtro para descarregar no Datagridview, basta obter o DATA PROVIDER de sua fonte de dados.
Boa Sorte
Sim realmente é possivel e os objetos dentro dos atuais framework está realmente cada verz mais rápido se utilizar ADO.Net pode perfeitamente obter resultados expressivos quan a dinâmica de consulta e filtro para descarregar no Datagridview, basta obter o DATA PROVIDER de sua fonte de dados.
Boa Sorte
Caro AJSO agradeço a resposta e tenho algumas duvidas,
Sou novato em vb.net, porém ja consigo fazer muitas coisas, na epoca que começei meu projeto tinha um amigo meu me ajudando e ele cuidou dessa parte de conexão com o MySQL e desde hoje utilizo a solução que ele implantou, hj minha classe de conexão ao mysql esta assim
Imports MySql.Data.MySqlClient
Dim CONEXAO As String = [Ô]server=[ô][Ô] & SERVER & [Ô][ô][Ô] & _
[Ô];user id=[ô][Ô] & USUARIO & [Ô][ô][Ô] & _
[Ô];password=[ô][Ô] & PASSW & [Ô][ô][Ô] & _
[Ô];database=[ô][Ô] & DATAB & [Ô][ô][Ô] & _
[Ô];Allow Zero Datetime=True[Ô]
Public OBJCON As New MySqlConnection(CONEXAO)
Public OBJCMD As New MySqlCommand
Public Sub ABRIR()
Try
OBJCON.Open()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
[ô]FECHAR BANCO
Public Sub FECHAR()
If OBJCON.State = ConnectionState.Open Then
OBJCON.Close()
End If
End Sub
Public Sub EXECUTAR_COMMANDO(ByVal SQL As String)
Dim OBJCMD As New MySqlCommand(SQL, OBJCON)
ABRIR()
OBJCMD.ExecuteNonQuery()
FECHAR()
End Sub
deduzo que não estou utilizando ADO.net pq vi que tem sempre q instalar um connector certo ao instalar a aplicação na maquina e desse modo que trabalho eu somente instalo o MySQL Administrator junto com o MySQL no Servidor e defino as permissões para quais estações vai acessar e pronto.
Nas maquinas client eu somente instalo o netframework qndo necessario
Gostaria de sua opinião sobre oq falei... se falei alguma ou estou certo porém tenho q mudar o meu modo de consulta
Sou novato em vb.net, porém ja consigo fazer muitas coisas, na epoca que começei meu projeto tinha um amigo meu me ajudando e ele cuidou dessa parte de conexão com o MySQL e desde hoje utilizo a solução que ele implantou, hj minha classe de conexão ao mysql esta assim
Imports MySql.Data.MySqlClient
Dim CONEXAO As String = [Ô]server=[ô][Ô] & SERVER & [Ô][ô][Ô] & _
[Ô];user id=[ô][Ô] & USUARIO & [Ô][ô][Ô] & _
[Ô];password=[ô][Ô] & PASSW & [Ô][ô][Ô] & _
[Ô];database=[ô][Ô] & DATAB & [Ô][ô][Ô] & _
[Ô];Allow Zero Datetime=True[Ô]
Public OBJCON As New MySqlConnection(CONEXAO)
Public OBJCMD As New MySqlCommand
Public Sub ABRIR()
Try
OBJCON.Open()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
[ô]FECHAR BANCO
Public Sub FECHAR()
If OBJCON.State = ConnectionState.Open Then
OBJCON.Close()
End If
End Sub
Public Sub EXECUTAR_COMMANDO(ByVal SQL As String)
Dim OBJCMD As New MySqlCommand(SQL, OBJCON)
ABRIR()
OBJCMD.ExecuteNonQuery()
FECHAR()
End Sub
deduzo que não estou utilizando ADO.net pq vi que tem sempre q instalar um connector certo ao instalar a aplicação na maquina e desse modo que trabalho eu somente instalo o MySQL Administrator junto com o MySQL no Servidor e defino as permissões para quais estações vai acessar e pronto.
Nas maquinas client eu somente instalo o netframework qndo necessario
Gostaria de sua opinião sobre oq falei... se falei alguma ou estou certo porém tenho q mudar o meu modo de consulta
Hoje eu preencho uma datagridview assim
Public Function Pesq_NomeProdBasico(ByVal Campo As String) As DataTable
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Objbanco.OBJCON.Open()
Dim objda As New MySqlDataAdapter(Sql, Objbanco.OBJCON)
objdt.Clear()
objds.Tables.Clear()
objda.Fill(objds, [Ô]Produtos[Ô])
objdt = objds.Tables([Ô]Produtos[Ô])
Objbanco.OBJCON.Close()
Return objdt
End Function
e na datagrid view eu só coloco o
dgditens.datasource = objpesqprodutos.Pesq_NomeProdBasico(txtpesq.text)
porém em algum momento preciso que ele carregue todos os itens da tela ai eu tiro o where da instrução e vem os 30 mil itens porém demora uns 3 a 5 segundo dependendo da maquina do cliente, na minha demora 2 segundo mas tem cliente q tem maquina mais antiga q é complicado e o foda é ver o sistemas antigos dele mais rapido q o meu, ai fica foda falar para o cliente trocar a maquina :/
Public Function Pesq_NomeProdBasico(ByVal Campo As String) As DataTable
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Objbanco.OBJCON.Open()
Dim objda As New MySqlDataAdapter(Sql, Objbanco.OBJCON)
objdt.Clear()
objds.Tables.Clear()
objda.Fill(objds, [Ô]Produtos[Ô])
objdt = objds.Tables([Ô]Produtos[Ô])
Objbanco.OBJCON.Close()
Return objdt
End Function
e na datagrid view eu só coloco o
dgditens.datasource = objpesqprodutos.Pesq_NomeProdBasico(txtpesq.text)
porém em algum momento preciso que ele carregue todos os itens da tela ai eu tiro o where da instrução e vem os 30 mil itens porém demora uns 3 a 5 segundo dependendo da maquina do cliente, na minha demora 2 segundo mas tem cliente q tem maquina mais antiga q é complicado e o foda é ver o sistemas antigos dele mais rapido q o meu, ai fica foda falar para o cliente trocar a maquina :/
1 - Se usar os objetos CORRETOS para leitura de dados, o DataReader, a consulta tem uma melhora significativa de desempenho. O que você está usando(dataTables) é com certeza bem mais lento, pois é um objeto projetado não só para leitura, mas outras operações também.
2 - Usando modo procedural(como você está fazendo), também contribui para um desempenho fraco.
Concluindo, você precisa aprimorar o modo como programa, não só tecnicamente, mas também conceitualmente.
2 - Usando modo procedural(como você está fazendo), também contribui para um desempenho fraco.
Concluindo, você precisa aprimorar o modo como programa, não só tecnicamente, mas também conceitualmente.
No .Net sei que você pode usar o VirtualMode do DataGridView para melhorar o desempenho, com ele você pode carregar menos registros e o grid mostra a barra de rolagem como se tivesse mais registros e então você usa alguns eventos para saber quando tem que carregar os registros, você poderia por exemplo carregar cerca de 50 registros e quando o usuário rolasse o grid ele iria pedindo mais registros para você.
Citação:No .Net sei que você pode usar o VirtualMode do DataGridView para melhorar o desempenho, com ele você pode carregar menos registros e o grid mostra a barra de rolagem como se tivesse mais registros e então você usa alguns eventos para saber quando tem que carregar os registros, você poderia por exemplo carregar cerca de 50 registros e quando o usuário rolasse o grid ele iria pedindo mais registros para você.
Já está pensando da maneira errada. Isso não é melhorar desempenho, é mascarar um problema.
Amigos, primeiro quero agradecer o interesse de ajudar...
KERPLUNK então no caso seria melhor em vez de usar essa rotina :
[txt-color=#0000f0]
Public Function Pesq_NomeProdBasico(ByVal Campo As String) As DataTable
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Objbanco.OBJCON.Open()
Dim objda As New MySqlDataAdapter(Sql, Objbanco.OBJCON)
objdt.Clear()
objds.Tables.Clear()
objda.Fill(objds, [Ô]Produtos[Ô])
objdt = objds.Tables([Ô]Produtos[Ô])
Objbanco.OBJCON.Close()
Return objdt
End Function
[/txt-color]
usar essa?
[txt-color=#0000f0]
Public Function Pesq_NomeProdBasico(ByVal Campo As String)
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Dim objda As MySqlDataReader
Dim OBJCMD As New MySqlCommand(SQL, ObjBanco.OBJCON)
ObjBanco.OBJCON.Open()
objda = OBJCMD.ExecuteReader
objdt.Load(objda)
return objda
[/txt-color]
end function
KERPLUNK então no caso seria melhor em vez de usar essa rotina :
[txt-color=#0000f0]
Public Function Pesq_NomeProdBasico(ByVal Campo As String) As DataTable
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Objbanco.OBJCON.Open()
Dim objda As New MySqlDataAdapter(Sql, Objbanco.OBJCON)
objdt.Clear()
objds.Tables.Clear()
objda.Fill(objds, [Ô]Produtos[Ô])
objdt = objds.Tables([Ô]Produtos[Ô])
Objbanco.OBJCON.Close()
Return objdt
End Function
[/txt-color]
usar essa?
[txt-color=#0000f0]
Public Function Pesq_NomeProdBasico(ByVal Campo As String)
Sql = ([Ô]Select Codigo AS [ô]Cod[ô], Descricao as [ô]Produto[ô], Aplicacao, Tipo,EstoqAtual as [ô]Estoque[ô],ValUnitVend as [ô]Valor[ô] from Produtos where Descricao like [ô][Ô] & Campo & [Ô]%[ô] order by Descricao asc[Ô])
Dim objda As MySqlDataReader
Dim OBJCMD As New MySqlCommand(SQL, ObjBanco.OBJCON)
ObjBanco.OBJCON.Open()
objda = OBJCMD.ExecuteReader
objdt.Load(objda)
return objda
[/txt-color]
end function
OBS: em uma eu uso o [txt-color=#e80000]MySqlDataAdapter [/txt-color]e na outra o [txt-color=#e80000]MySqlDataReader[/txt-color]
Cara hj eu trabalho colocando tudo dentro de uma classe e só chamo a função pra executar, ja deixo o comando sql tudo dentro da Classe e quando quero executar eu só chamo a função que está dentro do meu objeto. ex:
Qndo chamo aquela função que mostrei acima sempre no formulario principal eu declaro a classe Dim ObjProdutos as new ClsProdutos
e chamo ela assim
dtprodutos.datasource = objprodutos.Pesq_NomeProdBasico(txtpesq.text)
é esse caso que vc fala que tenho q aprimorar o meu modo de programar?
Citação::.
2 - Usando modo procedural(como você está fazendo), também contribui para um desempenho fraco.
Concluindo, você precisa aprimorar o modo como programa, não só tecnicamente, mas também conceitualmente.
Cara hj eu trabalho colocando tudo dentro de uma classe e só chamo a função pra executar, ja deixo o comando sql tudo dentro da Classe e quando quero executar eu só chamo a função que está dentro do meu objeto. ex:
Qndo chamo aquela função que mostrei acima sempre no formulario principal eu declaro a classe Dim ObjProdutos as new ClsProdutos
e chamo ela assim
dtprodutos.datasource = objprodutos.Pesq_NomeProdBasico(txtpesq.text)
é esse caso que vc fala que tenho q aprimorar o meu modo de programar?
Tópico encerrado , respostas não são mais permitidas