bom dia,
Para funcionar corretamente a sua necessidade eu tive que reestruturar um pouco seu projeto.
antes de começar a explicar só uma observação:
vc nao ira precisar criar uma tabela a parte para guardar o idDocente e dia Semana(Tdias), pois assim
vc esta criando multiplos registros para exibir em um único registro. nesse caso daria muito trabalho
ficar varrendo a tabela atras dos registros corretos para cada docente. Outro problema é q desse jeito
a tabela ficaria grande rapidamente, pois um único docente poderia ter 7 registros na tabela dias.
solução:
1 - na tabela TDocente eu adicionei o seguinte campo: "grDiasSemana" do tipo texto com tamanho de campo 20.
a idéia do campo é guardar varios valores em um único campo.
no seu caso vc ira guardar as multiplas seleções dos checkbox.
montei na seguinte estrutura: 0;0;0;0;0;0
o segredo de usar corretamente esses valores sem sacrificio é com o auxilio da função split.
ela sera responsavel por separar os dias para nós usando o ";" como referência para separar os campos.
nesse caso a função ira retornar um vetor de 6 posições: onde a primeira posicao sera o indice 0, ela ira representar segunda feira
e sabado que é a posição 5 sera a ultima posição do vetor. vc vera o uso pratico nas etapas 2 e 4.
2 - criei um modulo a parte contendo a função para resgatar e atualizar os checkbox dos dias da semana, tem que ser
em um módulo a parte para a sua macro poder exergar a mesma.
- Código:
Public Function getDiasSemana()
Dim vetor() As String
Dim grDiasSemana As String
grDiasSemana = Forms!FDocente!grDiasSemana
vetor = Split(grDiasSemana, ";")
Forms!FDocente!chSegunda = vetor(0)
Forms!FDocente!chTerca = vetor(1)
Forms!FDocente!chQuarta = vetor(2)
Forms!FDocente!chQuinta = vetor(3)
Forms!FDocente!chSexta = vetor(4)
Forms!FDocente!chSabado = vetor(5)
End Function
3 - no formulario FDocente criei 6 CheckBox nomeados como chSegunda, chTerca, etc...
4 - no formulario FDocente criei a função para atualizar os dias da semana no registro do docente.
- Código:
Public Function setDiasSemana(diaSemana As Integer)
Dim vetor() As String
Dim strDiasSemana As String
'indice do vetor
'0 segunda
'1 terca
'2 quarta
'3 quinta
'4 sexta
'5 sabado
vetor = Split(Me.grDiasSemana, ";")
'o campo grDiasSemana sera um campo responsavel por armazenar os dias de curso
'a ideia da funcao é usar o split para seperar os dias da semana
'apos seperar os dias da semana sera possivel trabalhar com os dias um a um
'no final de td sera montado novamente a string para fazer a atualização do campo grDiasSemana
Select Case diaSemana
Case 1: 'segunda
vetor(0) = IIf(Me.chSegunda, -1, 0)
Case 2: 'terça
vetor(1) = IIf(Me.chTerca, -1, 0)
Case 3: 'quarta
vetor(2) = IIf(Me.chQuarta, -1, 0)
Case 4: 'quinta
vetor(3) = IIf(Me.chQuinta, -1, 0)
Case 5: 'sexta
vetor(4) = IIf(Me.chSexta, -1, 0)
Case 6: 'sabado
vetor(5) = IIf(Me.chSabado, -1, 0)
End Select
strDiasSemana = vetor(0) & ";" & vetor(1) & ";" & vetor(2) & ";" & vetor(3) & ";" & vetor(4) & ";" & vetor(5)
grDiasSemana = strDiasSemana
End Function
5 - para cada checkbox adicionei a chamada da função para atualizar os registros passando o dia da semana como parametro.
exemplo de uso: call setDiasSemanas(diaSemana) 'Dia semana aceita valores de 1 a 6, sendo que 1 é segunda feira e 6 é sabado.
- Código:
Private Sub chSegunda_AfterUpdate()
Call setDiasSemana(1)
End Sub
6 - adicionei uma validação na função form_current para verificar se tem algum valor de docente selecionado. caso nao estiver, os campos
da semana ficam setados como false.
- Código:
Private Sub Form_Current()
Me.ltPesquisaDocente = Me.IDDocente
If IsNull(Me.IDDocente) Then
Me.chSegunda = False
Me.chTerca = False
Me.chQuarta = False
Me.chQuinta = False
Me.chSexta = False
Me.chSabado = False
End If
'Form!FDocenteDias = Me.IDDocente
End Sub
7 - na macro aposAtualizar do comboBox ltPesquisaDocente.
7.1 - insira a ação: ExecutarCódigo
7.2 - Nome da Função: getDiasSemana()
8 - excluir o subForm Dias Semanas.
estou mandando o projeto finalizado para usar de exemplo.
boa sorte ai fera.