none
Duplicados en mi data griview RRS feed

  • Pregunta

  • Hola espero pueda ayudarme , les comento mi problematica Tengo una base de datos en sql la cual se llena con un boton el cual lee un archive excel y llena la base de datos lo cual todo perfecto pero cada vez que da al boton y se carga el excel se duplican mis datos en sql , lo cual va hacienda mas grande la base de datos lo que quiero hacer es que no se dupliquen esos datos en la base atos este es el codigo donde export los datos

    Sub

    importarExcel(ByValtabla AsDataGridView)

           

    DimmyFileDialog AsNewOpenFileDialog()

           

    DimxSheet AsString= ""


           

    WithmyFileDialog

                .Filter =

    "Excel Files |*.xlsx"


                .Title =

    "Open File"


                .ShowDialog()

           

    EndWith


           

    IfmyFileDialog.FileName.ToString <> ""Then


               

    DimExcelFile AsString= myFileDialog.FileName.ToString

               

    Dimds AsNewDataSet

               

    Dimda AsOleDbDataAdapter

               

    Dimdt AsDataTable

               

    Dimconn AsOleDbConnection

                xSheet = InputBox(

    "Digite el nombre de la Hoja que desea importar", "Complete")

                conn =

    NewOleDbConnection(

                                 

    "Provider=Microsoft.ACE.OLEDB.12.0;"&

                                 

    "data source="& ExcelFile & "; "&                           

    "Extended Properties='Excel 12.0 Xml;HDR=Yes'")          

    Try

                 da =  NewOleDbDataAdapter("SELECT * FROM  ["& xSheet & "$]", conn)

                    conn.Open()

                    da.Fill(ds,

    "MyData")

                    dt = ds.Tables(

    "MyData")

                    tabla.DataSource = ds

                    tabla.DataMember =

    "MyData"


               

    Catchex AsException

                    MsgBox(

    "Inserte un nombre valido de la Hoja que desea importar", MsgBoxStyle.Information, "Informacion")

               

    Finally


                    conn.Close()

               

    EndTry


           

    EndIf


            MsgBox(

    "Se ha cargado la importacion correctamente", MsgBoxStyle.Information, "Importado con exito")

       

    EndSub

    miércoles, 13 de diciembre de 2017 18:26

Respuestas

  • ¿Los duplicados se encuentran en la hoja que importas desde Microsoft Excel? ¿o se producen porque al importar los datos a la base de datos no se válida previamente la existencia?

    - Si es el primer caso, quizá baste utilizar la cláusula DISTINCT en la consulta de selección que ocupas: 

    SELECT DISTINCT * FROM  ["& xSheet & "$]

    - Si es el segundo caso, restringe la inserción de las filas que ya existen en la tabla, puedes ocupar el operador EXISTS para validar la existencia.

    • Propuesto como respuesta Pablo Rubio miércoles, 13 de diciembre de 2017 20:04
    • Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:17
    miércoles, 13 de diciembre de 2017 18:36

Todas las respuestas

  • ¿Los duplicados se encuentran en la hoja que importas desde Microsoft Excel? ¿o se producen porque al importar los datos a la base de datos no se válida previamente la existencia?

    - Si es el primer caso, quizá baste utilizar la cláusula DISTINCT en la consulta de selección que ocupas: 

    SELECT DISTINCT * FROM  ["& xSheet & "$]

    - Si es el segundo caso, restringe la inserción de las filas que ya existen en la tabla, puedes ocupar el operador EXISTS para validar la existencia.

    • Propuesto como respuesta Pablo Rubio miércoles, 13 de diciembre de 2017 20:04
    • Marcado como respuesta Pablo Rubio lunes, 18 de diciembre de 2017 15:17
    miércoles, 13 de diciembre de 2017 18:36
  • Me explicarias major la segunda opcion algun ejemplo que tengas por hay gracias de antemano por tu ayuda

    viernes, 15 de diciembre de 2017 17:12
  • Por ejemplo, si estás importando los datos de los clientes tendrás que insertar sólo las filas cuyo código de cliente, por poner un nombre de columna,  no se encuentre registrado en la tabla 'Clientes', por ejemplo:

    INSERT INTO dbo.Clientes (CodCliente, RazonSocial, Direccion)
    SELECT @CodCliente, @RazonSocial, @Direccion 
    WHERE NOT EXISTS (SELECT 1 FROM dbo.Clientes WHERE CodCliente = @CodCliente)
    GO

    La idea la dejo, pero esto dependerá de como estás insertando los datos a la tabla destino, si lo haces uno a uno o en bloque, o si los datos ya existentes deberán ser actualizados (UPSERT).

    viernes, 15 de diciembre de 2017 18:05
  • Los datos estas siendo insertados desde el excel pero cada vez que digamos se agrga un campo al excel , y se vuelve a cargar ese mismo excel , se trae todos los regitros de Nuevo me explico?
    viernes, 15 de diciembre de 2017 18:37