Jump to content
MaxHelmer

INSERT INTO em tabelas relacionadas N:N

Recommended Posts

MaxHelmer

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 by MaxHelmer

Share this post


Link to post
Share on other sites
nelsonr

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)

Share this post


Link to post
Share on other sites
MaxHelmer

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?

Share this post


Link to post
Share on other sites
nelsonr

Inseres o professor na tabela de professores.

De seguida, tendo o codigo do professor inseres nessa tabela de juncao, para definir as disciplinas

Share this post


Link to post
Share on other sites
MaxHelmer

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 by thoga31
GeSHi - alterado para a LP correcta

Share this post


Link to post
Share on other sites
nelsonr

Boas,

no listbox que propriedades preencheste ? DisplayMember e ValueMember?

Faz debug e vê o conteúdo do SelectedValue dessa listbox.

Share this post


Link to post
Share on other sites
MaxHelmer

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.

Share this post


Link to post
Share on other sites
MaxHelmer

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?

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.