Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

¿como obtener el Recordset o ROWID de un INSERT, UPDATE O DELETE?

Estas en el tema de ¿como obtener el Recordset o ROWID de un INSERT, UPDATE O DELETE? en el foro de Bases de Datos General en Foros del Web. hola a todos, he buscado la respuesta en los foros pero no la he encontrado. Mi duda es ¿como despues de realizar un INSERT, UPDATE ...
  #1 (permalink)  
Antiguo 12/04/2005, 21:17
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 7 meses
Puntos: 0
Pregunta ¿como obtener el Recordset o ROWID de un INSERT, UPDATE O DELETE?

hola a todos, he buscado la respuesta en los foros pero no la he encontrado. Mi duda es ¿como despues de realizar un INSERT, UPDATE o DELETE, capturar el recordset o ROWID del nuevo o actual registro insertado o modifcado, o en el caso de un DELETE obtener el ROWID?

Lo he intentado de la siguiente forma pero no me resulta:

Public Function sql_run(sqlrun, ByRef recordsaffected) As Variant
On Error Resume Next
Dim CM As New ADODB.Command
Dim RS As New ADODB.Recordset
vCONN.BeginTrans
CM.ActiveConnection = vCONN
CM.CommandText = sqlrun
Set RS = CM.Execute(recordsaffected)
If Err.Number = 0 Then
vCONN.CommitTrans
Set sql_run = RS
Else
vCONN.RollbackTrans
End If
Set CM = Nothing
End Function

Gracias.

JR.
  #2 (permalink)  
Antiguo 13/04/2005, 05:56
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola, yo estoy buscando mas o menos lo mismo que tu.
Resulta que estoy haciendo un Update de una tabla, con un WHERE muy sencillo, pero hay veces que aunque la condicion no se cumpla el UPDATE se ejecuta.
Lo que me gustaria saber, es:
saber el numero de filas afectadas por la ejecucion del UPDATE
Si encuentro alguna solucion te informo

Gracias de antemano
__________________
Salut i Força al Canut
  #3 (permalink)  
Antiguo 13/04/2005, 06:03
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Si trabajas con mysql, la forma de saber cuantas filas se han borrado/actualizado es haciendo una llamada a la función "mysql_affected_rows()" (manual)

En cuanto al primer tema, puesto por crumbs, ¿qué gestor de base de datos usas?, ¿a qué te refieres con recuperar el recordset de un insert, update, delete?.
Un delete no pude devolver después ningún dato: los has borrado.
Los afectados por un update: se recuperan con la misma condición del update, salvo que estés modificando algún dato usado para buscarlo.
Insert: usando la clave primaria o índice único del registro insertado puedes encontrarlo.

No sé si esto soluciona tus dudas.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #4 (permalink)  
Antiguo 13/04/2005, 06:17
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola Vice, utilizo yo utilizo SQL server, con ASP, existe algo similar a mysql_affected_rows(), en ASP ???
y a que refieres con "Los afectados por un update: se recuperan con la misma condición del update, salvo que estés modificando algún dato usado para buscarlo."

Un saludo y gracias
__________________
Salut i Força al Canut
  #5 (permalink)  
Antiguo 13/04/2005, 08:35
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 7 meses
Puntos: 0
hola, bueno, me refiero a que si tu ejecutas un INSERTo UPDATE, que haga lo siguiente:

a todo esto estoy utilizando ASP con ORACLE 9i,

Dim CM As New ADODB.Command
Dim RS As New ADODB.Recordset
CM.ActiveConnection = vCONN
CM.CommandText = "INSERT INTO SESION (FECHA, USUARIO, IP) VALUES(SYSDATE,'CRUMBS','192.168.1.5')"
Set RS = CM.Execute(NREC)

ok hasta ahora esta todo bien, lo que quiero es que en la variable RS quede guardado el registro que el comando INSERT agrego, y utilizalo de esta manera:

response.write("ROWID: " & RS("ROWID").value & "<BR>")
response.write("Fecha: " & RS("FECHA").value & "<BR>")
response.write("Usuario: " & RS("USUARIO").value & "<BR>")
response.write("Ip Cliente: " & RS("IP").value & "<BR>")

algo asi necesito...

y lo del UDPATE, lo mismo que me devuelva el registro que se actualizo, o me conformo con el ROWID de cada operación..

Saludos.
  #6 (permalink)  
Antiguo 13/04/2005, 08:40
 
Fecha de Ingreso: abril-2005
Mensajes: 4
Antigüedad: 19 años, 7 meses
Puntos: 0
Algicor, para solucionar tu problema, el metodo Execute de ADODB.Command o ADODB.Connection, te dan la posibilidad de almacenar el numero de registros afectados por la instruccion en una variable, te doy un ejemplo:

Tabla Usuarios
==========================
loginname | Password
==========================
CRM | 123
JYR | 456
==========================

Dim CM
Dim NREC
set CM =CreateObject("ADODB.Command")
CM.ActiveConnection = vCONN
CM.CommandText = "UPDATE usuarios SET password='CRM' WHERE loginname='CRM'"
CM.Execute NREC
Set CM = Nothing

la variable NREC deberia entregarte "1" segun la tabla que te di mas arriba.

espero que te sirva.
Saludos.
  #7 (permalink)  
Antiguo 14/04/2005, 09:30
 
Fecha de Ingreso: abril-2003
Mensajes: 260
Antigüedad: 21 años, 7 meses
Puntos: 0
pues voy a probar a ver q sale
Gracias de todos modos, y luego os comento como ha ido la cosa
__________________
Salut i Força al Canut
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 14:14.