CONTAR SEM REPETICOES
Boas
Estou a tentar contar o numero de funcionário que estiveram a trabalhar numa determinada maquina e a fazer um Distinct sobre eles! Pois quero o total de funcionários que tiveram a trabalhar mas sem repetições!
Dai estar a tentar juntar o distinct e o count! Mas não esta a dar lá muito resultado!
Como fazo para contar o números de pessoas mas sem contar a mesma pessoa duas vezes.
Código:
Private Sub numerodepessoas()
Dim ws As DAO.Workspace
Dim Db As DAO.Database
Dim StrSql As String
Dim Rs As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & [Ô] este.accdb[Ô], False, False, [Ô]MS Access;PWD=senha[Ô])
StrSql = [Ô]SELECT Distinct (numero) as total1 FROM teste WHERE projecto = [ô][Ô] & Me.txtID & [Ô][ô] And tarefa = [Ô] & CInt(Me.Text54)
Set Rs = Db.OpenRecordset(StrSql)
Rs.MoveFirst
Do
CurrentDb.Execute [Ô]UPDATE Horas SET numerodepessoas=[ô][Ô] & Rs.Fields([Ô]total1[Ô]) & [Ô][ô] WHERE projecto =[ô][Ô] & Me.txtID & [Ô][ô] And tarefa=[Ô] & Me.Text54 & [Ô];[Ô]
Rs.MoveNext
Loop
End Sub
/////////////////////////////////////////////
Private Sub Horas()
On Error GoTo TrataErro
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim ws As DAO.Workspace
Dim StrSql As String
Dim StrNumFunc As String
Dim inti As Integer
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & [Ô] este.accdb[Ô], False, False, [Ô]MS Access;PWD=senha[Ô])
StrSql = [Ô]SELECT * FROM Horas[Ô]
Set Rs = Db.OpenRecordset(StrSql)
StrNumFunc = DCount([Ô]*[Ô], [Ô][Horas][Ô])
inti = 0
fInLoop = True
fExitLoop = False
Do Until inti >= StrNumFunc Or fExitLoop
DoEvents
inti = inti + 1
Me.txtInti = inti
Me.txtID = Rs!projecto
Me.Text54 = Rs!tarefa
Rs.MoveNext
Call numerodepessoas
Loop
fInLoop = False
Exit Sub
TrataErro:
If Err.Number = 2220 Then
MsgBox [Ô]XXXXX[Ô]
Else
Resume Next
End If
End Sub
Estou a tentar contar o numero de funcionário que estiveram a trabalhar numa determinada maquina e a fazer um Distinct sobre eles! Pois quero o total de funcionários que tiveram a trabalhar mas sem repetições!
Dai estar a tentar juntar o distinct e o count! Mas não esta a dar lá muito resultado!
Como fazo para contar o números de pessoas mas sem contar a mesma pessoa duas vezes.
Código:
Private Sub numerodepessoas()
Dim ws As DAO.Workspace
Dim Db As DAO.Database
Dim StrSql As String
Dim Rs As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & [Ô] este.accdb[Ô], False, False, [Ô]MS Access;PWD=senha[Ô])
StrSql = [Ô]SELECT Distinct (numero) as total1 FROM teste WHERE projecto = [ô][Ô] & Me.txtID & [Ô][ô] And tarefa = [Ô] & CInt(Me.Text54)
Set Rs = Db.OpenRecordset(StrSql)
Rs.MoveFirst
Do
CurrentDb.Execute [Ô]UPDATE Horas SET numerodepessoas=[ô][Ô] & Rs.Fields([Ô]total1[Ô]) & [Ô][ô] WHERE projecto =[ô][Ô] & Me.txtID & [Ô][ô] And tarefa=[Ô] & Me.Text54 & [Ô];[Ô]
Rs.MoveNext
Loop
End Sub
/////////////////////////////////////////////
Private Sub Horas()
On Error GoTo TrataErro
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim ws As DAO.Workspace
Dim StrSql As String
Dim StrNumFunc As String
Dim inti As Integer
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & [Ô] este.accdb[Ô], False, False, [Ô]MS Access;PWD=senha[Ô])
StrSql = [Ô]SELECT * FROM Horas[Ô]
Set Rs = Db.OpenRecordset(StrSql)
StrNumFunc = DCount([Ô]*[Ô], [Ô][Horas][Ô])
inti = 0
fInLoop = True
fExitLoop = False
Do Until inti >= StrNumFunc Or fExitLoop
DoEvents
inti = inti + 1
Me.txtInti = inti
Me.txtID = Rs!projecto
Me.Text54 = Rs!tarefa
Rs.MoveNext
Call numerodepessoas
Loop
fInLoop = False
Exit Sub
TrataErro:
If Err.Number = 2220 Then
MsgBox [Ô]XXXXX[Ô]
Else
Resume Next
End If
End Sub
Select Data,Sum(horas) as TotHoras From Horas Group By Data,TotHoras.
é mais ou menos desse jeito que faço.
é mais ou menos desse jeito que faço.
vc usaria o count mesmo, juntamente com o Group By
algo detse tipo
SELECT COUNT([txt-color=#0000f0]funcionarios[/txt-color]) As TotalFunc FROM tabela GROUP BY [txt-color=#0000f0]maquina[/txt-color]
algo detse tipo
SELECT COUNT([txt-color=#0000f0]funcionarios[/txt-color]) As TotalFunc FROM tabela GROUP BY [txt-color=#0000f0]maquina[/txt-color]
Outra maneira
SELECT COUNT(DISTINCT(funcionario)) as quant FROM tabela
Peço desculpa...Mas eu andei a procura do tópico e não o encontrei. Então abri outro
Marcelo testei o que falou mas não deu.... Não escreve nada!
Marcelo testei o que falou mas não deu.... Não escreve nada!
faz o seguinte qual o nome dos campos do funcionário e o da maquina?
Func - numero
Maquina - tarefas
Maquina - tarefas
tenta esta query
StrSql = [Ô]SELECT Count(Distinct (numero)) as total1 FROM teste WHERE projecto = [ô][Ô] & Me.txtID & [Ô][ô] Group By tarefas[Ô]
Citação::
tenta esta queryStrSql = [Ô]SELECT Count(Distinct (numero)) as total1 FROM teste WHERE projecto = [ô][Ô] & Me.txtID & [Ô][ô] Group By tarefa[Ô]
tarefas*
Consigo mostrar esse valor numa textbox?
Porque não me escreve nada nas celulas, acho que posso ter um problema com o update.
Porque não me escreve nada nas celulas, acho que posso ter um problema com o update.
então vamos testar
coloque um listbox no seu form e faça assim
coloque um listbox no seu form e faça assim
Private Sub numerodepessoas()
Dim ws As DAO.Workspace
Dim Db As DAO.Database
Dim StrSql As String
Dim Rs As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & [Ô] este.accdb[Ô], False, False, [Ô]MS Access;PWD=senha[Ô])
StrSql = [Ô]SELECT Count(Distinct (numero)) as total1 FROM teste WHERE projecto = [ô][Ô] & Me.txtID & [Ô][ô] Group By tarefas[Ô]
Set Rs = Db.OpenRecordset(StrSql)
Do While Not Rs.EOF
List1.AddItem Rs.Fields([Ô]tarefas[Ô]) & [Ô] = [Ô] & Rs.Fields([Ô]total1[Ô])
Rs.MoveNext
Loop
End Sub
Tópico encerrado , respostas não são mais permitidas