Foros del Web » Programando para Internet » ASPX (.net) »

problema al hacer un insert

Estas en el tema de problema al hacer un insert en el foro de ASPX (.net) en Foros del Web. Hola. Me estoy volviendo loco intentando descubrir que hago mal. A través de asp me conecto a una base de datos access e intento hacer ...
  #1 (permalink)  
Antiguo 03/02/2010, 03:11
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Exclamación problema al hacer un insert

Hola. Me estoy volviendo loco intentando descubrir que hago mal. A través de asp me conecto a una base de datos access e intento hacer inserts. En el código adjunto, la sentencia de la línea 11 y 12 funcionan correctamente, pero cuando hace la de las líneas 31 y 32 sale este error:

Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el índice, clave principal o relación. Cambie los datos en el campo o los campos que contienen datos duplicados, quite el índice o vuelva a definir el índice para permitir entradas duplicadas e inténtelo de nuevo.

En access, he quitar las relaciones que tenía. Las tablas son asi:



El código es este


Código ASP:
Ver original
  1. '-------------Inserts
  2.         For i = 0 To CheckBoxList1.Items.Count - 1
  3.             aleatorio = CLng((100 - 999) * Rnd() + 999)
  4.             IDsistemas = Date.Now.Day & "/" & Date.Now.Month & "/" & Date.Now.Year & "-" & Date.Now.Hour & ":" & Date.Now.Minute & ":" & Date.Now.Second & "." & Date.Now.Millisecond & "&" & aleatorio
  5.  
  6.             If CheckBoxList1.Items(i).Selected Then
  7.                 MisDatos = New OleDbDataAdapter("SELECT ID FROM tblEquipos where Nombre = '" & CheckBoxList1.Items(i).Text & "'", Miconexion)
  8.                 MiTabla = New DataTable
  9.                 MisDatos.Fill(MiTabla)
  10.  
  11.                 sql = "INSERT INTO tblMantenimientoSistemas (ID, IDusuario, IDequipo, Fecha, Estado, IDtipoSistemas)" & _
  12.                 "VALUES ('" & IDsistemas & "'," & IDusuario & "," & MiTabla(0).Item("ID") & ",'" & fecha & "','Pendiente'," & IDtipoSistema & ")"
  13.  
  14.                 'MsgBox(sql)
  15.                 Dim objCmd As New OleDbCommand(sql, Miconexion)
  16.                 Miconexion.Open()
  17.                 rtdo = objCmd.ExecuteNonQuery
  18.                 Miconexion.Close()
  19.  
  20.                 For j = 0 To numTareas
  21.                     If CheckBoxList4.Items(j).Selected Then
  22.  
  23.                         aleatorio = CLng((100 - 999) * Rnd() + 999)
  24.                         IDrel = Date.Now.Day & "/" & Date.Now.Month & "/" & Date.Now.Year & "-" & Date.Now.Hour & ":" & Date.Now.Minute & ":" & Date.Now.Second & "." & Date.Now.Millisecond & "&" & aleatorio
  25.  
  26.                         MisDatos = New OleDbDataAdapter("SELECT ID FROM tblMantenimientoTareas where Tarea = '" & CheckBoxList4.Items(j).Text & "'", Miconexion)
  27.                         MiTabla = New DataTable
  28.                         MisDatos.Fill(MiTabla)
  29.                         IDtarea = MiTabla(0).Item("ID")
  30.  
  31.                         sql = "INSERT INTO tblMantenimientoTareasRel (ID, IDmantenimientoSistemas, IDmantenimientoTareas)" & _
  32.                               "VALUES ('" & IDrel & "','" & IDsistemas & "'," & IDtarea & ")"
  33.  
  34.                         MsgBox(sql)
  35.                         Miconexion.Open()
  36.                         rtdo = objCmd.ExecuteNonQuery
  37.                         Miconexion.Close()
  38.  
  39.                     End If
  40.                 Next
  41.             End If
  42.         Next
  #2 (permalink)  
Antiguo 04/02/2010, 06:51
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: problema al hacer un insert

Comprueba los índices que tienes definidos en la tabla tblMantenimientoTareasRel, porque según parece, tienes definido un índice único y al hacer ese insert estás intentando introducir un valor ya existente para ese índice.

Te recomendaría que el campo ID lo pongas como autonumérico e identidad, así no tendrás que calcularlo, como haces aquí (entre otros sitios):

IDsistemas = Date.Now.Day & "/" & Date.Now.Month & "/" & Date.Now.Year & "-" & Date.Now.Hour & ":" & Date.Now.Minute & ":" & Date.Now.Second & "." & Date.Now.Millisecond & "&" & aleatorio

Por último, también te recomendaría utilizar una programación en capas con procedimientos almacenados. Es infinitamente mejor.
  #3 (permalink)  
Antiguo 04/02/2010, 12:31
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: problema al hacer un insert

que es eso de programación en capas con procedimientos almacenados?
un ejemplo de mi codigo como sería?
  #4 (permalink)  
Antiguo 04/02/2010, 12:41
 
Fecha de Ingreso: noviembre-2008
Ubicación: Uruguay
Mensajes: 49
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: problema al hacer un insert

Se refiere a dividir y estructurar tu código. Es mucho mejor por que en una clase por ejemplo tendras todo el código para el acceso a datos, y por otro la lógica de esta, es decir, ya con los datos en un generic o datatable pder hacer lo que quieras y por último la capa de presentación (forms web) con el cual interactuas con la capa lógica.
Lo procedimientos almacenados porsupuesto en un script de la base de datos. y en la capa de datos de tu aplicación web llamarlos. entiendes?

Por último: tu problema esta en el IDSistemas, esta ahí el problema. revisa bien.
  #5 (permalink)  
Antiguo 05/02/2010, 02:59
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: problema al hacer un insert

Ok, probaré de hacer de esa forma.

El error estaba en la línea 36. No había redefinido la variable objCmd para el nuevo insert que quería hacer, estaba volviendo a ejecutar el insert del principio, con lo que encontraba la clave duplicada.

Gracias por vuestra ayuda.

Etiquetas: insert, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:05.