none
Error al hacer un INSERT INTO en una tabla con un SELECT de una consulta

    Pregunta

  • Tengo un módulo para inserta los datos de una consulta en una tabla. El nombre de las tablas se lo paso como parámetros. Origen son los datos de la consulta y Copia la tabla donde cargar el resultado de dicha consulta.

    Module modCopiaTablas
    Public Sub copiaTabla(ByVal copia As String, ByVal origen As String)
    Try
    If CuentaReg(copia) > 0 Then
    Dim sql2 As String = "DELETE FROM " & copia
    Dim cmd1 As New OleDbCommand(sql2, cn)
    cmd1.ExecuteNonQuery()
    End If
    Dim sql1 As String = "INSERT INTO " & copia & " SELECT * From " & origen
    Dim cmd As New OleDbCommand(sql1, cn)
    cmd.ExecuteNonQuery()
    Finally
    close()
    End Try
    End Sub
    End Module

    Adjunto la consulta de "Origen" y la estructura de "Copia"
    En la consulta el Campo "IdOrigen" lo suprimo de las dos tablas de la consulta.
    Al ejecutar el módulo me da siempre error. ¿Puede ser por suprimir el PRIMARY KEY de la tabla principal?. 
    
    Gracias y un saludo
    jueves, 19 de enero de 2017 12:06

Respuestas

  • Si examinas con detenimiento el texto del mensaje de error, te explicara exactamente de que es de lo que se queja. Probablemente lo que debe decir es que no le estas propircionando algun campo que es obligatorio, o que no coincide algun campo de origen con los de destino, pero no acues a ciegas, asegurate de fijarte detenidamente en el texto del mensaje. Y acostumbrate a copiarlo cuando preguntes en el foro, nunca digas "me da error", escribe siempre el mensaje exacto de error completo y detallado.

    Basicamente, la regla cuando ejecutas esto:

    "INSERT INTO " & copia & " SELECT * From " & origen

    es que la tabla "copia" tiene que tener exactamente los mismos campos y en el mismo orden que la tabla origen (el nombre puede diferir, pero el tipo tiene que ser compatible), y que todos ellos tienen que ser "insertables" (por ejemplo, no puede tener un campo Identity).

    Si no se cumple esa condicion, tienes que escribir

    "INSERT INTO " & copia & "(campo1, campo2, etc) SELECT Campo1, campo2, etc From " & origen

    es decir, tienes que escribir los nombres de los campos que insertas y los nombres de los campos que lees (y logicamente omitir en ellos los que no procedan, como por ejemplo el campo Identity si lo hay).

    jueves, 19 de enero de 2017 13:57