CONSULTA MAIS RAPIDA.
Wilian,
Como faço para "paginar"?
Imagine uma tabela com 100 registros, quero mostar de 10 em 10:
SELECT TOP 10 meus campos
FROM minha tabela
WHERE minhas condições
Mas e agora para os próximo 10 (que seria do 11 até o 20) como faço???
Obrigado,
Christiano
Como faço para "paginar"?
Imagine uma tabela com 100 registros, quero mostar de 10 em 10:
SELECT TOP 10 meus campos
FROM minha tabela
WHERE minhas condições
Mas e agora para os próximo 10 (que seria do 11 até o 20) como faço???
Obrigado,
Christiano
Ai estah a string de conexão e o laço For...Next usando o Super Grid 2 do vbAccelerator:
Public dbGuia As New ADODB.Connection
Public dbCmd As New ADODB.Command
Public tbFones As New ADODB.Recordset, tbAnun As New ADODB.Recordset
dbCatalogo.Open "Driver=MySQL ODBC 3.51 Driver;Database=catalogo;server=localhost;port=3306;uid=root;pwd=masterkey"
With dbCmd
Set .ActiveConnection = dbGuia
.CommandType = adCmdText
.CommandText = "select nome,telefone,endereco from tabela"
End With
With tbFones
.LockType = adLockReadOnly
.CursorType = adOpenForwardOnly
.CursorLocation = adUseClient
.Open dbCmd
End With
End Function
With grdFones
For Its = 1 To tbFones.RecordCount
tbAnun.MoveFirst
tbAnun.Find "Telefone = '" & tbFones!Telefone & "'"
.CellDetails Its, 1, tbFones!Telefone, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 2, tbFones!Nome, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 3, tbFones!Cidade & "-" & tbFones!UF, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0))
.CellDetails Its, 4, tbFones!Endereco
.CellDetails Its, 5, Format(tbFones!CEP, "00000-000") & " - " & _
tbFones!Endereco & " - " & tbFones!Bairro, DT_WORDBREAK, , , RGB(0, 0, 190)
.RowHeight(Its) = .EvaluateTextHeight(Its, 5) + .DefaultRowHeight + 4
tbFones.MoveNext
DoEvents
Next
End With
tbFones.Close
Public dbGuia As New ADODB.Connection
Public dbCmd As New ADODB.Command
Public tbFones As New ADODB.Recordset, tbAnun As New ADODB.Recordset
dbCatalogo.Open "Driver=MySQL ODBC 3.51 Driver;Database=catalogo;server=localhost;port=3306;uid=root;pwd=masterkey"
With dbCmd
Set .ActiveConnection = dbGuia
.CommandType = adCmdText
.CommandText = "select nome,telefone,endereco from tabela"
End With
With tbFones
.LockType = adLockReadOnly
.CursorType = adOpenForwardOnly
.CursorLocation = adUseClient
.Open dbCmd
End With
End Function
With grdFones
For Its = 1 To tbFones.RecordCount
tbAnun.MoveFirst
tbAnun.Find "Telefone = '" & tbFones!Telefone & "'"
.CellDetails Its, 1, tbFones!Telefone, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 2, tbFones!Nome, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 3, tbFones!Cidade & "-" & tbFones!UF, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0))
.CellDetails Its, 4, tbFones!Endereco
.CellDetails Its, 5, Format(tbFones!CEP, "00000-000") & " - " & _
tbFones!Endereco & " - " & tbFones!Bairro, DT_WORDBREAK, , , RGB(0, 0, 190)
.RowHeight(Its) = .EvaluateTextHeight(Its, 5) + .DefaultRowHeight + 4
tbFones.MoveNext
DoEvents
Next
End With
tbFones.Close
VBCODE
uma solução rapida é fazer a consulta de todos os registros
depois com o uso de for next, preencher de 1 a 10, na pagina dois de 11 a 20 e assim por diante, pois como comentei a consulta é rápida, o problema e preencher o grid
TRUHILLO
não esta ruim mas eu faria assim(sem usar o NEW, prefira setar ele que é mais rápido)
Public dbGuia As ADODB.Connection
Set dbGuia = New ADODB.Connection
Public tbFones As ADODB.Recordset
Set tbFones = New ADODB.Recordset
dbGuia.Open "Driver=MySQL ODBC 3.51 Driver;Database=catalogo;server=localhost;port=3306;uid=root;pwd=masterkey"
With tbFones
.activeconnection = dbGuia
.LockType = adLockReadOnly
.CursorType = adOpenForwardOnly
.CursorLocation = adUseClient
.Open "Select Nome, Telefone, Endereco from Tabela order by nome"
End With
End Function
With grdFones
For Its = 1 To tbFones.RecordCount
tbAnun.MoveFirst
tbAnun.Find "Telefone = '" & tbFones!Telefone & "'"
.CellDetails Its, 1, tbFones!Telefone, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 2, tbFones!Nome, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 3, tbFones!Cidade & "-" & tbFones!UF, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0))
.CellDetails Its, 4, tbFones!Endereco
.CellDetails Its, 5, Format(tbFones!CEP, "00000-000") & " - " & _
tbFones!Endereco & " - " & tbFones!Bairro, DT_WORDBREAK, , , RGB(0, 0, 190)
.RowHeight(Its) = .EvaluateTextHeight(Its, 5) + .DefaultRowHeight + 4
tbFones.MoveNext
DoEvents
Next
End With
tbFones.Close
quanto ao preenchimento do seu grid ja não sei pois nunca o usei, então fica dificil dizer se esta correto ou não,
agora no inicio do seu FORr tem um movefirst, mas com isso não preenche só com a primeira linha do recordset??? no meu entender o movefirst teria que estar antes do FOR.
outra coisa, porque o FIND??? no meu entender tambem não precisa pois você deu um movenext no fim do FOR o que estaria correto.Para maiores esclarecimentos veja:
http://www.vbmania.com.br/vbmdetail.php?varID=2971
uma solução rapida é fazer a consulta de todos os registros
depois com o uso de for next, preencher de 1 a 10, na pagina dois de 11 a 20 e assim por diante, pois como comentei a consulta é rápida, o problema e preencher o grid
TRUHILLO
não esta ruim mas eu faria assim(sem usar o NEW, prefira setar ele que é mais rápido)
Public dbGuia As ADODB.Connection
Set dbGuia = New ADODB.Connection
Public tbFones As ADODB.Recordset
Set tbFones = New ADODB.Recordset
dbGuia.Open "Driver=MySQL ODBC 3.51 Driver;Database=catalogo;server=localhost;port=3306;uid=root;pwd=masterkey"
With tbFones
.activeconnection = dbGuia
.LockType = adLockReadOnly
.CursorType = adOpenForwardOnly
.CursorLocation = adUseClient
.Open "Select Nome, Telefone, Endereco from Tabela order by nome"
End With
End Function
With grdFones
For Its = 1 To tbFones.RecordCount
tbAnun.MoveFirst
tbAnun.Find "Telefone = '" & tbFones!Telefone & "'"
.CellDetails Its, 1, tbFones!Telefone, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 2, tbFones!Nome, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0)), , fBold
.CellDetails Its, 3, tbFones!Cidade & "-" & tbFones!UF, , , IIf(tbAnun.EOF, -1, RGB(255, 204, 0))
.CellDetails Its, 4, tbFones!Endereco
.CellDetails Its, 5, Format(tbFones!CEP, "00000-000") & " - " & _
tbFones!Endereco & " - " & tbFones!Bairro, DT_WORDBREAK, , , RGB(0, 0, 190)
.RowHeight(Its) = .EvaluateTextHeight(Its, 5) + .DefaultRowHeight + 4
tbFones.MoveNext
DoEvents
Next
End With
tbFones.Close
quanto ao preenchimento do seu grid ja não sei pois nunca o usei, então fica dificil dizer se esta correto ou não,
agora no inicio do seu FORr tem um movefirst, mas com isso não preenche só com a primeira linha do recordset??? no meu entender o movefirst teria que estar antes do FOR.
outra coisa, porque o FIND??? no meu entender tambem não precisa pois você deu um movenext no fim do FOR o que estaria correto.Para maiores esclarecimentos veja:
http://www.vbmania.com.br/vbmdetail.php?varID=2971
Esse tbAnun eh outra tabela Wilian.
Toda vez que o For mudar de registro, vai procurar na tabela Anunciantes se existe um número de telefone igual ao que está na tbFones.
Mas isso eh outro caso. Mesmo sem essa consulta fica bem lento.
Vou tentar como vc me falou e volto a postar aqui o resultado.
Obrigado a todos.
Toda vez que o For mudar de registro, vai procurar na tabela Anunciantes se existe um número de telefone igual ao que está na tbFones.
Mas isso eh outro caso. Mesmo sem essa consulta fica bem lento.
Vou tentar como vc me falou e volto a postar aqui o resultado.
Obrigado a todos.
Wilian,
Se nós estamos buscando uma melhor performance, não acho certo "fazer uma consulta de todos os registros"!
No meu caso eu não carrego a grid com For, mas sim:
Set mshflexgrid.DataSource = Rs
Então, continua a dúvida:
SELECT TOP 10 meus campos
FROM minha tabela
WHERE minhas condições
Rs.open ... ... ....
Set mshflexgrid.DataSource = Rs
Mas e agora para os próximo 10 (que seria do 11 até o 20) como faço???
Obrigado,
Christiano
Se nós estamos buscando uma melhor performance, não acho certo "fazer uma consulta de todos os registros"!
No meu caso eu não carrego a grid com For, mas sim:
Set mshflexgrid.DataSource = Rs
Então, continua a dúvida:
SELECT TOP 10 meus campos
FROM minha tabela
WHERE minhas condições
Rs.open ... ... ....
Set mshflexgrid.DataSource = Rs
Mas e agora para os próximo 10 (que seria do 11 até o 20) como faço???
Obrigado,
Christiano
Alguem mais tem outra idéia de como popular ListView rapidamente?
como o assunto é extenso e não achei nada no site,
veja
http://www.macoratti.net/ado_nav.htm
http://www.macoratti.net/dat_page.htm
se alguem achar algo no site é só avisar
veja
http://www.macoratti.net/ado_nav.htm
http://www.macoratti.net/dat_page.htm
se alguem achar algo no site é só avisar
Obrigado, William.
Acho q isso vai resolver o problema.
Acho q isso vai resolver o problema.
Tópico encerrado , respostas não são mais permitidas