USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Realizar uma escolha direto do Banco de Dados
^HEAVY-METAL^
Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
ENUNCIADA !
Postada em 30/08/2007 15:15 hs            
Pessoal,
 
gostaria de saber se é possível (e caso seja como faço) para realizar um Random diretamente da minha base de dados... Por exemplo, tenho um cadastro de funcionários que pode variar a quantidade de registros, dependendo do crescimento da empresa... Quero que deste banco de dados sejam escolhidos 4 funcionários aleatóriamente, só que obedecendo a alguns critérios...
 
Por exempo (para melhorar o entendimento) tenho 1 tabela com os campos IDFuncionário (Inteiro Longo) Seg1200, Seg1500, Seg1700, Ter1400, Ter1600 (vários campos desse tipo, que são para determinados dias e horas da semana, onde é preenchido com S ou N (para uma disponibilidade de treinamento - por exemplo). O sistema ele irá sortear 4 pessoas para a Seg1200. O que eu queria é que a rotina pegasse o banco, escolhesse 1 pessoa e verificasse se ela tem disponibilidade naquele horário, se tiver, grava em um banco (arquivo, variável, qualquer método), se não tiver a disponibilidade ele sortea outro do banco e por ai vai até escolher os 4..
 
Entenderam?? Qualquer dúvida em relação ao meu problema acima só me avisar que tento explicar de outra maneira..
 
Abraços,
   
Sandro
não registrado
ENUNCIADA !
Postada em 31/08/2007 20:38 hs   
Olá,
 
Você terá que usar um processo simples em três etapas:
 
1. Descubra o maior identificador de funcionário da tabela;
2. Calcule um número aleatório com uma fórmula simples como esta abaixo:
    Int((MaxFuncionarios * Rnd) + 1)
3. Verifique se o funcionário está disponível e acrescente em um vetor temporariamente. Repita o processo mais 3 vezes, não esquecendo de comparar o código escolhido com os códigos já contidos no vetor para ter certeza que o mesmo número não foi selecionado novamente.
 
Basicamente é isso. Abaixo eu envio um programa que rascunhei, deve servir de base para você. Eu não testei, mas acho que serve. Depois de selecionar os funcionários ele escreve o códigos na janela Immediate.
 
Option Explicit
Dim MaxFuncionarios As Integer
Private Sub Form_Load()
    Randomize
   
    Verifica_Funcionarios
    Seleciona_Funcionarios
   
End Sub
Private Sub Verifica_Funcionarios()
    Dim Sql As String
    Dim RS As ADODB.Recordset
   
    Sql = "Select Max(IDFuncionario) As Num From Funcionarios"
   
    Set RS = New ADODB.Recordset
    RS.Open Sql, Conn, adOpenStatic
   
    MaxFuncionarios = RS!Num
   
    RS.Close
    Set RS = Nothing
End Sub
Private Sub Seleciona_Funcionarios()
    Dim VetFuncionarios(0 To 3) As Integer
    Dim Cont As Integer, Conta As Integer, ID As Integer
    Dim Sql As String
    Dim RS As ADODB.Recordset
   
    Cont = 1
    Set RS = New ADODB.Recordset
   
    Do While Cont < 4
        ID = Escolhe_Funcionario()
       
        'Verifica se o número escolhido já foi selecionado
        For Conta = 0 To 3
            If VetFuncionarios(Conta) = ID Then GoTo Continua   'Eu sei que muitos não gostam do GOTO, mas se souber usar, não complica o código como dizem.
        Next
       
        'Procura pelo funcionário e se ele está disponível
        Sql = "Select * From Funcionarios Where "
        Sql = Sql & "IDFuncionario = " & ID & " And "
        Sql = Sql & "SEG1200 = 'S'"
        RS.Open Sql, Conn, adOpenStatic
       
        If Not RS.EOF Then                                      'Se o funcionário foi localizado e tem disponibilidade,
            VetFuncionarios(Cont - 1) = ID                      'Acrescenta o seu ID no vetor
        Else                                                    'Caso contrário,
            GoTo Continua                                       'Ignora e escolhe outro
        End If
       
        'Incrementa o contado para controle do loop
        Cont = Cont + 1
       
Continua:
        RS.Close
    Loop
    For Conta = 0 To 3
        Debug.Print VetFuncionarios(Conta)
    Next
    Set RS = Nothing
End Sub
Private Function Escolhe_Funcionario() As Integer
    Escolhe_Funcionario = Int((MaxFuncionarios * Rnd) + 1)
   
End Function
 
Espero ter ajudado.
 
um abraço,
Sandro.
 
   
^HEAVY-METAL^
Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
ENUNCIADA !
Postada em 03/09/2007 11:29 hs            
vou testar aqui,
 
Obrigado pela ajuda.

Manuel F. L. Sansoni

Supervisor de TI

 

   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página