Postada em 21/03/2009 09:39 hs
Pessoal, meu código para filtrar e preencher o Grid de acordo com parametro da query:
Private Sub CmdFiltrar_Click() If Filtrar(1).Value Then OpValor = 1 PreencheGrid ElseIf Filtrar(2).Value Then OpValor = 2 PreencheGrid Else MsgBox "Selecione um tipo de opção para filtrar" End If End Sub
Private Sub PreencheGrid()
Grid.Redraw = False Grid.Rows = 1 Dim Mostra As String Dim Row As Integer
Set TbLoc = New ADODB.Recordset If TbLoc.State = 1 Then TbLoc.Close With TbLoc .CursorType = adOpenStatic .CursorLocation = adUseClient .LockType = adLockPessimistic If Combo3.Text = "" Then Mostra = MsgBox("Escolha um tipo de pesquisa para filtrar.", vbInformation, "Pesquisa: Sobra de Contrato") Exit Sub End If If OpValor = 1 Then Select Case Combo3 Case "Exibir tudo" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Tipo = 'MATERIAL ELÉTRICO' or Tipo = 'MATERIAL ELETRÔNICO' ORDER BY [Descrição]" Case "Exibir com saldo" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Quantidade >'0' AND(Tipo = 'MATERIAL ELÉTRICO' or Tipo = 'MATERIAL ELETRÔNICO') ORDER BY [Descrição]" Case "Exibir saldo zero" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Quantidade ='0' AND(Tipo = 'MATERIAL ELÉTRICO' or Tipo = 'MATERIAL ELETRÔNICO') ORDER BY [Descrição]" End Select ElseIf OpValor = 2 Then Select Case Combo3 Case "Exibir tudo" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Tipo <> 'MATERIAL ELÉTRICO' or Tipo <> 'MATERIAL ELETRÔNICO' ORDER BY [Descrição]" Case "Exibir com saldo" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Quantidade >'0' AND(Tipo <> 'MATERIAL ELÉTRICO' or Tipo <> 'MATERIAL ELETRÔNICO') ORDER BY [Descrição]" Case "Exibir saldo zero" .Source = "SELECT [Código],[Descrição],Unidade,[Localização1],[Localização2],[Localização3],Tipo,Quantidade,Unitario FROM Localizacao Where Quantidade ='0' AND(Tipo <> 'MATERIAL ELÉTRICO' or Tipo <> 'MATERIAL ELETRÔNICO') ORDER BY [Descrição]" End Select ElseIf OpValor <> 1 And OpValor <> 2 Then .Source = "SELECT * FROM Localizacao ORDER BY Descrição" End If
.ActiveConnection = BancoSobra .Open
If .BOF = True And .EOF = True Then Exit Sub Grid.Rows = .RecordCount + 1 'Row = 0 Do Until .EOF = True Row = Row + 1 Grid.Col = 0 Grid.Row = Row Grid.TextMatrix(Row, 1) = !Código Grid.TextMatrix(Row, 2) = !Descrição Grid.TextMatrix(Row, 3) = !Unidade Grid.TextMatrix(Row, 4) = !Quantidade Grid.TextMatrix(Row, 5) = Nnull(!Localização1) Grid.TextMatrix(Row, 6) = Nnull(!Localização2) Grid.TextMatrix(Row, 7) = Nnull(!Localização3)
TbLoc.MoveNext Loop End With Grid.Redraw = True
Next I Grid.Row = 1 Grid.Row = Grid.FixedRows Grid.TopRow = Grid.FixedRows SendKeys "^{Home}"
With Combo3 .Clear .AddItem "Exibir tudo" .AddItem "Exibir com saldo" .AddItem "Exibir saldo zero" End With End Sub
Não sei o que esta acontecendo pois o (OR) e (AND) na instrução não esta fazendo efeito corretamente. Se eu mando carregar somente os (MATERIAL ELÉTRICO e MATERIAL ELETRÔNICO), carrega somete eles, agora se eu mando carregar os diferentes deles, não funciona, ou seja, carrega tudo novamente. Onde estou errando?
|