none
Deletar duplicidade RRS feed

  • Pergunta

  • Boa tarde,

    eu estou algum tempo procurando respostas no google mas não consegui ter sucesso. Eu quero simplesmente realizar uma consulta no banco através do visual basic e verificar se existe a informação na tabela1, caso exista ele não adiciona aquela linha.

    Tabela 1 
    Chave = Id

    Tabela 2

    Chave = Id

    Caso Tabela1.Id = Tabela2.Id não adciiona a informação

    quinta-feira, 11 de setembro de 2014 15:12

Todas as Respostas

  • Shiiro, elabore um pouco mais para eu te dar uma resposta melhor, mas basicamente o que você tem que fazer é conectar ao banco de dados (que estou assumindo ser o SQLSERVER), fazer uma query do ID da tabela 1, se sim, fazer uma query do ID da tabela 2 e retornar verdadeiro ou falso se ambos os valores existem.

    Se for isso, é simples:

    Friend Function ExecuteQuery(ByRef Con As System.Data.SqlClient.SqlConnection, ByRef Query As String) As System.Data.SqlClient.SqlDataReader
        Dim command As System.Data.SqlClient.SqlCommand = Con.CreateCommand()
        command.CommandText = Query
        Try
            Dim Reader As System.Data.SqlClient.SqlDataReader = command.ExecuteReader()
            If Reader IsNot Nothing Then
                If Not Reader.Read() Then
                    Reader.Close()
                    Reader = Nothing
                End If
            End If
            Return Reader
        Catch
            Return Nothing
        End Try
    End Function
    
    Friend Function ExistsOn(ByRef Con As System.Data.SqlClient.SqlConnection, ByRef Table As String, ByRef Field As String, ByRef Value As String) As Integer
        Dim Reader As System.Data.SqlClient.SqlDataReader = ExecuteQuery("SELECT TOP 1" + Field + " FROM " + Table + " WHERE " + Field + " = " + Value)
        If Reader IsNot Nothing Then
            Dim Id As Integer = CInt(Reader.Item(FieldId))
            Reader.Close()
            Return DevId
        Else
            Return 0
        End If
    End Function

    Com a função "ExistsOn(Con, Table, Field, Value)" você verifica se existe determinado valor (de determinado campo) existe ou não na tabela.

    Ai basta você fazer:

    Public Function VerifyTables(ByRef Con As System.Data.SqlClient.SqlConnection, ByRef Table1 As String, ByRef Table2 As String, ByRef Field1 As String, ByRef Field2 As String, ByRef Value As String) As Boolean
        Dim Tb1 As Boolean = ExistsOn(Con, Table1, Field1, Value)
        Dim Tb2 As Boolean = ExistsOn(Con, Table2, Field2, Value)
        Return (Tb1 And Tb2)
    End Function

    Ou algo assim...

    quinta-feira, 11 de setembro de 2014 15:31
  • PS: Shiirohige = "Barba Branca"? Onepiece? rsrs
    quinta-feira, 11 de setembro de 2014 15:34
  • Obrigado por estar ajudando.

    Eu utilizo o banco access, segue o processo que desenhei até o momento:

    1-Limpa tabela2(DELETE)

    2-Adiciona novas infos tabela2(INSERT)

    3- compara tabela1.ID com tabela2.ID e atualiza tabela1(UPDATE)

    Mas em alguns dias pode ocorrer de aparecer novos registros, então preciso ter um sql INSERT para adicionar.A duvida ficou aqui, pois caso eu tente utilizar somente o insert ele gera erro devido existir itens iguais na tabela 1.

    ps: Isso mesmo rs =D

    quinta-feira, 11 de setembro de 2014 22:01
  • É... com acess ai eu preciso ver. O objeto que faz conexão não deve ser o SqlConnection e assim por diante...
    sexta-feira, 12 de setembro de 2014 20:06
  • vc sempre faz o insert primeiro e usa o comando ExecuteNonQuery, ele irá retornar 1 se conseguiu fazer o command, caso tenha falhado, por já existir,  irá retornar 0, então vc faz o update na sequencia.

    Acredito que vai resolver seu problema, sempre tente incluir primeiro, pois as chaves primárias vão barrar a duplicidade, e depois tenta o update, se falhar o insert.

    Flw...

    segunda-feira, 15 de setembro de 2014 17:01