sentencia FOR UPDATE NOWAIT
Publicado por Iñigo (4 intervenciones) el 19/10/2001 08:53:15
El 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
'Comprobar si la consulta devuelve algun registro
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
'Comprobar si la consulta devuelve algun registro
Valora esta pregunta


0