SALVAR RADIOBUTTON E CHECKBOX NO ACCESS

ABREU 03/04/2017 12:58:01
#472958
Bom dia para todos.

Mais uma vez estou em dificuldade e preciso de ajuda.
Não estou conseguindo salvar os valores do RadioButton e do CheckBox no Access 2007.
Quando rodo o aplicativo recebo a mensagem de erro “Tipo de dados incompatível na expressão de critério.”
Eis os trechos do código que fiz no VB.Net 2012. Em anexo tem um print da tabela e do formulário.

Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
Using cn As New OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BdProFitness.accdb;Jet OLEDB:System database=system.mdw;[Ô])
cn.Open()
Using cmd As New OleDbCommand([Ô]INSERT INTO PF001 (NomeCliente, Nacionalidade, EstadoCivil,[Ô] & _
[Ô]..., SexoMasculino,[Ô] & _
[Ô]SexoFeminino, DiaTreinoSeg, DiaTreinoTer, DiaTreinoQua,DiaTreinoQui,[Ô] & _
[Ô]DiaTreinoSex, DiaTreinoSab, DiaTreinoDom, ...) VALUES [Ô] & _
[Ô](txtNomeCliente.Text, txtNacionalidade.Text, txtEstadoCivil.Text,[Ô] &_
...
[Ô]rbtSexoMasculino.Checked, rbtSexoFeminino.Checked, chkDiaTreinoSeg.CheckState, chkDiaTreinoTer.CheckState,[Ô] & _
[Ô]chkDiaTreinoQua.CheckState, chkDiaTreinoQui.CheckState, chkDiaTreinoSex.CheckState,[Ô] & _
[Ô]chkDiaTreinoSab.CheckState, chkDiaTreinoDom.CheckState, ...)[Ô])
cmd.Connection = cn
cmd.Parameters.AddWithValue([Ô]@NomeCliente[Ô], txtNomeCliente.Text)
cmd.Parameters.AddWithValue([Ô]@Nacionalidade[Ô], txtNacionalidade.Text)
cmd.Parameters.AddWithValue([Ô]@EstadoCivil[Ô], txtEstadoCivil.Text)
...
cmd.Parameters.AddWithValue([Ô]@SexoMasculino[Ô], rbtSexoMasculino.Checked)
cmd.Parameters.AddWithValue([Ô]@SexoFeminino[Ô], rbtSexoFeminino.Checked)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoSeg[Ô], chkDiaTreinoSeg.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoTer[Ô], chkDiaTreinoTer.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoQua[Ô], chkDiaTreinoQua.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoQui[Ô], chkDiaTreinoQui.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoSex[Ô], chkDiaTreinoSex.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoSab[Ô], chkDiaTreinoSab.CheckState)
cmd.Parameters.AddWithValue([Ô]@DiaTreinoDom[Ô], chkDiaTreinoDom.CheckState)
...
cmd.ExecuteNonQuery()
End Using
cn.Close()
End Using
OMAR2011 03/04/2017 15:03:32
#472964
Use Checked para todos.
Acredito que o CheckState, mais para comparação.
Valor 1 para True.
Valor 0 para False.
ABREU 03/04/2017 16:10:10
#472966
Caro OMAR2011,
Testei a propriedade Checked em todos os comandos, mas emitiu a mesma mensagem.
Grato por sua atenção.
OMAR2011 03/04/2017 16:42:20
#472967
O que é isto em vermelho.
Using cmd As New OleDbCommand([Ô]INSERT INTO PF001 (NomeCliente, Nacionalidade, EstadoCivil,[Ô] & _
[Ô][txt-color=#e80000]...[/txt-color], SexoMasculino,[Ô] & _
[Ô]SexoFeminino, DiaTreinoSeg, DiaTreinoTer, DiaTreinoQua,DiaTreinoQui,[Ô] & _
[Ô]DiaTreinoSex, DiaTreinoSab, DiaTreinoDom, ...) VALUES [Ô] & _
[Ô](txtNomeCliente.Text, txtNacionalidade.Text, txtEstadoCivil.Text,[Ô] &_
[txt-color=#e80000]...[/txt-color]
[Ô]rbtSexoMasculino.Checked, rbtSexoFeminino.Checked, chkDiaTreinoSeg.CheckState, chkDiaTreinoTer.CheckState,[Ô] & _
[Ô]chkDiaTreinoQua.CheckState, chkDiaTreinoQui.CheckState, chkDiaTreinoSex.CheckState,[Ô] & _
[Ô]chkDiaTreinoSab.CheckState, chkDiaTreinoDom.CheckState, [txt-color=#e80000]...[/txt-color])[Ô])
Retire isto e tente novamente.
ABREU 03/04/2017 17:13:40
#472968
1) No print estão assinalados em vermelho os campos que recebem os valores vindos do RadioButton e do CheckBox (Tabela e Formulário).
2) [Ô]Using cmd ...[Ô] é o comando de inserção dos valores do RadioButton e do CheckBox na tabela PF001.
3) SexoMasculino e SexoFeminino são os campos cujos valores vêm do RadioButton, e DiaTreinoSeg até DiaTreinoDom são os campos cujos valores vêm do CheckBox. São esses valores que eu estou em dificuldade de salvar no banco de dados.
FFCOUTO 03/04/2017 17:18:03
#472970
Resposta escolhida
ABREU, boa tarde.
Vendo a imagem do seu banco de dados, aconselho a você fazer algumas melhorias pois na minha opinião sua tabela não está bem modelada. Por exemplo, não há necessidade de você ter 2 campos para o sexo. Basta apenas 1. E você informaria M ou F ou O (outro) ou até mesmo 0, 1 ou 2. Bastando para isso codificar uma rotina para converter tais valores conforme a opção que o usuário escolhesse.

Da mesma forma, isso se aplica ao campo DiaTreino. Use soma de potências de 2 e assim você terá um único valor para representar todas as opções que o usuário escolheu. Como funciona: basta representar para cada opção um valor do tipo 2^n, onde n é o número da opção. Assim você tem:

segunda: 2^0 = 1
terça: 2^1 = 2
quarta: 2^2 = 4
quinta: 2^3 = 8
sexta: 2^4 = 16
sábado: 2^5 = 32
domingo: 2^6 = 64

Se o usuário selecionou segunda e terça, basta você somar os valores, assim você vai gravar 3 no banco de dados. Na hora de recuperar o valor você apenas precisa fazer uma operação binário com o operador AND e saberá se o valor está ou não selecionado. Exemplo:

chkSegunda.Checked = (3 AND 1)
chkTerca.Checked = (3 AND 2)

Dica, faça uma função para calcular/retornar os valores que será bem mais fácil.

Se tiver dúvidas, faça contato.

OMAR2011 03/04/2017 17:51:38
#472972
Então você postou seu código errado.
Isto não da certo devido ao número de campos e valores. 12 campos e 12 Valores
Não tem sentido[txt-color=#e80000] ...[/txt-color] .
Retire isto.Nunca vi ninguém com este tipo de Insert.
ABREU 04/04/2017 03:32:21
#472974
Valeu FFCOUTO.
Essa dinâmica é que me faltava.
Com a sua orientação, resolvi o meu problema.
Muito obrigado.
Fico devendo-lhe essa!
NICKOSOFT 04/04/2017 05:34:48
#472975
boa madrugada....
exatamente abreu, segue a dica do FFCOUTO, vc reduz todos os campos do banco de dados a 2 campos, simples de texto mesmo, e neles consegue armazenar a informação, fazendo o inverso da conversão de inclusão, vc pode visualizar em tela a informação registrada na tabela....
aqui
cmd.Parameters.AddWithValue([Ô]@Sexo[Ô], tipo)
vc pode fazer a verificação do campo marcado e armazenar nessa variável tipo

na hora de visualizar a tela, vc recupera o q tem na tabela e verifica
if tb.sexo = [Ô]feminino[Ô] then
rbtsexofeminino.checked=true

terão modificações conforme trabalhe na inclusão e recuperação das informações....
ia falar sobre separa-los, mas já vi q estão em grupos separados, então esta tranquilo....
ABREU 04/04/2017 10:41:15
#472980
Obrigado a todos que me ajudaram.
Tópico encerrado , respostas não são mais permitidas