Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

11closed

[Resolvido] usando MSFlexGrid

Recommended Posts

ola pessoal me ajudem a entender o que ta faltando no meu codgo

 

Form1

Dim strBusca As String

Dim I As Integer

 

Private Sub CmdPesc_Click()

If TxtPesc.Text = "" Then

' Call AbrirRecordSetAccess(TxtPesc.Text)

MSFlexGrid1.Refresh

Call PreencherMSFlexGrid

ElseIf Cmb.ListIndex = "0" And TxtPesc.Text <> "" Then

MSFlexGrid1.Refresh

Call PreencherMSFlexGrid

ElseIf Cmb.ListIndex = "1" And TxtPesc.Text <> "" Then

MSFlexGrid1.Refresh

Call PreencherMSFlexGrid

End If

 

End Sub

 

Private Sub Form_Load()

MSFlexGrid1.Clear

 

' abre o banco de dados

Call AbrirBDAccess

Call AbrirRecordSetAccess("SELECT * FROM IPs Order By id")

'Call PreencherMSFlexGrid

 

 

End Sub

 

 

Sub PreencherMSFlexGrid()

MSFlexGrid1.Cols = 8

MSFlexGrid1.ColWidth(0) = 500

MSFlexGrid1.TextMatrix(0, 0) = "Sr.No"

I = 1

For I = 1 To rstObj.Fields.Count - 1

 

MSFlexGrid1.ColAlignment(I) = vbCenter

MSFlexGrid1.ColWidth(I) = 500

MSFlexGrid1.TextMatrix(0, I) = rstObj.Fields(I).Name

 

Next

MSFlexGrid1.Rows = rstObj.recordcount + 1

I = 0

Do While Not rstObj.EOF

I = I + 1

MSFlexGrid1.TextMatrix(I, 0) = I

MSFlexGrid1.TextMatrix(I, 1) = rstObj(0) 'username

MSFlexGrid1.TextMatrix(I, 2) = rstObj(1) 'Department

MSFlexGrid1.TextMatrix(I, 3) = rstObj(2) 'ContactPerson

MSFlexGrid1.TextMatrix(I, 4) = rstObj(3)

MSFlexGrid1.TextMatrix(I, 5) = rstObj(4) //aqui da o erro (invalid use of null)

MSFlexGrid1.TextMatrix(I, 6) = rstObj(5)

MSFlexGrid1.TextMatrix(I, 7) = rstObj(6)

MSFlexGrid1.TextMatrix(I, 8) = rstObj(7)

 

 

rstObj.MoveNext

Loop

End Sub

Module1

 

Option Explicit

'função API para dar uma pausa na aplicação

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'constantes usadas para nomear os controles

Public Const Cap1 = "Controles Grids no modo Não Vinculado com Busca"

Public Const Cap2 = "Digite Texto para Busca >>"

Public Const Cap3 = "Procurar"

Public Const Cap4 = "Sair"

Public Const Cap41 = "Parar"

Public Const Cap5 = "Empregados"

Public Const Cap6 = "Controle MSFlex Grid"

Public Const Cap7 = "Controle Data Grid "

Public Const Cap8 = "Busca por Nome"

Public Const Cap9 = "Busca por Setor"

Public Const Cap10 = "Busca por Contato"

 

'Variavel para o banco de dados

Public cnxnObj As Object

Public rstObj As Object

 

Public Sub AbrirBDAccess()

Dim ConectaAccess As String

Dim strArquivo As String

Dim strLocal As String

 

strArquivo = "teste.mdb"

strLocal = "C:\Documents and Settings\Renato S.A\Meus documentos\"

Set cnxnObj = CreateObject("ADODB.Connection")

ConectaAccess = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strLocal & strArquivo

cnxnObj.Open ConectaAccess

End Sub

 

Public Sub AbrirRecordSetAccess(strSQL As String)

Set rstObj = CreateObject("ADODB.Recordset")

rstObj.Open strSQL, cnxnObj, 1, 1, 1

End Sub

da um erro onde na linha onde esta vermelho não sei o que é (sou iniciante em vb)

me ajudem !

valeu t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

MSFlexGrid1.TextMatrix(I, 5) = rstObj(4) //aqui da o erro (invalid use of null)

 

erro quando retorna um campo nulo, ou seja, um campo sem valores inseridos nele, para tratar este erro usamos o IIF, assim:

 

 

MSFlexGrid1.TextMatrix(I, 5) = iif(isnull(rstObj(4)),"",rstObj(4))

 

Ou seja:

 

Se no retorno do campo rstObj(4) não tiver nada, retorne branco, se houver, retorne o que houver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola eu estou reabrindo este topico!

pois estou com mais um problema

 

module

 

Public cnxnObj As Object
Public rstObj As Object

Public Sub AbrirBDAccess()
Dim ConectaAccess As String
Dim strArquivo As String
Dim strLocal As String

strArquivo = "teste.mdb"
strLocal = "caminho"	  //[b]aqui eu coloco meu caminho onde se encontra meu banco de dados teste.mdb[/b]
Set cnxnObj = CreateObject("ADODB.Connection")
ConectaAccess = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strLocal & strArquivo
cnxnObj.Open ConectaAccess
End Sub

Public Sub AbrirRecordSetAccess(strSQL As String)
   Set rstObj = CreateObject("ADODB.Recordset")
  [i][b] rstObj.Open strSQL, cnxnObj, 1, 1, 1[/b][/i]  [u] ''''''''''''''''o erro esta nesta linha ''''''''''''''''''''[/u]
End Sub

aqui é o meu form

 

Option Explicit

Dim I As Integer
Dim strTextoBusca As String
Dim strBusca As String

Private Sub CmdLimpar_Click()
MSFlexGrid1.Clear
TxtPesc.Text = ""
Cmb.ListIndex = -1
End Sub

Private Sub CmdPesc_Click()
 strTextoBusca = Trim(TxtPesc.Text)
  
If TxtPesc.Text = "" Then
'   Call AbrirRecordSetAccess(TxtPesc)
	  MSFlexGrid1.Refresh
	  Call AbrirBDAccess
	  Call AbrirRecordSetAccess("SELECT * FROM IPs Order By id")
	  Call PreencherMSFlexGrid
ElseIf Cmb.ListIndex = -1 And TxtPesc.Text <> "" Then
	  MSFlexGrid1.Refresh
	  Call AbrirBDAccess
	  Call AbrirRecordSetAccess("SELECT * FROM IPs Order By id")
	  Call PreencherMSFlexGrid
ElseIf Cmb.ListIndex = 0 And TxtPesc.Text <> "" Then
	  MSFlexGrid1.Refresh
	  Call AbrirBDAccess
	  Call AbrirRecordSetAccess("SELECT * FROM IPs WHERE " & TxtPesc.Text & " = IP")
	  Call PreencherMSFlexGrid
ElseIf Cmb.ListIndex = 1 And TxtPesc.Text <> "" Then
	  'MSFlexGrid1.Refresh
	  Call AbrirBDAccess
	  Call AbrirRecordSetAccess("SELECT * FROM IPs WHERE " & strTextoBusca & " = nomepc")
	  'Call AbrirRecordSetAccess(strBusca)
	  MSFlexGrid1.Refresh
	 ' Call PreencherMSFlexGrid
ElseIf Cmb.ListIndex = 2 And TxtPesc.Text <> "" Then
	  MSFlexGrid1.Refresh
	  Call AbrirBDAccess
	  Call AbrirRecordSetAccess("SELECT * FROM IPs WHERE " & TxtPesc.Text & " = usuario1 or usuario2 or usuario3 or usuario4 or usuario5")
	  Call PreencherMSFlexGrid
End If

End Sub

Private Sub Form_Load()
MSFlexGrid1.Clear
End Sub


Sub PreencherMSFlexGrid()
 MSFlexGrid1.Cols = 8
 'MSFlexGrid1.ColWidth(0) = 1500
 MSFlexGrid1.TextMatrix(0, 0) = "Codigo"
 MSFlexGrid1.TextMatrix(0, 1) = "IPs"
 MSFlexGrid1.TextMatrix(0, 2) = "Nome do Computador"
 MSFlexGrid1.TextMatrix(0, 3) = "Nome do Usuário 1"
 MSFlexGrid1.TextMatrix(0, 4) = "Nome do Usuário 2"
 MSFlexGrid1.TextMatrix(0, 5) = "Nome do Usuário 3"
 MSFlexGrid1.TextMatrix(0, 6) = "Nome do Usuário 4"
 MSFlexGrid1.TextMatrix(0, 7) = "Nome do Usuário 5"
 'I = 0
 For I = 1 To rstObj.Fields.Count - 1
   'MSFlexGrid1.ColAlignment(I) = vbCenter
   MSFlexGrid1.ColWidth(I) = 1600
   'MSFlexGrid1.TextMatrix(0, I) = rstObj.Fields(I).Name
 Next
 MSFlexGrid1.Rows = rstObj.RecordCount + 1
 I = 0
 Do While Not rstObj.EOF
	I = I + 1
	MSFlexGrid1.TextMatrix(I, 0) = IIf(IsNull(rstObj(0)), "", rstObj(0))
	MSFlexGrid1.TextMatrix(I, 1) = IIf(IsNull(rstObj(1)), "", rstObj(1))
	MSFlexGrid1.TextMatrix(I, 2) = IIf(IsNull(rstObj(2)), "", rstObj(2))
	MSFlexGrid1.TextMatrix(I, 3) = IIf(IsNull(rstObj(3)), "", rstObj(3))
	MSFlexGrid1.TextMatrix(I, 4) = IIf(IsNull(rstObj(4)), "", rstObj(4))
	MSFlexGrid1.TextMatrix(I, 5) = IIf(IsNull(rstObj(5)), "", rstObj(5))
	MSFlexGrid1.TextMatrix(I, 6) = IIf(IsNull(rstObj(6)), "", rstObj(6))
	MSFlexGrid1.TextMatrix(I, 7) = IIf(IsNull(rstObj(7)), "", rstObj(7))
   
   rstObj.MoveNext
 Loop
End Sub

o erro da na hora que eu vou pesquisar o nome do pc cadastrado no banco

 

é o seguinte erro

Run- time erro '-2147217904(80040e10)

nenhum valor foi fornecido para um ou mais parâmetros necessário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola 11closed

 

O erro está na sintax sql...assim como nessa sintax

 

AbrirRecordSetAccess("SELECT * FROM IPs WHERE " & strTextoBusca & " = nomepc")

onde o certo seria

AbrirRecordSetAccess("select * from IPs where nomepc = '"+ strTextoBusca +'")

Levando em consideração que IPs é uma tabela e nomepc um campo desta tabela.

 

É necessário verificar os outos selects pois estão estranhos também, siga sempre essa sequência

AbrirRecordSetAccess("select <campos> from <tabela> where <campo> = <param>")

se <param> for uma variavel fica

AbrirRecordSetAccess("select <campos> from <tabela> where <campo> = "+<param>+" ")

Lembrar sempre das aspas simples ( ' ) quando for pesquisar texto, e ( # ) se for pesquisar data

AbrirRecordSetAccess("select <campos> from <tabela> where <campo> = ' "+<param>+" ' ")
onde no caso <campo> é do tipo texto.

 

Também nunca esquecer de converter as variaveis para String quando for jogar em um Select.

 

Poste uma resposta se resolveu ou não.

 

Paulo Mendes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.