none
Erro de Relacionamento entre tabelas RRS feed

  • 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
    quarta-feira, 12 de fevereiro de 2014 21:59

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.

    terça-feira, 18 de fevereiro de 2014 17:50
  • 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

    quinta-feira, 20 de fevereiro de 2014 02:17
  • 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

    quinta-feira, 20 de fevereiro de 2014 02:23