Ir para o conteúdo
MaxHelmer

Tabela relacionada

Mensagens Recomendadas

MaxHelmer

Olá! Sou novo no fórum! Sou novato também como programador.

Pesquisei sobre o assunto em vários fóruns, inclusive nesse e não encontrei sobre o assunto.

É o seguinte:

Tenho 2 tabelas que se relacionam (access):

tb_usuario tb_departamento

cod_usuario cod_departamento

nome_usuario nome_departamento

cod_departamento

quando carrego os dados em meu form do vb.net numa textbox eu carrego apenas o cod_departamento (chave estrangeira de tb_departamento). Como eu faço para trazer para o form os dados da tebela relacionada através do cod_departamento (chave estrangeira da tb_departamento)?

Espero ter me expressado bem.

Desde já agradeço a ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MaxHelmer

Obrigado pela recepção!

Bom, o código resumido seria esse:

Public Class frmCadUsuario

Dim acod_usuario(1) As Integer

Dim anome(1) As String

Dim acod_departamento(1) As Integer

Dim acod_cargo(1) As Integer

Dim alogin(1) As String

Dim asenha(1) As String

Dim vmodo As String = "X"

Private Sub frmCadUsuario_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

carrega_usuarios()

desab_campos()

End Sub

Private Sub carrega_usuarios()

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 = "SELECT * FROM tb_usuario ORDER BY nome"

Dim vLeitor As OleDb.OleDbDataReader

vLeitor = selcom.ExecuteReader()

Dim c As Integer = 0

dgvUsuarios.Rows.Clear()

Do While vLeitor.Read

c = c + 1

ReDim Preserve anome©

ReDim Preserve acod_usuario©

ReDim Preserve acod_departamento©

ReDim Preserve acod_cargo©

ReDim Preserve alogin©

ReDim Preserve asenha©

anome© = vLeitor("nome")

acod_usuario© = vLeitor("cod_usuario")

acod_departamento© = vLeitor("cod_departamento")

acod_cargo© = vLeitor("cod_cargo")

alogin© = vLeitor("login")

asenha© = vLeitor("senha")

dgvUsuarios.Rows.Add(anome©, acod_departamento©, acod_cargo©)

Loop

conect.Close()

Catch ex As Exception

MessageBox.Show("Erro ao carregar os dados!" & vbCrLf & ex.Message, "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

txtRegistros.Text = acod_usuario.Length - 1

End Sub

Private Sub dgvUsuarios_Selectionchanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgvUsuarios.Selectionchanged

carrega_campos()

End Sub

Private Sub carrega_campos()

Dim ind As Integer = dgvUsuarios.CurrentRow.Index + 1

txtNome.Text = anome(ind)

cmbDepartamento.Text = acod_departamento(ind)

cmbCargo.Text = acod_cargo(ind)

txtLogin.Text = alogin(ind)

txtSenha.Text = asenha(ind)

chkAtivo.Checked = aAtivo(ind)

txtDataCadasto.Text = adata_cadastro(ind)

txtUsuarioCadastrou.Text = ausuario_cadastro(ind)

txtDataUltimoAcesso.Text = adata_ultimo_acesso(ind)

txtHoraUltimoAcesso.Text = ahora_ultimo_acesso(ind)

End Sub

Já observei que no combobox tenho como fazer facilmente utilizando o "Data Binding mode". O problema é como faço para fazer o mesmo em uma textbox ou no meu data grid?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Podes usar o seguinte query de SQL para ler os dados das duas tabelas

select u.*, d.nome_departamento from tb_usuario as u left join tb_departamento as d on d.cod_departamento = u.cod_departamento

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MaxHelmer

Podes usar o seguinte query de SQL para ler os dados das duas tabelas

select u.*, d.nome_departamento from tb_usuario as u left join tb_departamento as d on d.cod_departamento = u.cod_departamento

Amigo nelsonr!

Sua informação resolveu meu problema.

Se eu quiser inserir mais uma tabela. Exemplo:

tb_usuario tb_departamento tb_cargo

cod_usuario cod_departamento cod_cargo

nome_usuario nome_departamento nome_cargo

cod_departamento

cod_cargo

Como ficaria o query de SQL? Com essa informação vou poder seguir em frente graças a você.... desde já agradeço

Espero poder ajudar outros assim como você me ajudou. Abraços

Editado por MaxHelmer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Podia ser algo assim:

SELECT tb_usuario.*, tb_departamento.nome_departamento, tb_cargo.nome_cargo
FROM tb_cargo INNER JOIN (tb_departamento INNER JOIN tb_usuario ON tb_departamento.cod_departamento = tb_usuario.cod_departamento) ON tb_cargo.cod_cargo = tb_usuario.cod_cargo

A forma mais facil de fazer estes querys é no Access, acederes ao Query Design (não sei o nome em PT).

Nessa opção, basta adicionares as tabelas que pretendes fazer o query, e unir os campos chave (arrastas o campo de uma tabela para cima do equivalente noutra tabela).

Depois selecionas quais os campos de cada tabela que pretendes visualizar no resultado.

O Access gera o SQL necessário

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
MaxHelmer

Podia ser algo assim:

SELECT tb_usuario.*, tb_departamento.nome_departamento, tb_cargo.nome_cargo
FROM tb_cargo INNER JOIN (tb_departamento INNER JOIN tb_usuario ON tb_departamento.cod_departamento = tb_usuario.cod_departamento) ON tb_cargo.cod_cargo = tb_usuario.cod_cargo

A forma mais facil de fazer estes querys é no Access, acederes ao Query Design (não sei o nome em PT).

Nessa opção, basta adicionares as tabelas que pretendes fazer o query, e unir os campos chave (arrastas o campo de uma tabela para cima do equivalente noutra tabela).

Depois selecionas quais os campos de cada tabela que pretendes visualizar no resultado.

O Access gera o SQL necessário

nelsonr, desta forma ficou ainda mais fácil o entendimento. Obrigado pela ajuda! :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.