MaxHelmer Posted September 2, 2013 at 01:47 PM Report #523179 Posted September 2, 2013 at 01:47 PM (edited) Olá pessoal! Venho pedir-lhes mais uma vez a vossa preciosa ajuda. Vi que no fórum existe algumas dúvidas relacionadas, mas criei um novo tópico por se tratar de relacionamentos (N:N). Tenho 3 tabelas relacionadas no access (N:N): tb_professor tb_juncao tb_disciplina cod_professor cod_professor cod_disciplina nome_professor cod_disciplina nome_disciplina Criei o relacionamento desta forma de acordo com o que pesquisei pela internet. Observe que um professor pode lecionar várias diciplinas, assim como uma disciplina pode ser lecionada por vários professores ao mesmo tempo. (muitos para muitos). Acho que até aí estou entendendo perfeitamente. Para gravar no banco de dados, atualmente tenho feito uma query assim: "INSERT INTO tb_professor ( nome ) VALUES ( txtNome.Text.Trim )" O meu problema atual é com a "query sql" que vou utilizar na hora de gravar no banco de dados. Supondo por exemplo que eu um professor lecione (matemática e Química). Como seria essa query sql? Forte abraço para os irmãos lusitanos. Edited September 2, 2013 at 01:48 PM by MaxHelmer
nelsonr Posted September 2, 2013 at 01:58 PM Report #523186 Posted September 2, 2013 at 01:58 PM Tens de ter o codigo do professor e disciplinas, depois fazes algo assim: Imagina que o professor tem o codigo 1, a disciplina matematica tem o codigo 1 e a disciplina quimica tem o codigo 2 -- Inserir disciplina de matematica para o professor INSERT INTO tb_juncao (cod_professor, cod_disciplina) VALUES (1, 1) -- Inserir disciplina de quimica para o professor INSERT INTO tb_juncao (cod_professor, cod_disciplina) VALUES (1, 2)
MaxHelmer Posted September 2, 2013 at 02:19 PM Author Report #523189 Posted September 2, 2013 at 02:19 PM Tens de ter o codigo do professor e disciplinas, depois fazes algo assim: Imagina que o professor tem o codigo 1, a disciplina matematica tem o codigo 1 e a disciplina quimica tem o codigo 2 -- Inserir disciplina de matematica para o professor INSERT INTO tb_juncao (cod_professor, cod_disciplina) VALUES (1, 1) -- Inserir disciplina de quimica para o professor INSERT INTO tb_juncao (cod_professor, cod_disciplina) VALUES (1, 2) Compreendi, mas nesse caso eu estou cadastrando um professor novo, onde eu vou precisar salvar no BD do Access na tb_professor uma string que está em uma Textbox e na tb_juncao o cod_professor e cod_disciplina. eu posso fazer isso na mesma query ou vou precisar acessar o banco separadamente? Pelo que entendo, como o professor ainda não foi cadastrado e não foi gerado um código (autoincremental) no BD eu não posso gravar na tb_juncao o cod_professor e o cod_disciplina. Estou certo?
nelsonr Posted September 2, 2013 at 02:26 PM Report #523192 Posted September 2, 2013 at 02:26 PM Inseres o professor na tabela de professores. De seguida, tendo o codigo do professor inseres nessa tabela de juncao, para definir as disciplinas
MaxHelmer Posted September 2, 2013 at 08:53 PM Author Report #523214 Posted September 2, 2013 at 08:53 PM (edited) Inseres o professor na tabela de professores. De seguida, tendo o codigo do professor inseres nessa tabela de juncao, para definir as disciplinas nelsonr! Decidi fazer outro form onde vou tratar apenas o relacionamento entre professores e disciplina, assim não terei mais problemas relacionados ao código do professor. No entanto, estou tendo outro problema. As disciplinas que o professor leciona estão em uma listbox (ex.: Matemática, História). o código do professor é selecionado do datagridview. Veja no código abaixo: If vmodo = "I" Then Dim cs As String = My.Settings.MBSoftGestaoEducacionalConnectionString Dim conect As New OleDb.OleDbConnection conect.ConnectionString = cs Try conect.Open() Dim selcom As New OleDb.OleDbCommand selcom.Connection = conect selcom.CommandText = "INSERT INTO tb_professor_disciplina ( cod_professor, cod_disciplina ) " & _ "VALUES ( '" & acod_professor(dgvProfessor.CurrentRow.Index + 1) & "', '" & lsbB.SelectedValue & "' )" If selcom.ExecuteNonQuery() Then MsgBox("Disciplinas/Professores incluidos com sucesso!") Else MsgBox("Erro! Disciplinas/Professores não incluidos!") End If conect.Close() Catch ex As Exception MessageBox.Show("Erro de gravação de dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try desab_campos() carrega_professores() End If End Sub Está a aparecer uma mensagem: "Tipos de dados incompatível na expressão de critério." Acredito ser devido ao "lsbB.SelectedValue" onde "lsbB" é o nome da listbox. Como posso fazer esse INSERT? Edited September 2, 2013 at 09:11 PM by thoga31 GeSHi - alterado para a LP correcta
nelsonr Posted September 2, 2013 at 09:20 PM Report #523217 Posted September 2, 2013 at 09:20 PM Boas, no listbox que propriedades preencheste ? DisplayMember e ValueMember? Faz debug e vê o conteúdo do SelectedValue dessa listbox.
MaxHelmer Posted September 2, 2013 at 09:42 PM Author Report #523224 Posted September 2, 2013 at 09:42 PM Boas, no listbox que propriedades preencheste ? DisplayMember e ValueMember? Faz debug e vê o conteúdo do SelectedValue dessa listbox. Na listbox eu preenchi com o Displaymember (ex.: Matemática, História...) Fiz o debug e observei duas coisas: Primeira: se eu não selecionar alguma Disciplina no listbox no debug aparece ("nothing") Segundo: se eu seleciono uma matéria no textbox no debug aparece o nome da disciplina e não o código dela.
bioshock Posted September 2, 2013 at 09:47 PM Report #523226 Posted September 2, 2013 at 09:47 PM Talvez: ListBox1.SelectedIndices(0).Item(0).ToString() https://wiki.portugal-a-programar.pt/dev_net/vb.net/access/
nelsonr Posted September 2, 2013 at 09:51 PM Report #523228 Posted September 2, 2013 at 09:51 PM Experimenta associar o ValueMember ao campo com o código da disciplina
MaxHelmer Posted September 3, 2013 at 07:47 PM Author Report #523368 Posted September 3, 2013 at 07:47 PM Amigos! Tentei fazer da seguinte maneira: For ind = 0 To lsbB.Items.Count - 1 selcom.CommandText = "INSERT INTO tb_professor_disciplina ( cod_professor, cod_disciplina ) " & _ "VALUES ( '" & acod_professor(dgvProfessor.CurrentRow.Index + 1) & "', '" & lsbB.Items(ind).selectedvalue & "' )" Next ind Mais um erro está aparecendo: "membro público 'selectedvalue' no tipo 'String' não encontrado" Experimenta associar o ValueMember ao campo com o código da disciplina Como seria essa associação?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now