Oracle - Bloqueo de registros desde Vb 5.0

 
Vista:

Bloqueo de registros desde Vb 5.0

Publicado por Iñigo (2 intervenciones) el 18/10/2001 13:30:49
Estoy convirtiendo un programa de visual C++ a Visual Basic 5.0 :
El problema que tengo es que al intentar bloquear un registro con una sentencia sql (una select + For Update NoWait). En Visual C++, si el registro estaba bloqueado, Oracle te devuelve un error de registros bloqueados. Pero la misma sentencia desde visual Basic no da errores, aunque el registro este bloqueado.
¿Cómo puedo bloquear para escritura un conjunto de registros desde VB 5.0, pero que otro usuario pueda acceder a ellos de forma solo lectura?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Bloqueo de registros desde Vb 5.0

Publicado por Harold (697 intervenciones) el 18/10/2001 18:19:39
Cuando tratas de hacer un update con NoWait, se bloquean los registros, los usuarios siguen "mirando" el registro pero solo de lectura por que lo leen desde los Segmentos de Rollback que tiene la Base de Datos. Si alguien quiere modificar los datos que tienes bloqueados es hasta en ese momento que te dara el error, antes no

Saludes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bloqueo de registros desde Vb 5.0

Publicado por Iñigo (2 intervenciones) el 19/10/2001 08:49:44
El verdadero problema es que desde Vb no consigo mandar la select for update, por algun motivo el “for update” se borra de la sentancia sql al pasarlo a oracle. La funcion de visual basic es la siguiente:

Public Function EjecutaSQLConBloqueo(ByVal vSentencia As String, Optional vRs As Variant) As EErrConexion

Dim RdoQy As rdoQuery
Dim lIndice As Integer
Dim InstruccionSql As String
Dim m_bloqueado As Boolean
Dim StrBloqueo As String
Dim strError As String
Dim MiError As String

On Error GoTo EjecutaSQLConBloqueoErr

gConexion.BaseDeDatos.BeginTrans

EjecutaSQLConBloqueo = SQL_ENCONTRADO

If mbWaitCursor Then Screen.MousePointer = 11

'Sentencia de bloqueo
StrBloqueo = " FOR UPDATE NOWAIT"

If IsMissing(vRs) = True Then
'Estamos ejecutando una sentencia de insercion, borrado, o modificacion
'no se le añade la sentencia "FOR UPDATE" ya que las sentencias de inserción,
'borrado o modificación bloquean automaticamente los registros

mBasedeDatos.Execute vSentencia, rdExecDirect

On Error GoTo 0
If mbWaitCursor Then Screen.MousePointer = 0
Exit Function
Else
'Estamos ejecutano una consulta

Set RdoQy = New rdoQuery
With RdoQy
Set .ActiveConnection = mBasedeDatos
.SQL = UCase(vSentencia & StrBloqueo)
.LockType = rdConcurReadOnly
.CursorType = rdOpenForwardOnly
End With
Set vRs = RdoQy.OpenResultset()
Set RdoQy = Nothing

'Comproba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bloqueo de registros desde Vb 5.0

Publicado por Iban Atxutegi (1 intervención) el 19/10/2001 15:14:24
prueba con la conexion del lado del servidor, y el cursor en modo pesimista.
ejemplo:
tipo de conexion:
mBasedeDatos.CursorDriver = rdUseServer
sql:
'Estamos ejecutano una consulta

Set RdoQy = New rdoQuery
With RdoQy
Set .ActiveConnection = mBasedeDatos
.SQL = UCase(vSentencia & StrBloqueo)
.LockType = rdConcurLock
.CursorType = rdOpenForwardOnly
End With
Set vRs = RdoQy.OpenResultset()
Set RdoQy = Nothing

suerte.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar