Inquiridor
Erro de Relacionamento entre tabelas

Discussão Geral
-
Boa noite a todos!
Estou com problemas na minha aplicação especificamente no módulo clientes, visto que ontem estava tudo ok!
o codigo que estou utilizando é o seguinte:
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Data.OleDb Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Drawing.Text Imports System.Math Imports System.Windows.Forms Public Class FrmCadClien Dim tblClientes As DataTable, tblContClientes As DataTable, Conteudo() Dim lCampo As DataRow Private bsMasterClientes As New BindingSource() Private bsChildClientes As New BindingSource() Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If (m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_MOVE) OrElse (m.Msg = WM_NCLBUTTONDOWN AndAlso m.WParam.ToInt32() = HTCAPTION) Then Return Else MyBase.WndProc(m) End If End Sub Private Sub FrmCadClien_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed Me.Dispose() End Sub Private Sub frmPedidos_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim oRAngle As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height) Dim oGradientBrush As Brush = New Drawing.Drawing2D.LinearGradientBrush(oRAngle, Color.LightGreen, Color.Black, Drawing.Drawing2D.LinearGradientMode.Vertical) e.Graphics.FillRectangle(oGradientBrush, oRAngle) Exit Sub End Sub Private Sub FmCadClien_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try gMensagem = "Carregando as Grids Iniciais" DtGridCliente.AutoGenerateColumns = False DtGridContCliente.AutoGenerateColumns = False DtGridCliente.DataSource = bsMasterClientes DtGridContCliente.DataSource = bsChildClientes gMensagem = "Coletando Dados para carregar o Form" Carrega_Dados() gMensagem = "Passando campos para controles" txtNomeRazaoSocial.DataBindings.Add("Text", Me.bsMasterClientes, "RazaoSocialNome") TxtEnd.DataBindings.Add("Text", Me.bsMasterClientes, "Endereco") TxtNumCasa.DataBindings.Add("Text", Me.bsMasterClientes, "NumCasa") TxtAp.DataBindings.Add("Text", Me.bsMasterClientes, "Apartamento_Casa") dtpDataCadastro.DataBindings.Add("Value", Me.bsMasterClientes, "DataCadastro") TxtBloco_Quadra.DataBindings.Add("Text", Me.bsMasterClientes, "Bloco_Quadra") txtBairroCli.DataBindings.Add("Text", Me.bsMasterClientes, "Bairro") mskCepCli.DataBindings.Add("Text", Me.bsMasterClientes, "CEP") txtReferencia_Observ.DataBindings.Add("Text", Me.bsMasterClientes, "Referencia_Observ") mskNascimento.DataBindings.Add("text", Me.bsMasterClientes, "Nasc_Dia_Mes") mskUltimaCompra.DataBindings.Add("Text", Me.bsMasterClientes, "UltimaCompra") Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO: Abrindo Form") End Try End Sub Private Sub Carrega_Dados() Dim data As New DataSet() Try data.Locale = System.Globalization.CultureInfo.InvariantCulture If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Adicionar dados da tabela Relacao para o DataSet." gSQL = "Select RazaoSocialNome, Endereco, NumCasa, Bloco_Quadra, Apartamento_Casa, Referencia_Observ, CEP, Bairro, DataCadastro, Nasc_Dia_Mes, Codigo, " _ & " FlagCliente, FlagPessoaFisica, UltimaCompra from Relacao" Dim MasterDataAdapter As New OleDb.OleDbDataAdapter(gSQL, gCN) MasterDataAdapter.TableMappings.Add("Table", "Relacao") MasterDataAdapter.Fill(data, "Relacao") gMensagem = "Adicionar dados da tabela RelacaoContato para o DataSet." gSQL1 = "Select Telefone, Email, Codigo from RelacaoContato" Dim DetailsDataAdapter As New OleDb.OleDbDataAdapter(gSQL1, gCN) DetailsDataAdapter.Fill(data, "RelacaoContato") gMensagem = "Estabelecer uma relação entre as duas tabelas." Dim Relação As New DataRelation("Relacao_RelacaoContato", data.Tables("Relacao").Columns("Codigo"), data.Tables("RelacaoContato").Columns("Codigo"), True) data.Relations.Add(Relação) gMensagem = "Vincular o conector de dados mestre para a tabela Relacao." bsMasterClientes.DataSource = data bsMasterClientes.DataMember = "Relacao" gMensagem = "Vincular o conector de dados detalhes para o conector de dados mestre, " & vbNewLine _ & "usando o nome DataRelation para filtrar as informações no " & vbNewLine _ & "Detalhes tabela com base na linha atual na tabela mestre." bsChildClientes.DataSource = bsMasterClientes bsChildClientes.DataMember = "Relacao_RelacaoContato" gMensagem = "Conectar Navegador aos Dados" bnClientes.BindingSource = bsMasterClientes Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO: Relacionamento de Tabelas") End Try End Sub Private Sub btnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFechar.Click Me.Close() End Sub End Class
E o erro que esta dando agora:
A quem puder ajudar-me, agradeço imensamente, obrigado!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
- Tipo Alterado Giovani Cr segunda-feira, 3 de março de 2014 14:03
Todas as Respostas
-
Bom dia DJHasselmann,
Você mencionou "Visto que ontem estava tudo bem".
Foi feita alguma modificação que justifique esse problema?
Caso tenha encontrado alguma solução por favor poste a mesma também para fecharmos a sua Thread.
Att,
Giovani Cruzara – Microsoft Contingent Staff
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
Msdn Community Support
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde. -
Boa noite Giovani, achei sim, tive que filtrar os dados da tabela "Relacontato", ou seja criei uma nova somente com os dados que tinham relacionamento com a tabela "Relacao" como segue o código abaixo:
Private Sub Criar_Tabela() Try If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Criando a Tabela temporária" gSQL = "Select Identificação, Codigo, CodContato, Descricao, DDD, Telefone, Ramal, EMail, Fax, Obs " _ & "INTO tbTMPRelContact From RelacaoContato Where 1 = 0" gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader gDtR.Close() If gCN.State = ConnectionState.Open Then gCN.Close() gCN.Open() gMensagem = "Selecionando Dados" gSQL = "Select RLCON.Codigo as CodCon, RLCON.CodContato as CodCont, RLCON.Descricao as Descri, RLCON.DDD as DDDCont, RLCON.Telefone as Fone, RLCON.Ramal as RaCont, RLCON.Email as E_M, RLCON.Fax as FaxCont, RLCON.Obs as ObsCont, RLCLI.Codigo as CodCli " _ & "From RelacaoContato as RLCON, Relacao as RLCLI Where RLCON.Codigo = RLCLI.Codigo order by RLCON.Codigo asc" gCMD = New OleDbCommand(gSQL, gCN) gDtR = gCMD.ExecuteReader If gDtR.HasRows Then gMensagem = "Inserindo na Tabela Temp" Do While gDtR.Read gSQL1 = "INSERT INTO tbTMPRelContact(Codigo, CodContato, Descricao, DDD, Telefone, Ramal, EMail, Fax, Obs) " _ & "VALUES(" & gDtR.Item("CodCon") & ", '" & gDtR.Item("CodCont") & "','" & gDtR.Item("Descri") & "','" _ & gDtR.Item("DDDCont") & "','" & gDtR.Item("Fone") & "','" & gDtR.Item("RaCont") & "','" & gDtR.Item("E_M") & "','" _ & gDtR.Item("FaxCont") & "','" & gDtR.Item("ObsCont") & "')" gCMD = New OleDbCommand(gSQL1, gCN) gCMD.ExecuteNonQuery() Loop gDtR.Close() gCMD.Dispose() gSQL1 = Nothing Else MsgBox("Não há registros na Tabela", MsgBoxStyle.Critical, "ERRO: Consulta sem dados") Exit Sub End If Exit Sub Catch ex As Exception MsgBox(ex.Message & vbNewLine & gMensagem, MsgBoxStyle.Critical, "ERRO: Criando e Povoando Nova Table") End Try End Sub
E logo após o feito renomei a tabela criada com o nome da tabela já existente no BD, e foi esta a solução.
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET
-
Giovani, outra coisa estou com dificuldades para Inserir novo e apos salvar os dados utilizando o codigo do meu primeiro post, voce tem por um acaso alguma dica ou exemplo o qual eu possa utilizar para realizar tal tarefa?
Obrigado!
Att.
Dilson J. Hasselmann Desenvolvedor VB.NET