INSERIR DADOS EM DATAGRID COM TABELA RELACIONADA

JHONATA 19/07/2011 17:00:00
#379561
Boa tarde Galera,

Gostaria da colaboração de vocês para que eu resolva uma pendencia que surgiu no meu projeto.
Estou iniciando no VB e estou fazendo um programa para inserir produtos que foram inspecionados em determinada ordem de inspeção

Montei meu cabeçalho conforme o necessario em uma tabela que chamei de tb_cabecalho e posteriormente criei outra tabela que chamei de tb_detalha_cabecalho onde vai conter meu detalhamento de produtos. Criei o banco no access (.mdb)

Fiz o relacionamento delas tudo certinho.

O que acontece... Eu não consigo fazer um grid que insira dados referente aquele cabeçalho e tambem não consigo pesquisar o cabeçalho e trazer o detalhamento correspondente no grid..
Já tentei de diversas formas, li e re-li um monte de foruns mas não consigo resolver esse problema.
Consigo inserir dados do cabeçalho no banco, porem não consigo montar o grid para que insira dados referente aquele cabeçalho. O ponto maximo que eu consegui chegar foi criar um grid que mostrava os valores, porem ele trazia todos os valores de todos os cabeçalhos...

Gostaria da ajuda de vcs...
TECLA 19/07/2011 21:01:39
#379582
Poste o que conseguiu fazer no tópico e o [Ô]ponto exato[Ô] em que está com dúvidas.
JHONATA 19/07/2011 22:22:36
#379583
Boa noite amigo. Isso é o que consegui até agora... Me desculpe caso o código esteja poluido, mas estou iniciando agora no VB.NET
Consigo buscar os cabeçalhos... Porem o Datagrid que eu monto esta trazendo todos os dados, não somente o que é referente ao cabeçalho selecionado...
Agradeço desde já pelo apoio.


Imports System.Data.OleDb
Public Class lancamento_ri
Public sComando As String
Public scodigoAux As String
Dim dtsset As DataSet
Dim AccessTeste As OleDbConnection
Dim dtaadap As OleDbDataAdapter
Dim oledbCmdBuilder As OleDbCommandBuilder
Private Sub Limpar()
TB_ri_cod.Clear()
TB_ri_op.Clear()
CB_lanc_ri_laudo.Text = [Ô][Ô]
CB_lanc_ri_produto.Text = [Ô][Ô]
MTB_ri_data.Clear()

End Sub
Private Sub ControlaBotoes(ByVal Controle As Boolean)
BT_lanc_ri_gravar.Enabled = Controle
BT_lanc_ri_sair.Enabled = Controle
BT_lanc_ri_alter.Enabled = Not Controle
BT_lanc_ri_novo.Enabled = Not Controle
BT_lanc_ri_pesq.Enabled = Not Controle

End Sub
Public Sub carregaGrid()

Dim con As String = ([Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\cq.mdb[Ô]) [ô]CBDW.accdb

AccessTeste = New OleDbConnection(con)

AccessTeste.Open()

[ô]OleDbDataAdapter tem que ser declarado ao nivel da classe e nao do metodo. tem que ser global
dtaadap = New OleDbDataAdapter([Ô]select * From tb_ri_lote[Ô], AccessTeste)

[ô]Necessário para salvar alterações na Grid
oledbCmdBuilder = New OleDbCommandBuilder(dtaadap)

dtsset = New DataSet

dtaadap.Fill(dtsset)

Me.DataGridView1.DataSource = dtsset.Tables(0)
[ô]Me.DataGridView1.DataMember = [Ô]marca[Ô]

End Sub
Public Function VerificaPendentesGrid() As Boolean

Dim LinhasModificadas As Integer = 0
Dim LinhasAdicionadas As Integer = 0
Dim LinhasDeletadas As Integer = 0

LinhasDeletadas = dtsset.Tables(0).Select([Ô][Ô], [Ô][Ô], DataViewRowState.Deleted).Length
LinhasAdicionadas = dtsset.Tables(0).Select([Ô][Ô], [Ô][Ô], DataViewRowState.Added).Length
LinhasModificadas = dtsset.Tables(0).Select([Ô][Ô], [Ô][Ô], DataViewRowState.ModifiedCurrent).Length

If (LinhasModificadas > 0 Or LinhasAdicionadas > 0 Or LinhasDeletadas > 0) Then
Return True
Else
Return False
End If

End Function
Private Sub lancamento_ri_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
[ô]TODO: This line of code loads data into the [ô]DataSet_Laudo.tb_laudo[ô] table. You can move, or remove it, as needed.
Me.Tb_laudoTableAdapter.Fill(Me.DataSet_Laudo.tb_laudo)
[ô]TODO: This line of code loads data into the [ô]DataSet_Produto.tb_produto[ô] table. You can move, or remove it, as needed.
Me.Tb_produtoTableAdapter.Fill(Me.DataSet_Produto.tb_produto)
[ô]TODO: This line of code loads data into the [ô]DataSet_Relac_Ri_Lote.tb_ri[ô] table. You can move, or remove it, as needed.
Me.Tb_riTableAdapter.Fill(Me.DataSet_Relac_Ri_Lote.tb_ri)
[ô]TODO: This line of code loads data into the [ô]DataSet_Relac_Ri_Lote.tb_ri_lote[ô] table. You can move, or remove it, as needed.
Me.Tb_ri_loteTableAdapter.Fill(Me.DataSet_Relac_Ri_Lote.tb_ri_lote)



CB_lanc_ri_laudo.Enabled = False
CB_lanc_ri_produto.Enabled = False
TB_ri_cod.Enabled = False
TB_ri_op.Enabled = False
MTB_ri_data.Enabled = False
[ô]GroupBox2.Enabled = False
BT_lanc_ri_gravar.Enabled = False

carregaGrid()


End Sub

Private Sub BT_lanc_ri_novo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_lanc_ri_novo.Click

sComando = [Ô]inserir[Ô]
[ô]TB_ri_cod.Enabled = True
TB_ri_op.Enabled = True
CB_lanc_ri_laudo.Enabled = True
CB_lanc_ri_produto.Enabled = True
MTB_ri_data.Enabled = True

ControlaBotoes(True)

Limpar()

Dim conn As New OleDbConnection()
conn.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\cq.mdb[Ô]

Dim cmd As OleDbCommand = conn.CreateCommand

cmd.CommandText = [Ô]select max(cod_ri) + 1 from tb_ri[Ô]

conn.Open()

Dim dbR As OleDbDataReader = cmd.ExecuteReader()

If dbR.Read() Then
TB_ri_cod.Text = dbR(0).ToString.PadLeft(5, [Ô]0[Ô])
End If

End Sub

Private Sub BT_lanc_ri_sair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_lanc_ri_sair.Click
Close()
End Sub

Private Sub BT_lanc_ri_gravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_lanc_ri_gravar.Click

Dim conn As New OleDbConnection()
conn.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\cq.mdb[Ô]
Dim cmd As OleDbCommand = conn.CreateCommand
cmd.CommandText = [Ô]select tb_produto.cod_produto, tb_produto.descricao_produto FROM (tb_produto)where tb_produto.descricao_produto=[ô][Ô] & CB_lanc_ri_produto.Text & [Ô][ô][Ô]

conn.Open()

Dim variavel As OleDbDataReader = cmd.ExecuteReader()
[ô]Dim recebe_valor As String

If variavel.Read() Then
Label3.Text = variavel(0).ToString
End If



conn.Close()

MTB_ri_data.Text.ToString.PadLeft(10, [Ô]0[Ô])

If TB_ri_op.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Digite a OP[Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
TB_ri_op.Focus()
Return
ElseIf CB_lanc_ri_produto.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Selecione o produto[Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
CB_lanc_ri_produto.Focus()
Return
ElseIf CB_lanc_ri_laudo.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Selecione o laudo[Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
CB_lanc_ri_laudo.Focus()
Return
ElseIf MTB_ri_data.Text = [Ô][Ô] Then
MessageBox.Show([Ô]Informe a data[Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
MTB_ri_data.Focus()
Return
End If

If sComando = [Ô]inserir[Ô] Then
cmd.CommandText = [Ô]Insert into tb_ri (cod_ri, cod_produto, ordem_producao, data_producao, laudo ) [Ô] & _
[Ô]Values ([ô][Ô] & TB_ri_cod.Text & [Ô][ô],[ô][Ô] & Label3.Text & [Ô][ô],[ô][Ô] & TB_ri_op.Text & [Ô][ô],[ô][Ô] & MTB_ri_data.Text & [Ô][ô],[ô][Ô] & CB_lanc_ri_laudo.Text & [Ô][ô])[Ô]

ElseIf sComando = [Ô]alterar[Ô] Then
cmd.CommandText = [Ô]update tb_ri set ordem_producao=[ô][Ô] & TB_ri_op.Text & [Ô][ô], cod_produto=[ô][Ô] & Label3.Text & [Ô][ô], data_producao=[ô][Ô] & MTB_ri_data.Text & [Ô][ô], laudo=[ô][Ô] & CB_lanc_ri_laudo.Text & [Ô][ô][Ô] & _
[Ô]where cod_ri=[ô][Ô] & TB_ri_cod.Text & [Ô][ô][Ô]

End If

Try
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
Catch erro As Exception
MsgBox([Ô]Erro [Ô] & vbCrLf & erro.ToString, MsgBoxStyle.Critical, [Ô]Erro[Ô])
End Try

ControlaBotoes(False)
BT_lanc_ri_sair.Enabled = True

sComando = [Ô][Ô]
TB_ri_op.Enabled = False
MTB_ri_data.Enabled = False
CB_lanc_ri_laudo.Enabled = False
CB_lanc_ri_produto.Enabled = False
GroupBox2.Enabled = True

End Sub

Private Sub BT_lanc_ri_pesq_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_lanc_ri_pesq.Click
pesquisa_ri.Show()
End Sub

Private Sub BT_lanc_ri_alter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_lanc_ri_alter.Click

ControlaBotoes(True)
sComando = [Ô]alterar[Ô]
CB_lanc_ri_laudo.Enabled = True
MTB_ri_data.Enabled = True

End Sub
Private Sub lancamento_ri_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing

Dim result As DialogResult

If (VerificaPendentesGrid() = True) Then
result = MessageBox.Show([Ô]Existem registos pendentes, pretendes gravá-los?[Ô], [Ô]Grid[Ô], MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If (result = DialogResult.Yes) Then
dtaadap.Update(dtsset.Tables(0))
End If

End If

End Sub
End Class
JHONATA 20/07/2011 23:24:43
#379647
Galera, acertei o codigo, agora ele ta trazendo de acordo com o codigo do cabeçalho... só que não to conseguindo fazer gravar as alterações:

Public Sub carregaGrid()

Dim da As OleDbDataAdapter
Dim ds As DataSet

Dim myConnectionString As String = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\cq.mdb[Ô]

Dim connection As New OleDbConnection(myConnectionString)

Dim query As String = [Ô]SELECT cod_ri, lote_ri, peso_ri FROM tb_ri_lote WHERE cod_ri = [ô][Ô] & TB_ri_cod.Text & [Ô][ô][Ô]

da = New OleDbDataAdapter(query, connection)

ds = New DataSet

da.Fill(ds, [Ô]rilancadas[Ô])

Me.DataGridView1.DataSource = ds.Tables([Ô]rilancadas[Ô])

connection = Nothing

End Sub
Tópico encerrado , respostas não são mais permitidas