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

Recuperar dos últimas incersiones (ADO)

Estas en el tema de Recuperar dos últimas incersiones (ADO) en el foro de ASP Clásico en Foros del Web. Saludos a tod@s! Ya me desesperó esto, tengo desde ayer tratando y nada, resulto que tengo una sentencia SQL que inserta en dos diferentes tablas ...
  #1 (permalink)  
Antiguo 11/01/2006, 12:09
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Recuperar dos últimas incersiones (ADO)

Saludos a tod@s!

Ya me desesperó esto, tengo desde ayer tratando y nada, resulto que tengo una sentencia SQL que inserta en dos diferentes tablas y pretendo recuperar al final los dos ids resultantes para cada una de las tablas, si corro la sentencia desde el Query Analyzer funciona bien, si trato de recuperar estos valores como un recordset, me regresará un error de recordset vacío, alguna sugerencia?

Código:
		qry = "INSERT INTO tbl_document(" & _
		"document_name, " & _
		"document_file, " & _
		"document_date, " & _
		"document_user, " & _
		"document_live) " & _
		"VALUES(?,?,getDate(),?,0); " & _
		"DECLARE @ident int; " & _
		"DECLARE ident_cursor CURSOR FOR SELECT @@IDENTITY; " & _
		"OPEN ident_cursor; " & _
		"FETCH NEXT FROM ident_cursor INTO @ident;" & _
		"INSERT INTO tbl_dc(" & _
		"dc_order, " & _
		"dc_parent_id, " & _
		"dc_folder_bit, " & _
		"dc_display_bit, " & _
		"dc_template_id, " & _
		"dc_table_id, " & _
		"dc_date, " & _
		"dc_user)" & _
		"VALUES(100,?,0,?,@ident,18,getDate(),?); " & _
		"SELECT @@IDENTITY AS document_id, @ident AS dc_id ;"
		
		

		Set param = cmd.CreateParameter("document_file", adVarChar, adParamInput, 300, m_document_file)
		cmd.Parameters.Append(param)
		Set param = cmd.CreateParameter("document_user", adInteger, adParamInput, 4, m_document_user)
		cmd.Parameters.Append(param)
		Set param = cmd.CreateParameter("dc_parent_id", adInteger, adParamInput, 4, m_dc_parent_id)
		cmd.Parameters.Append(param)
		Set param = cmd.CreateParameter("dc_parent_id_1", adInteger, adParamInput, 4, m_dc_parent_id)
		cmd.Parameters.Append(param)
		Set param = cmd.CreateParameter("dc_display_bit", adBoolean, adParamInput, 1, m_dc_display_bit)
		cmd.Parameters.Append(param)
		Set param = cmd.CreateParameter("document_user_1", adInteger, adParamInput, 4, m_document_user)
		cmd.Parameters.Append(param)																						
		
		ObjConn.Open strConnect
		cmd.ActiveConnection = ObjConn
		cmd.CommandText = qry
		cmd.CommandType = adCmdText
		
		Set rs = cmd.Execute.NextRecordSet()
		m_document_id = rs("document_id")
		m_dc_id = rs("dc_id") 
Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #2 (permalink)  
Antiguo 11/01/2006, 12:28
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
¿Usas MySQL? Si es asi, lo que yo haría sería realizar el primer INSERT

Código:
set xx = objconn.execute("INSERT INTO ......")
Luego hago una llamada para ver el ultimo valor autoincrementado por mi sesion

Código:
set xx = objconn.execute("SELECT LAST_INSERT_ID() as ultimo")
if not xx.EOF then ultimo = xx("ultimo")
y asi sucesivamente

Espero haberte ayudado

Última edición por tammander; 11/01/2006 a las 12:44
  #3 (permalink)  
Antiguo 11/01/2006, 12:33
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
No...uso SQL, lo que pretendo es obtener todo esto en un solo query, gracias de todas maneras ;)

Por cierto, justo cuando estaba escribiendo esto, lo acabo de resolver, les cuento:

Las dos incersiones, ocasionarán dos registros en la base de datos, uno en cada tabla, y al mismo tiempo mandarán 2 contadores como salida al motor de SQL

1 row affected
1 row affected

Creo yo que eso provoca que el command no encuentre el recordset correspondiente ni siquiera con el método NextRecordset, por lo tanto hay que quitarle los contadores y utilizar el método Execute solo:

Código:
qry = "SET NOCOUNT ON INSERT INTO tbl_document(" & _
.
.
.
Set rs = cmd.Execute()
m_document_id = rs("document_id")
m_dc_id = rs("dc_id")
Y listo...de repente todo funciona!

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 12/01/2006, 10:18
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
ooooorale, eres mi ídolo u_g eres un ejemplo (si no fueras tan apegado al vicio), jejeje

No es cierto, solo es que estoy algo estrezado, jejeje, ciertamente esa no me la sabía.

Saludos
  #5 (permalink)  
Antiguo 12/01/2006, 11:39
Avatar de tomchat  
Fecha de Ingreso: septiembre-2005
Mensajes: 231
Antigüedad: 19 años, 8 meses
Puntos: 0
Me parece interesante tu codigo, lo rebisare, haber si puedo ayudar en algo. Bueno si pretendes capturar las ids de tus inserciones lo mas idoneo seria generar una consulta, lo que he notado que tu no ingresas tus ids o codigos. Lo que yo hago es generar los codigos de cada registro ha insertar(tambien puedes colocar un campo autonumerico), en mi caso una ves generado el codigo lo capturo y lo uso a mi conveniencia. No se como será en tu caso.

Suerte con tu aplicación
  #6 (permalink)  
Antiguo 12/01/2006, 12:56
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Bueno, los ids son autonumericos, y los recupero que el SELECT @@IDENTITY, el problema era(creo yo) que el motor de SQL recibia dos mensajes, por lo tanto, el objeto command se confundia acerca del recordset, no he encotrado nada que diga que eso es oficial, pero la instruccion de no enviar el contador, resolvio el problema.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 12/01/2006, 13:00
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Cita:
Iniciado por Myakire
ooooorale, eres mi ídolo u_g eres un ejemplo (si no fueras tan apegado al vicio), jejeje

No es cierto, solo es que estoy algo estrezado, jejeje, ciertamente esa no me la sabía.

Saludos
Condenado tiguron, si sabes perfectamente que el vicio ese que tenemos lo inventaste tu!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 11:43.