|  | 
 
  
    | RSS Feed - WebSphere MQ Support | RSS Feed - Message Broker Support |  
 
  
	|    |  |  
  
	| MQPMO_LOGICAL_ORDER, 2046 Return code | « View previous topic :: View next topic » |  
  	| 
		
		
		  | Author | Message |  
		  | Oscar | 
			  
				|  Posted: Mon Oct 03, 2005 2:51 pm    Post subject: MQPMO_LOGICAL_ORDER, 2046 Return code |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| I am using VB6 to write to a queue manager on Version 5.3.  I don't seem to be setting the options correctly as I always get the 2046 return code.  Here's the code where I set up the Message Descriptor and the Put Message Options: 
 MQMsgDesc.Format = MQFMT_STRING
 MQMsgDesc.Version = MQMD_VERSION_2
 MQMsgDesc.MsgFlags = MQMF_MSG_IN_GROUP
 MQMsgDesc.GroupId = MQGI_NONE
 MQPutOpts.Version = MQPMO_CURRENT_VERSION
 MQPutOpts.Options = MQPMO_LOGICAL_ORDER
 
 Do I have to set something else up as well?
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  | fjb_saper | 
			  
				|  Posted: Mon Oct 03, 2005 7:29 pm    Post subject: |   |  |  
		  |  Grand High Poobah
 
 
 Joined: 18 Nov 2003Posts: 20767
 Location: LI,NY
 
 | 
			  
				| Isn't LOGICAL_ORDER  a GET option ?? 
 Enjoy
  |  |  
		  | Back to top |  |  
		  |  |  
		  | hopsala | 
			  
				|  Posted: Mon Oct 03, 2005 8:08 pm    Post subject: |   |  |  
		  |  Guardian
 
 
 Joined: 24 Sep 2004Posts: 960
 
 
 | 
			  
				| 
   
	| fjb_saper wrote: |  
	| Isn't LOGICAL_ORDER  a GET option ?? |  Not exclusively. If you use MQPMO_LOGICAL_ORDER with MQPUT, MQ will set MsgSeqNumber (and Offset, if applicable) automatically to 1,2,3 etc; if you do not use it, you have to handle indexing manually.
 
 
 
   
	| Application Programming Guide, Chapter 10 wrote: |  
	| For example, assume that the group consists of four logical messages. The putting application looks like this:
 
 PMO.Options = MQPMO_LOGICAL_ORDER
 
 MQPUT MD.MsgFlags = MQMF_MSG_IN_GROUP
 MQPUT MD.MsgFlags = MQMF_MSG_IN_GROUP
 MQPUT MD.MsgFlags = MQMF_MSG_IN_GROUP
 MQPUT MD.MsgFlags = MQMF_LAST_MSG_IN_GROUP
 |  |  |  
		  | Back to top |  |  
		  |  |  
		  | mqmhr | 
			  
				|  Posted: Mon Oct 03, 2005 8:13 pm    Post subject: |   |  |  
		  | Centurion
 
 
 Joined: 28 Dec 2004Posts: 105
 
 
 | 
			  
				| MQPMO_LOGICAL_ORDER is a put option to specify that the message is part of a message group, whch is what Oscar is trying to do. But the null group identifier MQGI_NONE might not be a valid group identifier for a message in a group and hence this option conflicts with MQMF_MSG_IN_GROUP. 
 The AP Reference says that a message group is a
 
   
	| Quote: |  
	| ...a set of one or more logical messages that have the same nonnull group identifier |  |  |  
		  | Back to top |  |  
		  |  |  
		  | hopsala | 
			  
				|  Posted: Mon Oct 03, 2005 8:22 pm    Post subject: |   |  |  
		  |  Guardian
 
 
 Joined: 24 Sep 2004Posts: 960
 
 
 | 
			  
				| 
   
	| mqmhr wrote: |  
	| MQPMO_LOGICAL_ORDER is a put option to specify that the message is part of a message group, whch is what Oscar is trying to do. But the null group identifier MQGI_NONE might not be a valid group identifier for a message in a group and hence this option conflicts with MQMF_MSG_IN_GROUP. |  That's incorrect - setting the groupId to NONE simply means that MQ will choose a GroupId for you, exactly as in CorrlId and MsgId; see the sample in the upcoming link.
 
 Concerning the original poster's question - There is a sample code at the repository (MQSeries.net C/C++ repository - choose "putgroup"); a quick look shows that you didn't use "pmo.Version = MQPMO_VERSION_2;", maybe that's you're prob, but I doubt it. Please post all relevant code and we'll have a look.
 
 (Hopefully, you didn't forget setting MQOO_OUTPUT...
  ) |  |  
		  | Back to top |  |  
		  |  |  
		  | Oscar | 
			  
				|  Posted: Tue Oct 04, 2005 7:13 am    Post subject: My code |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| I have a subroutine just for PUTting the message.  I make the connection and set the output type in another sub.  If I remove the MQPMO_LOGICAL_ORDER, the put works. 
 Both messages have the same group id, but they also have the same sequence number: 1.  (According to MQ Explorer)  The weird part about that is, every put seems to use the same group id?  Even if I close the app and restart it.  Anyway, that's the second part of my issue.  I just thought that MQ would automatically handle the sequencing for me.
 
 Public Sub PutMessage(hMQConn As Long, hMQObj As Long, _
 sBuffer As String, lMesgLen As Long)
 Dim MQMsgDesc As MQMD     ' MQ Message Descriptor
 Dim MQPutOpts As MQPMO    ' MQPUT Options
 Dim lCompCode As Long     ' Completion code
 Dim lReason As Long       ' Reason code
 Dim sCompMsg As String    ' Message to display when PUT call finished
 
 ' Set Message Descriptor to default values
 MQMD_DEFAULTS MQMsgDesc
 
 ' Set PUT options to default values
 MQPMO_DEFAULTS MQPutOpts
 
 MQPutOpts.Version = MQPMO_VERSION_2
 MQPutOpts.Options = MQPMO_FAIL_IF_QUIESCING + _
 MQPMO_NO_SYNCPOINT + _
 MQPMO_LOGICAL_ORDER
 
 MQMsgDesc.Format = MQFMT_STRING
 MQMsgDesc.Version = MQMD_VERSION_2
 MQMsgDesc.MsgFlags = MQMF_MSG_IN_GROUP
 MQMsgDesc.GroupId = MQGI_NONE
 
 ' PUT message to queue
 MQPUT hMQConn, hMQObj, MQMsgDesc, MQPutOpts, lMesgLen, _
 sBuffer, lCompCode, lReason
 
 If lCompCode <> MQCC_OK Then
 ShowMQError Trim(cmbQMgr.Text), Trim(cmbQueue.Text), _
 lCompCode, lReason, "PUT # 1"
 End If
 
 MQMsgDesc.MsgFlags = MQMF_LAST_MSG_IN_GROUP
 
 MQPUT hMQConn, hMQObj, MQMsgDesc, MQPutOpts, lMesgLen, _
 sBuffer, lCompCode, lReason
 
 If lCompCode <> MQCC_OK Then
 ShowMQError Trim(cmbQMgr.Text), Trim(cmbQueue.Text), _
 lCompCode, lReason, "PUT #2"
 End If
 End Sub
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  | Oscar | 
			  
				|  Posted: Tue Oct 04, 2005 7:56 am    Post subject: |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| Please disregard the part about MQ using the same group id.  After I had some coffee in me, I found that the group id's were different   
 But, I'm still getting the 2046, MQRC_OPTIONS_ERROR when I specify MQPMO_LOGICAL_ORDER.
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  | hopsala | 
			  
				|  Posted: Tue Oct 04, 2005 8:09 am    Post subject: |   |  |  
		  |  Guardian
 
 
 Joined: 24 Sep 2004Posts: 960
 
 
 | 
			  
				| Well, I don't see anything wrong in casual glance, and I haven't the time to start debugging your code, plus it really isn't my job  look at the sample I posted and try to locate the differences... 
 Don't forget to post the solution when you come across it, Luck!
 |  |  
		  | Back to top |  |  
		  |  |  
		  | Oscar | 
			  
				|  Posted: Tue Oct 04, 2005 9:27 am    Post subject: I found it |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| This is a very funky problem, and I don't know if it's specific to me or not. 
 I set a breakpoint in the code where I set the options, and moused over each of my options to see the values:
 
 MQPMO_FAIL_IF_QUIESCING = 8192
 MQPMO_NO_SYNCPOINT = 4
 MQPMO_LOGICAL_ORDER = -32768
   
 I looked up MQPMO_LOGICAL_ORDER in the cmqb.bas, and it is defined as &H8000 (32768) ... positive.  So, somewhere in my system (VB, Windows XP, the little gnomes in that box), the conversion for the logical order constants (MQGMO_LOGICAL_ORDER is defined the same way) are being incorrectly converted.
 
 When I change the put options to:
 MQPutOpts.Options = MQPMO_FAIL_IF_QUIESCING + _
 MQPMO_NO_SYNCPOINT + _
 32768
 
 the program works just as I would expect it to.
 
 Thanks to everyone who took a look and tried to help.
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  | PeterPotkay | 
			  
				|  Posted: Tue Oct 04, 2005 10:05 am    Post subject: Re: I found it |   |  |  
		  |  Poobah
 
 
 Joined: 15 May 2001Posts: 7723
 
 
 | 
			  
				| 
   
	| Oscar wrote: |  
	| MQPMO_LOGICAL_ORDER = -32768
   
 |  
 Huh. Exactly what version of MQ are you compiling with? I know u said the QM was 5.3, but what about the libs that you are using for your app? What version, including CSD level? Maybe this is fixed in a later CSD?
 _________________
 Peter Potkay
 Keep Calm and MQ On
 |  |  
		  | Back to top |  |  
		  |  |  
		  | Oscar | 
			  
				|  Posted: Tue Oct 04, 2005 11:14 am    Post subject: |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| I'm usind CSD09.  The cmqb.bas module from the tools directory has a last modified date of 12/13/2004. 
 I haven't found anything on IBM's support sight that anyone else has had this problem.
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  | Oscar | 
			  
				|  Posted: Fri Oct 07, 2005 10:42 am    Post subject: |   |  |  
		  | Newbie
 
 
 Joined: 03 Oct 2005Posts: 6
 
 
 | 
			  
				| I found this on a VB message board.  My problem was a VB limitation.  I had to change the constants to read &H8000& and everything worked.  Maybe IBM should distribute the shared modules with this definition? 
 Anyway, the explanation:
 Philip Morley <philip.morley@bmb.com.bh> wrote in message
 news:39bfde9c$3@news.devx.com...
 >
 > Hi,
 >
 > The following statement in VB
 > &H8000
 > gives a value of -32768, when the actual value is 32768
 > (8 * 16 ^3).
 >
 > Does anyone have any ideal why VB behaves thus.
 
 because the value fits into a 16bit Integer field but VB interprets the high
 bit as the sign bit so it becomes a negative number. Use CLNG("&H8000") or
 VAL("&H8000&") in expressions or just &H8000& when used as a constant - the
 trailing & forces it to be typed as a 32-bit integer.
 _________________
 Oscar Hopper
 Jack of all trades, master of None
 |  |  
		  | Back to top |  |  
		  |  |  
		  |  |  |  
  
	|    |  | Page 1 of 1 |  
 
 
  
  	| 
		
		  | 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 
 |  |  |  |