FILTRO_MSFLEXGRID_ACCESS

FERRAZ 12/11/2010 10:13:11
#357283
Dia rapaziada, venho tentando fazer um filtro em um MsFlexGrid e nao tenho o resuldato
esperado, alquem pode me dizer onde estou errando ?


Criterios que usei sem sucesso:

SQL = [Ô]SELECT * FROM TbProjeto WHERE Nome like [ô][Ô] & TxtBsc.Text & [Ô]%[ô] order by Nome[Ô]


SQL = [Ô]SELECT * FROM TbProjeto WHERE Itens like [ô][Ô] & Replace(TxtBsc.Text, [Ô][ô][Ô], [Ô][ô][Ô]) & [Ô]%[ô][Ô]


Sub para fazer o filtro no banco e deixar o MsFlexGrid exatamente com o item selecionado,
Mais nao seleciona nada, porque ?

Neste banco [Ô]Access[Ô]eu salvo um campo chamado [Ô]Itens[Ô] que fica assim no banco

ID Dta Itens
1 10/11/2010 15:34:47 Rosca S/Fim Diamentro 310 m,m x 4600
1 10/11/2010 15:34:47 Valv. Dosadora Diant. de 8[Ô][Ô] Tam. 1700 m,m[Ô]
1 10/11/2010 15:34:47 Rosca S/Fim Diamentro 310 m,m x 4600
2 10/11/2010 21:06:54 Montagem de Esteira
2 10/11/2010 21:06:54 Montagem de Granulador
3 11/11/2010 10:50:54 Valv. Dosadora Diant. de 8[Ô][Ô] Tam. 1700 m,m[Ô]
3 11/11/2010 10:50:54 Rosca S/Fim Diamentro 310 m,m x 4600

Usando o vbtab no listbox(neste campos = (Itens,Qtde,VUnit,SbTl) destaquei apenas para visualizar, vou salvando ID,Dta,(Itens,Qtde,VUnit,SbTl),TipoProjeto,TotalProjeto,FatorAplicado,NClt


Private Sub TxtBsc_Change()
Dim SQL As String
SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô][Ô] & TxtBsc.Text & [Ô]%[ô] order by NClt[Ô]
Set rs = cn.Execute(SQL)

With MsFlexProjeto
.Rows = .Rows + 1
.FixedRows = 1
.FixedCols = 0
.Rows = 1
.FormatString = [Ô]Registro |Data [Ô]

Do While Not rs.EOF

.Rows = .Rows + 1

.TextMatrix(.Rows - 1, 0) = IIf(IsNull(rs!ID), [Ô][Ô], rs!ID)
.TextMatrix(.Rows - 1, 1) = IIf(IsNull(rs!Dta), [Ô][Ô], rs!Dta)
.TextMatrix(.Rows - 1, 2) = IIf(IsNull(rs!Itens), [Ô][Ô], rs!Itens)
.TextMatrix(.Rows - 1, 3) = IIf(IsNull(rs!Qtde), [Ô][Ô], rs!Qtde)
.TextMatrix(.Rows - 1, 4) = IIf(IsNull(rs!VUnit), [Ô][Ô], rs!VUnit)
.TextMatrix(.Rows - 1, 5) = IIf(IsNull(rs!SbTl), [Ô][Ô], rs!SbTl)
.TextMatrix(.Rows - 1, 6) = IIf(IsNull(rs!TipoProjeto), [Ô][Ô], rs!TipoProjeto)
.TextMatrix(.Rows - 1, 7) = IIf(IsNull(rs!TotalProjeto), [Ô][Ô], rs!TotalProjeto)
.TextMatrix(.Rows - 1, 8) = IIf(IsNull(rs!FatorAplicado), [Ô][Ô], rs!FatorAplicado)
.TextMatrix(.Rows - 1, 9) = IIf(IsNull(rs!NClt), [Ô][Ô], rs!NClt)
.TextMatrix(.Rows - 1, 0) = Format(.TextMatrix(.Rows - 1, 0), [Ô]000000[Ô])
.TextMatrix(.Rows - 1, 4) = Format(.TextMatrix(.Rows - 1, 4), [Ô]currency[Ô])
.TextMatrix(.Rows - 1, 5) = Format(.TextMatrix(.Rows - 1, 5), [Ô]currency[Ô])
.TextMatrix(.Rows - 1, 7) = Format(.TextMatrix(.Rows - 1, 7), [Ô]currency[Ô])

rs.MoveNext

Loop
For i = 1 To .Rows - 1
If .TextMatrix(i, 1) = TxtBsc.Text Then
.TopRow = i
.RowSel = i
Exit For
End If
Next
End With

End Sub


Agora eu tenho outro projeto de estudo usando um banco [Ô]MySQL[Ô] e funciona perfeitamente, no meu
ponto de vista, eh a unica diferenca entre um projeto e outro, pois neste atual estou usando um
banco [Ô]Access 2000[Ô], se eh isso como posso fazer este filtro no [Ô]Access 2000[Ô].


Valeu a atencao de todos os colegas do VbMania, Valeu...
FERRAZ 12/11/2010 13:04:11
#357303
Usando desta forma, cosultando direto no form atraves de um [Ô]InputBox[Ô] para digitar o codigo
de registro (ID), ele so retorna um item e descosidera o restante. Exemplo: ID = 000003 =
tres itens, valvula, rosca e porca, resultado retornado = valvula ?

Funcao para consulta:

Public Function ConsultaProjeto(ByVal EntraID As Integer) As Variant
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])

With rs
.Open [Ô]Select * From TbProjeto Where ID=[Ô] & EntraID & [Ô][Ô], cn, adOpenKeyset, adLockOptimistic
If .RecordCount = 0 Then
MsgBox [Ô]Código Inválido[Ô], vbExclamation, [Ô]Erro[Ô]
Else

FrmProjeto.TxtReg.Text = (!ID)
FrmProjeto.TxtDta.Text = IIf(IsNull(!Dta), Empty, !Dta)
FrmProjeto.CboTipServ.Text = IIf(IsNull(!TipoProjeto), Empty, !TipoProjeto)
FrmProjeto.TxtClt.Text = IIf(IsNull(!NClt), Empty, !NClt)
FrmProjeto.TxtTlProj.Text = IIf(IsNull(!TotalProjeto), Empty, !TotalProjeto)
FrmProjeto.TxtFtUso.Text = IIf(IsNull(!FatorAplicado), Empty, !FatorAplicado)

FrmProjeto.ListMov.AddItem [Ô] [Ô] & (rs!Itens) & vbTab & (rs!Qtde) & vbTab & _
(rs!VUnit) & vbTab & (rs!SbTl)

End If
.Close
End With

End Function


Chamado a funcao:

Private Sub lvBConlProd_Click()
Dim EntraID As Integer
EntraID = InputBox([Ô]Digite o Código[Ô], [Ô]Consulta[Ô])
ConsultaProjeto (EntraID)
End Sub


Colegas, como posso resolver esta questao...
XXXANGELSXXX 12/11/2010 13:06:50
#357304
Esta faltando a primeiro sinal de %

  
SQL = [Ô]SELECT * FROM TbProjeto WHERE Nome [ô]%[Ô] &TxtBsc.Text & [Ô]%[ô] order by Nome[Ô]
MARCELO.TREZE 12/11/2010 13:08:30
#357305
Resposta escolhida
usando o acces tente alterar o seguinte

SQL = [Ô]SELECT * FROM TbProjeto WHERE Nome like [ô][Ô] & TxtBsc.Text & [Ô]*[ô] order by Nome[Ô]

no lugar de % coloque *

XXXANGELSXXX 12/11/2010 14:15:00
#357306
Ha tá.. e mesmo, nao vi .. banco acess, tem que colocar o * no primeiro tambem.

 
SQL = [Ô]SELECT * FROM TbProjeto WHERE Nome [ô]*[Ô] &TxtBsc.Text & [Ô]*[ô] order by Nome[Ô]


Pronto, assim vai funcionar
MARCELO.TREZE 12/11/2010 14:26:52
#357310
Vamos lá, regras do Like:

Like [ô]* variavel *[ô] = pesquisa em qualquer parte da string, ex: ca= carla, jessica, geocasta

Like [ô]variavel*[ô] = pesquisa tudo que comece com que foi digitado ex: ca = carla

Like [ô]*variavel[ô] = pesquisa tudo que termine com que foi digitado ex: ca = jessica

regras simples de muita utilidade.


FERRAZ 12/11/2010 14:29:41
#357312
Usei as duas formas:

SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô][Ô] & TxtBsc.Text & [Ô]*[ô] order by NClt[Ô]
= Dica Marcelo

SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô]*[Ô] & TxtBsc.Text & [Ô]*[ô] order by NClt[Ô]
= DIa XXXANGELSXXX

Na minha sub, mais sem sucesso:

Private Sub TxtBsc_Change()
Dim SQL As String
SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô][Ô] & TxtBsc.Text & [Ô]%[ô] order by NClt[Ô]
Set rs = cn.Execute(SQL)

With MsFlexProjeto
.Rows = .Rows + 1
.FixedRows = 1
.FixedCols = 0
.Rows = 1
.FormatString = [Ô]Registro |Data [Ô]

Do While Not rs.EOF

.Rows = .Rows + 1

.TextMatrix(.Rows - 1, 0) = IIf(IsNull(rs!ID), [Ô][Ô], rs!ID)
.TextMatrix(.Rows - 1, 1) = IIf(IsNull(rs!Dta), [Ô][Ô], rs!Dta)
.TextMatrix(.Rows - 1, 2) = IIf(IsNull(rs!Itens), [Ô][Ô], rs!Itens)
.TextMatrix(.Rows - 1, 3) = IIf(IsNull(rs!Qtde), [Ô][Ô], rs!Qtde)
.TextMatrix(.Rows - 1, 4) = IIf(IsNull(rs!VUnit), [Ô][Ô], rs!VUnit)
.TextMatrix(.Rows - 1, 5) = IIf(IsNull(rs!SbTl), [Ô][Ô], rs!SbTl)
.TextMatrix(.Rows - 1, 6) = IIf(IsNull(rs!TipoProjeto), [Ô][Ô], rs!TipoProjeto)
.TextMatrix(.Rows - 1, 7) = IIf(IsNull(rs!TotalProjeto), [Ô][Ô], rs!TotalProjeto)
.TextMatrix(.Rows - 1, 8) = IIf(IsNull(rs!FatorAplicado), [Ô][Ô], rs!FatorAplicado)
.TextMatrix(.Rows - 1, 9) = IIf(IsNull(rs!NClt), [Ô][Ô], rs!NClt)
.TextMatrix(.Rows - 1, 0) = Format(.TextMatrix(.Rows - 1, 0), [Ô]000000[Ô])
.TextMatrix(.Rows - 1, 4) = Format(.TextMatrix(.Rows - 1, 4), [Ô]currency[Ô])
.TextMatrix(.Rows - 1, 5) = Format(.TextMatrix(.Rows - 1, 5), [Ô]currency[Ô])
.TextMatrix(.Rows - 1, 7) = Format(.TextMatrix(.Rows - 1, 7), [Ô]currency[Ô])

rs.MoveNext

Loop
For i = 1 To .Rows - 1
If .TextMatrix(i, 1) = TxtBsc.Text Then
.TopRow = i
.RowSel = i
Exit For
End If
Next
End With

End Sub


Colegas, ainda estou sem entender o porque ? Marcelo valeu pela regra do comando [Ô]Like[Ô]
MARCELO.TREZE 12/11/2010 14:41:31
#357314
faça alguns teste, não tenho certeza mas se o campo for tipo numérico vc não deverá usar as aspas simples

ou talvez o,like so funcione em campo do tipo Texto

veja os teste que pode fazer

diretamente na query

SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô]003*[ô] order by NClt[Ô]

ou

SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like 3* order by NClt[Ô]

e tente usar a consulta e um campo do tipo texto




FERRAZ 12/11/2010 14:56:19
#357316
Marcelo, fiz os testes, nao deu certo, mais tambem este campo (ID) eh tipo autonumeracao no access eh mole, agora o campo (NClt) eh tipo texto, dai eu fiz de outro forma,
mais sem sucesso ainda.

Minha Forma:

SQL = [Ô]SELECT * FROM TbProjeto WHERE NClt like [ô]Ceramica*[ô]  order by ID[Ô]


Sua Sugestao:

SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô]0003*[ô]  order by NClt[Ô]

ou
SQL = [Ô]SELECT * FROM TbProjeto WHERE ID like [ô]3*[ô] order by NClt[Ô]



Nao tenho o resultado esperado ainda ?
MARCELO.TREZE 12/11/2010 15:09:02
#357318
Ferraz o que esta acontecendo afinal?

quais os dados da tabela? como esta aparecendo? como deveria aparecer?

FERRAZ 12/11/2010 15:14:20
#357320
Marcelo ja falo pro ce, quenta ai, estou testando com mais calma suas dicas, meu amigo.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas