【发布时间】:2015-08-17 14:30:20
【问题描述】:
目前我有一段代码使用 oracle 高级队列将消息入队和出队。
我需要做的是首先检查具有高优先级的消息,然后再获取其他消息。但我似乎无法做到这一点。
这是我的代码示例:
Public Function GetQMsg(ByRef sMsg, ByRef vMsgId As Variant, Optional lWait As Long = ORAAQ_DQ_NOWAIT) As Long
gobjDB.LastServerErrReset
sMsg = ""
On Error GoTo cmdErr
gobjQ.Wait = lWait ' ORAAQ_DQ_NOWAIT
gobjQ.Navigation = ORAAQ_DQ_FIRST_MSG ' to refresh snapshot of msgs waiting
'gobjQ.DequeueMode = ORAAQ_DQ_BROWSE
vMsgId = gobjQ.Dequeue()
sMsg = gobjMsg.Value
GetQMsg = 0
GoTo Fin
cmdErr:
If gobjDB.LastServerErr = 25228 Then
' no msg available:
GetQMsg = QUEUE_EMPTY
Else
GetQMsg = gobjDB.LastServerErr
End If
Fin:
End Function
如果我在代码中添加以下行,我可以看到消息优先级,但我无法确定如何首先返回最高优先级的消息。
'Debug.Print "Message Priority: " & gobjMsg.Priority
我很欣赏这是使用遗留开发,但它是更大应用程序的基础。
所以我的问题是如何让消息按优先顺序返回?
谢谢
【问题讨论】: