Foros del Web » Programando para Internet » ASP Clásico »

Duplicar registros

Estas en el tema de Duplicar registros en el foro de ASP Clásico en Foros del Web. Hola ¡¡¡ Estoy intentando duplicar registros en una tabla. Cuando solo intento duplicar en la tabla COMUNIDAD, me crea los 30 registros sin problema: Código: ...
  #1 (permalink)  
Antiguo 14/10/2008, 06:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Duplicar registros

Hola ¡¡¡
Estoy intentando duplicar registros en una tabla.

Cuando solo intento duplicar en la tabla COMUNIDAD, me crea los 30 registros sin problema:
Código:
do while(i<x)

Set Rs = CreateObject("ADODB.RecordSet")
		set dnstext2= CreateObject("ADODB.Connection")
DnsText2.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
SqlText ="insert into COMUNIDAD select '"&i&" ',COMUNIDAD, PRIVADO from COMUNIDAD where id=36"
		Rs.Open SqlText, DnsText2,adOpenDinamic, adLockPessimistic, AdCMDText

i=i+1
Loop

El problema viene cuando intento duplicar registros de la tabla COMUNIDAD y de la tabla MENU del siguiente modo:

Código:
Set Rs1 = CreateObject("ADODB.RecordSet")
		set dnstext1= CreateObject("ADODB.Connection")
DnsText1.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
        SqlText1 = "select Max(id) as i from COMUNIDAD"
		Rs1.Open SqlText1, DnsText1,adOpenDinamic, adLockPessimistic, AdCMDText

i=Rs1("i")
i=i+1
x=i+30
Rs1.close

Set Rs11 = CreateObject("ADODB.RecordSet")
		set dnstext11= CreateObject("ADODB.Connection")
DnsText11.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
        SqlText11 = "select Max(id) as y from MENU"
		Rs11.Open SqlText11, DnsText11,adOpenDinamic, adLockPessimistic, AdCMDText

Y=Rs11("y")
Y=Y+1
M=Y+30
Rs11.close


do while(i<x)

Set Rs = CreateObject("ADODB.RecordSet")
		set dnstext2= CreateObject("ADODB.Connection")
DnsText2.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
SqlText ="insert into COMUNIDAD select '"&i&" ',COMUNIDAD, PRIVADO from COMUNIDAD where id=36"
		Rs.Open SqlText, DnsText2,adOpenDinamic, adLockPessimistic, AdCMDText



do while(y<m)

Set Rs3 = CreateObject("ADODB.RecordSet")
		set dnstext3= CreateObject("ADODB.Connection")
DnsText3.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
SqlText3 ="insert into MENU select '"&Y&" ',MenNombre, MenPocision, '"&i&" ', Ocultar from MENU where comunidad=36 AND Menpocision=1"
		Rs3.Open SqlText3, DnsText3,adOpenDinamic, adLockPessimistic, AdCMDText
		response.write(Sqltext3)
Y=Y+1
Loop


i=i+1
Loop

response.write("Comunidades Duplicadas con éxito ¡¡¡¡¡")
Me tira el siguiente error:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Duplicate entry '163' for key 1

Pueden ayudarme plis¿¿¿???

Muchas gracias ¡¡¡
  #2 (permalink)  
Antiguo 14/10/2008, 08:39
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: Duplicar registros

Una de dos:

1.- Tu tabla COMUNIDAD , tiene una llave primaria por los registros que deseas duplicar.

2.- En la siguiente sección de código:

Código:
from COMUNIDAD where id=36"
El id no debería de ir cambiando, de acuerdo a tu variable i?

Saludos.
  #3 (permalink)  
Antiguo 14/10/2008, 08:55
 
Fecha de Ingreso: marzo-2008
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duplicar registros

Esta parte de código me esta funcionando correctamente:

Código:
do while(i<x)

Set Rs = CreateObject("ADODB.RecordSet")
		set dnstext2= CreateObject("ADODB.Connection")
DnsText2.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
SqlText ="insert into COMUNIDAD select '"&i&" ',COMUNIDAD, PRIVADO from COMUNIDAD where id=36"
		Rs.Open SqlText, DnsText2,adOpenDinamic, adLockPessimistic, AdCMDText

i=i+1
Loop
En i esta almacenado el id(MAX) de la tabla COMUNIDAD y repito el bucle 30 veces para hacer 30 duplicados del registro que tenga id=36.
Esta parte si la ejecuto sin la otra sentencia funciona perfectamente, el problema viene cuando intento insertar en la tabla MENU duplicados de un registro de la tabla MENU que cumpla las condiciones: comunidad=36 y Menpocision=1.

Código:
Set Rs3 = CreateObject("ADODB.RecordSet")
		set dnstext3= CreateObject("ADODB.Connection")
DnsText3.open = "driver={MySQL};server="&session("servidor")&";uid="&session("usuariobd")&";pwd="&session("contrasenabd")&";database="&session("bd")&""
SqlText3 ="insert into MENU select '"&Y&" ',MenNombre, MenPocision, '"&i&" ', Ocultar from MENU where comunidad=36 AND Menpocision=1"
		Rs3.Open SqlText3, DnsText3,adOpenDinamic, adLockPessimistic, AdCMDText
		response.write(Sqltext3)
Y=Y+1
Loop
  #4 (permalink)  
Antiguo 14/10/2008, 09:01
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: Duplicar registros

Inicialmente decias:
Cita:
El problema viene cuando intento duplicar registros de la tabla COMUNIDAD y de la tabla MENU del siguiente modo:
Por eso te escribi lo anterior.

Ahora bien, si nos dices las estrucutras de sus tablas junto con sus constraints, será más fácil ayudarte.

Saludos.
  #5 (permalink)  
Antiguo 14/10/2008, 09:14
 
Fecha de Ingreso: marzo-2008
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duplicar registros

Esta es la estructura de mis tablas


TABLA COMUNIDAD

id---Comunidad----Privado
1----General--------0
2----Agricola-------0
3----Maquinaria-----1
4
5
.
.
.

TABLA MENU

id---MenNombre----MenPosicion---Comunidad----Ocultar
1----Bienvenida----------1----------1----------no
2----Documentos--------2----------1-----------si
3----Introduccion---------1-----------2----------no
4----Recortes P.----------1-----------3----------no
5
.
.
.
  #6 (permalink)  
Antiguo 14/10/2008, 09:23
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Respuesta: Duplicar registros

ummm
me suena a utoincremental y así evitamos que trate de duplicar no?

(
id int(6) NOT NULL auto_increment
PRIMARY KEY (id_articulo)
) ;


¿?
__________________
JuanRa Pérez
San Salvador, El Salvador
  #7 (permalink)  
Antiguo 14/10/2008, 09:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duplicar registros

JuanRAPerez donde debería aplicar un autoincremental? no se exactamente a que te refieres.

Este error solo me da cuando intento duplicar un registro de la tabla MENU, en el que el campo comunidad sea igual a un número determinado.

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Duplicate entry '163' for key 1

Cuando duplico registros en la tabla COMUNIDAD si me lo hace sin ningun problema...
  #8 (permalink)  
Antiguo 14/10/2008, 10:52
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años, 6 meses
Puntos: 8
Respuesta: Duplicar registros

En la tabla menu quizá tengas un constraint para evitar duplicados en id y MenNombre, y por eso no lo permite.
  #9 (permalink)  
Antiguo 14/10/2008, 11:49
 
Fecha de Ingreso: marzo-2008
Mensajes: 42
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duplicar registros

No me había dado cuenta, pero si que consigue crear un registro de los que debe. La variable Y se llena con el MAX(id) de la tabla MENU, en mi caso 162.
Le sumo 1 para escribir en el id siguiente: 163. En ese id me crea un registro duplicado del que le pido, pero ahora no sigue la sentencia hacia abajo, por tanto no hace Y=Y+1, sino que vuelve a intentar crear un registro en el id: 163 y es cuando me tira el error.

Gracias por contestar ¡¡¡¡¡
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 06:35.