GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Consulta - porcentagem
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Programador Pleno

Figura de  Joey
postado
É possível limitar a quantidade de registros de uma consulta, não por quantidade, mas sim por porcentágem ?

exemplo, tenho uma tabela com 2000 registros, sendo que em determinada consulta eu quero limitar o máximo em 25% de registros da tabela !!

Lembrando que a tabela não terá sempre 2000 registor, ela será variável !!!!

É possível isso ?

This message has been edited. Last edited by: Luiz Cláudio C. V. Rocha,


-----------------------------------------
 
Postagens: 180 | Registrado: 10 September 2004Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
Olá Joey,

Vamos lá...

Se seguir passo a passo, não tem erro.

Primeiramente você precisará criar uma consulta QUALQUER. Só precisamos que EXISTA um OBJETO QUERY; o que esta query retorna não importa pra gente, depois você vai entender o porque.

Portanto, crie uma consulta e salve com o nome de sua preferência.

Você não me disse aonde desejará visulizar estes registros, então entendo que eles serão visualizados num Formulário qualquer ok ?

Sendo assim, faça o seguinte:

1) Coloque na ORIGEM DE DADOS deste formulário a sua consulta criada.

2) Inclua no código do seu formulário a seguinte Sub

Private Sub SBDefineQueryPercentual(strNomeTabela As String, _
                                    dblPercentualLimitacao As Double, _
                                    strNomeConsulta As String)
On Error GoTo ErrHandler

    Dim db As DAO.Database
    Dim rstTotal As DAO.Recordset
    Dim qryDefs As QueryDefs
    Dim dblTotalRegistros As Double
    Dim dblQtdePercetual As Double
    Dim strNovoSQL
    
    Set db = CurrentDb
    Set qryDefs = db.QueryDefs
    
    'Retorna o total de registros da tabela
    Set rstTotal = db.OpenRecordset("SELECT Count(1) FROM " & strNomeTabela, dbReadOnly)
    dblTotalRegistros = rstTotal(0)
    
    'Arredonda o número para o percentual definido
    'Exemplo: 3,5 registros => 4 registros
    dblQtdePercetual = Round(dblTotalRegistros * (dblPercentualLimitacao / 100), 0)
    
    'Define a string de SQL que será usada na consulta
    strNovoSQL = "SELECT TOP " & dblQtdePercetual & ", * FROM " & strNomeTabela & ";"
    
    'Muda o SQL da consulta para o SQL criado
    qryDefs(strNomeConsulta).SQL = strNovoSQL
    
    rstTotal.Close
    Set rstTotal = Nothing
    db.Close
    Set db = Nothing
    Set qryDefs = Nothing
    
ExitHere:
    Exit Sub

ErrHandler:
    rstTotal.Close
    Set rstTotal = Nothing
    db.Close
    Set db = Nothing
    Set qryDefs = Nothing
    MsgBox Err.Description, vbCritical

End Sub


3) Coloque no evento "Ao Carregar" do seu formulário o seguinte código:

Call SBDefineQueryPercentual("NomeDaSuaTabela", "PercentualQueDeseja", "NomeDaSuaConsulta")
Me.Requery


Agora, vai a explicação do que o código vai fazer.

Podemos limitar a quantidade de registros de uma tabela usando a argumento TOP. Exemplo: SELECT TOP 5, * FROM MinhaTabela

Esta sintaxe retornará apenas 5 registros da minha tabela. Pode ela ter um milhão de registros que sempre serão retornados apenas os 5 primeiros.

Mas o que você quer é o retorno de uma quantidade que represente um percentual do total de registros da tabela, não é mesmo ?

Então o que o código faz...

1º) Conta a quantidade de registros da sua tabela
2º) Calcula a quantidade que representa percentual desejado. Exemplo: Se minha tabela tem 50 registros e você deseja ver 10% deles, a quantidade que representa este percentual será 5, pois 10% de 50 é 5, ok ?
3º) ATENÇÃO AQUI -> Por último o código ALTERA o SQL da Query que criou para o seguinte SQL:
SELECT TOP 5, * FROM SuaTabela.
POR ISSO EU DISSE QUE VOCÊ PRECISAVA CRIAR UMA CONSULTA QUALQUER, POIS O SQL DELA SERÁ ALTERADO DE QUALQUER FORMA. INDEPENDENTEMENTE DO QUE EXISTIR NELA.

Resumindo... se eu sei que argumento TOP exibi a quantidade desejada, a única coisa que preciso fazer é saber qual valor REPRESENTA o percentual desejado em relação a quantidade de registros da tabela. Se eu souber isso, basta incluir o valor após o argumento TOP, que é o que o código faz.

Qualquer coisa, estou a disposição.

Parabéns pela sua pergunta.


Grande Abraco,
Rubens Cury
 
Postagens: 155 | Registrado: 09 December 2005Reply With QuoteReport This Post
Moderador
Diretor

postado Hide Post
Ou então


SELECT TOP 25 PERCENT *
FROM TuaTabela;


Não se esqueça de colocar "*" ou o nome do campo, caso contrário ocorrerá erro.


----------------------------------------------------
Luiz Cláudio C. V. Rocha
Microsoft MVP Office - MCP - MOS
http://msmvps.com/officedev - http://www.accessfaq.com.br
 
Postagens: 6151 | Localização: São Paulo, SP, Brasil | Registrado: 02 February 2001Reply With QuoteReport This Post
Programador Pleno

postado Hide Post
AHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahhaAHhaahahahah ahahahha

POR ISSO QUE ESSE CARA É MEU CHEFE !
VIVENDO E APRENDENDO !

Valeu luiz !


Grande Abraco,
Rubens Cury
 
Postagens: 155 | Registrado: 09 December 2005Reply With QuoteReport This Post
Programador Pleno

Figura de  Joey
postado Hide Post
E é por isso que eu frequento esse forum..só tem fera...

Funcionou..obrigado a todos


-----------------------------------------
 
Postagens: 180 | Registrado: 10 September 2004Reply With QuoteReport This Post
  Powered by Social Strata  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Consulta - porcentagem

©