POPULANDO UM MSFLEXGRID

MATHEUSNERIS 23/10/2012 16:43:54
#412632
Pessoal, estou com problemas ao popular o msflexgrid. Como podem ver no anexo ele só chama uma coluna, quero preencher as 3. Como proceder? Segue abaixo o meu código

Formatar a grid
Private Sub Formata_Grid()
With flgDados
.Rows = 500
.Cols = 3
.Col = 1
.Row = 0

.Col = 0: .CellAlignment = 3: .Text = [Ô]Código[Ô]
.Col = 1: .CellAlignment = 3: .Text = [Ô]Nome da Entidade[Ô]
.Col = 2: .CellAlignment = 3: .Text = [Ô]Numero do Banco[Ô]

.ColWidth(0) = 1450
.ColWidth(1) = 3486
.ColWidth(2) = 1450

.Row = 1
.Col = 0

End With
End Sub
Código dentro do botão pesquisar
Private Sub Pesquisar_Click()

[ô]define os objetos para o acesso aos dados no Microsoft Access
Dim db As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim lTimer As Long

Screen.MousePointer = vbHourglass

flgDados.Refresh
lTimer = Timer

flgDados.Visible = True

[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Driver={Mysql ODBC 5.2w Driver}; Server=localhost;port=3306; database=gnbat; user=root; password=1234; option=3;[Ô]
RS.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly
[ô]RS.MoveFirst

[ô]define o numero de linhas e colunas e configura o grid
Call Formata_Grid

[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
flgDados.Clip = RS.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
flgDados.Row = 1
flgDados.Visible = True

[ô]libera os objetos
Set RS = Nothing
Set db = Nothing

Screen.MousePointer = vbDefault

MsgBox [Ô]Tempo de execução : [Ô] & Timer - lTimer & [Ô] segs.[Ô] & vbCr & flgDados.Rows - 1 & [Ô] registros[Ô]

End Sub


Desde já muito grato!!
JLAUROSOUZA 23/10/2012 17:16:00
#412636
Exibe algum erro?

eu utilizo desta forma, e nunca tive problema!!!

Dim TB As ADODB.Recordset
Set TB = New ADODB.Recordset
TB.Source = [Ô]Select ID as 'Código', NomeCompleto as 'Nome da Entidade', Banco as 'Numero do Banco'[Ô]
TB.Source = TB.Source + [Ô] from tabela_entidades[Ô]
TB.Source = TB.Source + [Ô] order by ID [Ô]
TB.Open , cn, adOpenDynamic, adLockOptimistic
Do Until Not TB.EOF
Exit Sub
TB.NextRecordset
Loop
MSR.DataSourceName = [Ô]Driver={Mysql ODBC 5.2w Driver}; Server=localhost;port=3306; database=gnbat;[Ô]
MSR.UserName = [Ô]root[Ô]
MSR.Password = [Ô]1234[Ô]
MSR.SQL = TB.Source
MSR.Refresh

MSF.ColWidth(0) = 300
MSF.ColWidth(1) = 600 [ô][ô][ô] Código
MSF.ColWidth(2) = 4000 [ô][ô][ô] Nome da Entidade
MSF.ColWidth(3) = 3000 [ô][ô][ô] Numero do Banco

Espero ter ajudado!!!
MARCELO.TREZE 23/10/2012 17:16:52
#412637
Dicas simples

Formatar a grid
Private Sub Formata_Grid()
With flgDados
.Rows = 1 [ô] coloque apenas uma linha não tem problema
.Cols = 3
.FormatString =[Ô]Código|Nome da Entidade|Numero do Banco[Ô]

.ColWidth(0) = 1450
.ColWidth(1) = 3486
.ColWidth(2) = 1450

End With
End Sub



Private Sub Pesquisar_Click()

[ô]define os objetos para o acesso aos dados no Microsoft Access
Dim db As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim lTimer As Long

Screen.MousePointer = vbHourglass

flgDados.Refresh
lTimer = Timer

flgDados.Visible = True

[ô]define o numero de linhas e colunas e configura o grid
Call Formata_Grid

[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Driver={Mysql ODBC 5.2w Driver}; Server=localhost;port=3306; database=gnbat; user=root; password=1234; option=3;[Ô]
RS.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly
Do While Not RS.EOF
With flgDados
.Rows = .Rows + 1
.Textmatrix(.Rows -1, 0) = RS!nome co campo1
Textmatrix(.Rows -1, 1) = RS!nome co campo2
Textmatrix(.Rows -1, 2) = RS!nome co campo3
RS.MoveNext
Loop
End With
[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
flgDados.Clip = RS.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
flgDados.Row = 1
flgDados.Visible = True

[ô]libera os objetos
Set RS = Nothing
Set db = Nothing

Screen.MousePointer = vbDefault

MsgBox [Ô]Tempo de execução : [Ô] & Timer - lTimer & [Ô] segs.[Ô] & vbCr & flgDados.Rows - 1 & [Ô] registros[Ô]

End Sub


onde está nome do campo X, comloque o nome correto dos campos e pronto


MATHEUSNERIS 23/10/2012 17:23:35
#412639
JLAUROSOUZA não ele não exibe nenhum erro, ele popula a minha grid mais ele só popula a coluna código.

MARCELO-TREZE Ele me mostrou o seguinte erro [Ô]Compile error: Loop without Do[Ô]
Sabe o que significa? Como proceder?
Desde já agradeço a ajuda de todos.
MARCELO.TREZE 23/10/2012 19:54:52
#412651
Mude esta linha de:

 RS.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly


para:

Set RS = db.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly


veja se funciona não esqueça dos campos, poste como ficou seu código se der erro novamente
MATHEUSNERIS 23/10/2012 21:19:08
#412656
Prezado,
MARCELO-TREZE

A linha [Ô] Set RS = db.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly [Ô] nem passa na compilção!
Ele dá o seguinte erro [Ô] Compile error: Sintaxe error. [Ô]
Estou sem idéias.

Desde já grato.
ADILSOO 23/10/2012 21:47:30
#412658
Amigo, um jeito simples de adicionar os itens ao Grid é assim...

 Do While Not rs.EOF = False
Grid.AddItem rs!Campo1 & VbTab & rs!Campo2 & VbTab & rs!Campo3
rs.MoveNext
Loop


e assim vai, o VBTAB é pra mudar de coluna, você pode colocar quantos campos quiser, fica a seu critério, qualquer duvida posta aí.
MARCELO.TREZE 23/10/2012 22:07:30
#412661
tente novamente

Set RS = db.Open([Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly)


esqueci dos parenteses

MATHEUSNERIS 24/10/2012 10:14:53
#412687
ADILSOO estou usando o método Clip e o método GetString juntos para conseguir buscar com mais rapidez da minha base de dados. Já tentei métodos mais simples, eles rodaram porém com muita lentidão.



MARCELO-TREZE obrigado por toda a atenção em cima da minha dúvida, ainda esta dando erro quando eu executo o botão Pesquisar:
[Ô]Compile error: Expected Function or variable.[Ô]
Set RS = db.Open([Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly)

em meu banco de dados eu tenho 6 colunas, aqui estou pedindo para ele me mostrar 3. Será esse o problema, ou não tem nada a ver?

Desde já grato pela ajuda de todos
ROBIU 24/10/2012 11:21:38
#412696
Passo 1: Coloque os nomes dos campos que você quer exibir (campo1, campo2, campo3) no lugar do (*) e verifique se funciona.

Passo 2: Substitua a FlexGrid (MSFLXGRD.OCX) pela Hierarchical FlexGrid (MSHFLXGD.OCX) pois esta tem as mesmas funções e propriedades da FlexGrid e pode ser vinculada direto ao seu RS. Para isso, remova a flex e adicione a hflex com o mesmo nome (flgDados) para não mudar o código:
Veja como inserir o controle no seu form aqui

E com a conexão aberta é só fazer isso para carregar todos os dados da consulta para para a grid
 RS.Open [Ô]SELECT * FROM tabela_entidades[Ô], db, adOpenStatic, adLockReadOnly
Set flgDados.DataSource = Rs [ô]Só no MsHFlexgrid que é um controle ADO enquanto a MsFlexGrid é um controle DAO
Formata_Grid()


Veja esse tutorial: VB e MySQL
MARCELO.TREZE 24/10/2012 11:56:08
#412701
vamos lá colega vou alterar toda a sub

Private Sub Pesquisar_Click()

[ô]define os objetos para o acesso aos dados no Microsoft Access
Dim db As New ADODB.Connection
Dim RS As Recordset
Dim lTimer As Long

Screen.MousePointer = vbHourglass

flgDados.Refresh
lTimer = Timer

flgDados.Redraw = False

[ô]define o numero de linhas e colunas e configura o grid
Call Formata_Grid

[ô]abre o banco de dados e define o recordset a ser usado
db.Open [Ô]Driver={Mysql ODBC 5.2w Driver}; Server=localhost;port=3306; database=gnbat; user=root; password=1234; option=3;[Ô]

Set RS = db.Exceute([Ô]SELECT * FROM tabela_entidades[Ô])
Do While Not RS.EOF
With flgDados
.Rows = .Rows + 1
.Textmatrix(.Rows -1, 0) = RS!nome do campo1
Textmatrix(.Rows -1, 1) = RS!nome do campo2
Textmatrix(.Rows -1, 2) = RS!nome do campo3
RS.MoveNext
End With
Loop
[ô]estamos usando a propriedade Clip e o método GetString para selecionar uma região do grid
flgDados.Clip = RS.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
flgDados.Row = 1
flgDados.Redraw = True

[ô]libera os objetos
Set RS = Nothing
Set db = Nothing

Screen.MousePointer = vbDefault

MsgBox [Ô]Tempo de execução : [Ô] & Timer - lTimer & [Ô] segs.[Ô] & vbCr & flgDados.Rows - 1 & [Ô] registros[Ô]

End Sub
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas