Convidado 5/7/2013, 01:41
Rafael... Eu particularmente não gostei deste código usado neste exemplo... Nem sempre códigos complicados produzem o melhor resultado.
Vou tentar ser claro para que você entenda o que este código faz...
Método AbsolutPosition do RecodsetSuponha que em uma tabela tenha 6 registros
Registro 1 >>> Código = 1
>>> AbsolutePosition = 0Registro 2 >>> Código = 2
>>> AbsolutePosition = 1
Registro 3 >>> Código = 3
>>> AbsolutePosition = 2Registro 4 >>> Código = 4
>>> AbsolutePosition = 3Registro 5 >>> Código = 5
>>> AbsolutePosition = 4Registro 6 >>> Código = 6
>>> AbsolutePosition = 5Se voce Especifica este método como = 3, o ponteiro do recodset se move para o Registro 4Com o ponteiro do recordset neste registro, supondo que o registro 4 o departamento seja = CongeladosEle aplicar em uma variável o valor do campo departamento:'Então de acordo com o o texto em azul a variável Critério será = Congelados
Critério = rs("Departamento") De posse deste critério ele filtra a SQL que conterá todos os registros que Departamento = Congelados
SQL = "SELECT * FROM Tbl_Produtos WHERE " _
& "(Departamento='" & Critério & "');"Ocorre que este código funcionará bem para um grup de opções, porém para dois grupos voce teria que redirecionar o ponteiro para um Código do Ítem..E filtrando Departamento + Item.... Poderia dar erros... sendo que para um Item pode estar presente em mais departamentosRefiz totalmente o código e está simples e enxuto.333333]6]
Como fazer...
[/size]
1 - Coloque botões avulsos...2 - O nome do botão será o nome do Departamento ou Item
Se 6 Departamentos >>>> 6 Botões com os respectivos nome do departamento
Se 10 Itens >>>> 10 Botões com os respectivos nome do Item
Ao clicar no botão eu identifico seu nome através do comando: Me.ActiveControl.Name
Então A variável será:
Critério = Me.ActiveControl.Name (para departamento)Critério1 = Me.ActiveControl.Name (para item)
E Criei duas sub para O caso de:
Departamento e Departamento + Item
A primeira Sub (que filtra o Departamento)
Utiliza uma SQL Agrupada com a soma dos valores nos meses
(No Bd segue uma consulta gráfica para que entenda esta SQL) >>>> Tbl_Produtos Consulta
A segunda Sub (que filtra o Item)
é baseada em dois critérios >> Departamento + Item (Esta nao tem necessidade de ser agrupada pois retornará apenas uma linha)
Eis o código - Basta agora crias os botões... no código está a descrição do que fiz
Simples e Eficiente!!!
Option Compare Database
Option Explicit
'Variável para comportar o ítem clicado
Dim Critério1 As String
'Variável para comportar o departamento clicado
Dim Critério As String
'------------------------------------------------
'---------------------------------------------------------------------------------------
' Procedure : GeraGraficoPiloto
' Author : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
' Fórum : Fórum Máximo Access - http://maximoaccess.forumeiros.com/
' Date : 04/07/2013
' Comentários : Carrega um gráfico baseado no botão clicado segundo o critério
' do nome do botão (Departamento)
'---------------------------------------------------------------------------------------
Sub GeraGraficoPiloto()
Dim Rs As DAO.Recordset
Dim SQL As String
Grafico1.RowSource = ""
Grafico1.Visible = True 'Torna visível o gráfico.
'Coloca na variável que servirá ao filtro, o nome do controle ativo no formulário
'Este controle será o nome do botão clicado. As declarações desta variável fica nas declarações do módulo
'e se deve ao fato de ter que manter o seu valor em qualquer procedimento sendo assim utilizado no segundo filtro
Critério = Me.ActiveControl.Name
'Guarda o nome da Despesa na textbox oculta.
Me.txtDespesa = Critério
'Carrego na SQL uma consulta agrupada, com a soma dos meses, filtrada pelo campo departamento
SQL = "SELECT Tbl_Produtos.[Departamento], Sum(Tbl_Produtos.[Jan]) AS Jan, Sum(Tbl_Produtos.[Fev]) AS Fev," _
& "Sum(Tbl_Produtos.[Mar]) AS Mar, Sum(Tbl_Produtos.[Abr]) AS Abr, Sum(Tbl_Produtos.[Mai]) AS Mai," _
& "Sum(Tbl_Produtos.[Jun]) AS Jun, Sum(Tbl_Produtos.[Jul]) AS Jul, Sum(Tbl_Produtos.[Ago]) AS Ago," _
& "Sum(Tbl_Produtos.[Set]) AS [Set], Sum(Tbl_Produtos.[Out]) AS Out, Sum(Tbl_Produtos.[Nov]) AS Nov," _
& "Sum(Tbl_Produtos.[Dez]) AS Dez FROM Tbl_Produtos WHERE Departamento='" & Critério & "'" _
& " GROUP BY Tbl_Produtos.[Departamento];"
Grafico1.RowSource = SQL 'Define a origem do gráfico.
lblCredor.Caption = Critério 'Altera o título do form.
End Sub
'---------------------------------------------------------------------------------------
' Procedure : GeraGraficoPiloto
' Author : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
' Fórum : Fórum Máximo Access - http://maximoaccess.forumeiros.com/
' Date : 04/07/2013
' Comentários : Carrega um gráfico baseado no botão clicado segundo dois critérios
' baseado nos nomes de dois botões, Departamento/Item
'---------------------------------------------------------------------------------------
Sub GeraGraficoPiloto1()
Dim SQL As String
Grafico1.RowSource = ""
Grafico1.Visible = True 'Torna visível o gráfico.
'Coloca na variável que servirá ao filtro, o nome do controle ativo no formulário
'Este controle será o nome do botão clicado. As declarações desta variável fica nas declarações do módulo
'e se deve ao fato de ter que manter o seu valor em qualquer procedimento.
Critério1 = Me.ActiveControl.Name
'Guarda o nome do Item na textbox oculta.
Me.txtDespesa = Critério
'Esta SQL não há necessidade de ser agrupada pois sempre retornará um ítem
SQL = "SELECT * FROM Tbl_Produtos WHERE Departamento='" & Critério & "' And Item='" & Critério1 & "';"
Grafico1.RowSource = SQL 'Define a origem do gráfico.
lblCredor.Caption = Critério & " - " & Critério1 'Altera o título do form.
End Sub
'Carrega o gráfico segundo o critério do botão ativo na hora que carrega o formulário
'para o botão ficar ativo envia o foco para o mesmo
Private Sub Form_Load()
Me.Congelados.SetFocus
Me.GeraGraficoPiloto
End Sub
'//////////////////////////////////////////////////////////////////////////////////
'Inicio dos botões
'Está feito para os departamentos: Congelados e Frios
'E para os botões: Dourada,Paes,Piau e Repolho
'Basta criar demais botões e o nomear com o nome do departamento ou item
'A Sub GeraGraficoPiloto >>>> Departamento
'A Sub GeraGraficoPiloto1 >>>> Item
'//////////////////////////////////////////////////////////////////////////////////
Private Sub Congelados_AfterUpdate()
Me.GeraGraficoPiloto
End Sub
Private Sub Frios_Click()
Me.GeraGraficoPiloto
End Sub
Private Sub Dourada_Click()
Me.GeraGraficoPiloto1
End Sub
Private Sub Paes_Click()
Me.GeraGraficoPiloto1
End Sub
Private Sub Piau_Click()
Me.GeraGraficoPiloto1
End Sub
Private Sub Repolho_Click()
Me.GeraGraficoPiloto1
End Sub
Cumprimentos.