Page 1 of 1

Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Wed Sep 24, 2014 6:11 pm
by Dave Zowasky
Hello,

I have been seeing a problem error below.
It appears to happen when I click on a listbox.
It does not happen all the time. It happens from time to time
with no logical cause that I can produce with consistency
We use arrays to populate our listbox.
Below is a the code I use with my listbox for the array.

Any help or suggestion with this would be most appreciated.

Thanks
Dave

Code: Select all

olba:bgotop    = { || x := 1 }                                                                                                                                                                                                                                 
olba:bgobottom = { || x := eval( olba:blogiclen ) }                                                                                                                                                                                                            
olba:bskip     = { | nwant, nold | nold := x, x += nwant,;                                                                                                                                                                                                     
 x := max( 1, min( x, eval( olba:blogiclen ) ) ),;                                                                                                                                                                                                             
 x - nold }                                                                                                                                                                                                                                                    
olba:blogiclen = { || len( xlba ) }                                                                                                                                                                                                                            
olba:calias    = "array"                          
Application
===========
Path and name: C:\c1\c100u000\c100u000.exe (64 bits)
Size: 7,094,784 bytes
Compiler version: Harbour 3.2.0dev (Rev. 18881)
FiveWin Version: FWH 13.07
Windows version: 6.2, Build 9200

Time from start: 0 hours 0 mins 16 secs
Error occurred at: 09/24/14, 13:50:30
Error description: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Stack Calls
===========
Called from: => ORDKEYNO( 0 )
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:MOUSEMOVE( 0 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 0 )
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:HANDLEEVENT( 0 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 0 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 0 )
Called from: c100u000.prg => MAIN( 96 )

System
======
Hardware memory: 3970 megs

Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %

Windows total applications running: 7
1 , C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.17031_none_6242
2 , C:\WINDOWS\system32\SHLWAPI.dll
3 DDE Server Window, C:\WINDOWS\system32\ole32.dll
4 Explorer Browser Control, C:\WINDOWS\system32\SHELL32.dll
5 GDI+ Window,
6 Task Switching, C:\c1\c100u000\c100u000.exe
7 View X12 File, C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.16384_none_34a

Variables in use
================
Procedure Type Value
==========================
ORDKEYNO
Param 1: O Class: ERROR
TWBROWSE:MOUSEMOVE
Local 1: U
Local 2: U
TWINDOW:HANDLEEVENT
Param 1: N 152
Param 2: N 224
Param 3: N 1
Local 1: N 0
Local 2: N 1
Local 3: N 0
Local 4: N 9
Local 5: N 8
Local 6: N 62
Local 7: N 1
TCONTROL:HANDLEEVENT
Param 1: N 512
Param 2: N 1
Param 3: N 9961696
TWBROWSE:HANDLEEVENT
Param 1: N 512
Param 2: N 1
Param 3: N 9961696
Local 1: U
_FWH
Param 1: N 512
Param 2: N 1
Param 3: N 9961696
WINRUN
Param 1: N 9961696
Param 2: N 512
Param 3: N 1
Param 4: N 9961696
Param 5: N 24
Local 1: O Class: TWBROWSE
TWINDOW:ACTIVATE
Param 1: N 787920
MAIN
Param 1: C "NORMAL"
Param 2: U
Param 3: U
Param 4: U
Param 5: U
Param 6: U
Param 7: U
Param 8: U
Param 9: U
Param 10: U
Param 11: U
Param 12: U
Param 13: U
Param 14: U
Param 15: U
Param 16: U
Param 17: U
Param 18: U
Param 19: U
Local 1: O Class: TWINDOW
Local 2: U
Local 3: U

Linked RDDs
===========
SQLBASE
SQLMIX
DBF
DBFFPT
DBFBLOB
DBFCDX
DBFNTX

DataBases in use
================

Classes in use:
===============
1 ERROR
2 HBCLASS
3 HBOBJECT
4 TFONT
5 TWINDOW
6 TBRUSH
7 TCONTROL
8 TFOLDEREX
9 TDIALOG
10 TBUTTON
11 TMSGBAR
12 TRECT
13 TMETER
14 TSAY
15 TMENU
16 TMENUITEM
17 TMRU
18 TINI
19 TICON
20 TIMAGELIST
21 TBITMAP
22 TTOOLBAR
23 TWBROWSE
24 TSCROLLBAR

Memory Analysis
===============
344 Static variables

Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Wed Sep 24, 2014 7:17 pm
by karinha

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Wed Sep 24, 2014 7:18 pm
by karinha

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Thu Sep 25, 2014 6:06 pm
by Dave Zowasky
Thank you for the links on the subject.
Now that I have updated the syntax of my listbox
I would like to get the scrolling characteristics
to be like they were. In my older listbox I am able
roll the scroll bar on the mouse and the have the
selected item in the listbox scroll up and down in
my listbox. Is it possible to do this and if so is there a
good example of how to do it?

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Thu Sep 25, 2014 8:13 pm
by karinha
Sorry.

Do not understand your question.

Regards.

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Thu Sep 25, 2014 8:48 pm
by Dave Zowasky
In our existing application here is an example of our code for the listbox

Code: Select all

 @ 3,8 listbox olba;
  fields prgdispmru(xa,a);
  size 100,100;
  header "MRU-Files";
  of oFldb:aDialogs[ 1 ];
  on dblclick(xfile:=xa[a],winexec("c:\windows\notepad "+xfile))
  a:=1
  olba:bgotop    = { || a := 1 }
  olba:bgobottom = { || a := eval( olba:blogiclen ) }
  olba:bskip     = { | nwant, nold | nold := a, a += nwant,;
  a := max( 1, min( a, eval( olba:blogiclen ) ) ),;
  a - nold }
  olba:blogiclen = { || len( xa ) }
  olba:calias    = "array"
 
I can rewrite the code this way and it will work

Code: Select all

@  3, 8 LISTBOX olba VAR citem ITEMS xa;
         SIZE 100, 100;
         of oFldb:aDialogs[ 1 ];
         on dblclick(xfile:=xa[olba:getpos()],winexec("c:\windows\notepad "+xfile))
 
My problem is I am not sure what to do.

It seems that the listbox has gone thru a lot of changes and that my approach
to it's use may antiquated.

In a more complex application here is how we use it

Code: Select all

 @ 12,1 listbox olba;
 fields ctl49700a(xa,a);
 size 480,100;
 header "Segment Data";
 of oFld:aDialogs[ 1 ]
 a:=1
 olba:bgotop    = { || a := 1 }
 olba:bgobottom = { || a := eval( olba:blogiclen ) }
 olba:bskip     = { | nwant, nold | nold := a, a += nwant,;
 a := max( 1, min( a, eval( olba:blogiclen ) ) ),;
 a - nold }
 olba:blogiclen = { || len( xa ) }
 olba:calias    = "array"
 olba:bchange:={|| xinv:=ctl49700f(xsega,a,xtype),;
                    xb:=ctl49700e(xa[a],xst,xds,xss),;
                    b:=1,;
                    olbb:refresh(),;
                    xln:=ctl49700h(a,maxseg),;
                    oxln:refresh(),;  
                    oxinv:refresh() }


**************************
 @ 12,62 listbox olbb;
 fields ctl49700a(xb,b);
 size 200,100;
 header "Element Data";
 of oFld:aDialogs[ 1 ]
 b:=1
 olbb:bgotop    = { || b := 1 }
 olbb:bgobottom = { || b := eval( olbb:blogiclen ) }
 olbb:bskip     = { | nwant, nold | nold := b, b += nwant,;
 b := max( 1, min( b, eval( olbb:blogiclen ) ) ),;
 b - nold }
 olbb:blogiclen = { || len( xb ) }
 olbb:calias    = "array"

* olbb:bGotFocus := {|| IF(SELECT(olbb) = 0,;
*                   (olbb := NIL,oFld:aDialogs[ 1 ]:SetFocus(),;
*                   oFld:aDialogs[ 1 ]:PostMsg(WM_CLOSE),;
*                   oFld:aDialogs[ 1 ] := NIL ) , ) }


**************************
 @ 4,1 listbox olbc;
 fields ctl49700a(xc,c);
 size 400,100;
 header "Item";
 of oFld:aDialogs[ 1 ]
 c:=1
 olbc:bgotop    = { || c := 1 }
 olbc:bgobottom = { || c := eval( olbc:blogiclen ) }
 olbc:bskip     = { | nwant, nold | nold := c, c += nwant,;
 c := max( 1, min( c, eval( olbc:blogiclen ) ) ),;
 c - nold }
 olbc:blogiclen = { || len( xc ) }
 olbc:calias    = "array"

 olbc:bchange:={||a:=ctl49700q(xsega,c,xtype),;
                  olba:refresh(),;
                   xinv:=ctl49700f(xsega,a,xtype),;
                   xb:=ctl49700e(xa[a],xst,xds,xss),;
                   b:=1,;
                   olbb:refresh(),;
                   xln:=ctl49700h(a,maxseg),;
                   oxln:refresh(),;  
                   oxinv:refresh()  }
 
I guess the simple question is what can I add to my existing code to correct
the DBCMD/2001 Workarea not in use: ORDKEYNO error?

Thanks

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Mon Oct 06, 2014 3:53 pm
by James Bott
Dave,

I am guessing that sometimes a workarea with an index is selected and other times there is none and thus the error.

The way to test this is to create a small test program and test it with and without a selected workarea.

Of course this should not be a problem since you are using an array, but if it is a problem then the best solution is to fix the listbox class.

Regards,
James

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Tue Oct 07, 2014 12:14 pm
by Euclides
Dave, this way it should work:

Code: Select all

//  Program TESTLBX1.PRG
#include "fivewin.ch"

Function Main()
local oDlg, oLba, prgdispmru:={{"TESTLBX1.PRG"}}, xfile

   DEFINE DIALOG oDlg

   @ 1,1 listbox olba fields prgdispmru[oLba:nAt, 1];
         size 100,50  header "MRU-Files"  of oDlg ;
         on dblclick(xfile:=prgdispmru[oLba:nAt, 1], winexec("c:\windows\notepad "+xfile))
   oLba:SetArray( prgdispmru)
   ACTIVATE DIALOG oDlg
return nil 
As you can see in fivewin.ch:
@ <nRow>, <nCol> LISTBOX VAR : is translated to TListBox():New( <nRow>, <nCol> and works with single arrays

@ <nRow>, <nCol> LISTBOX FIELDS : is translated to TWBrowse():New( <nRow>, <nCol>, ...) and works with arrays inside arrays.
HTH & regards
Euclides

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Thu Oct 09, 2014 3:51 pm
by James Bott
Any progress on this?

I think you could force the error by switching to a new workarea before calling the listbox. This would confirm the cause of the problem.

James

Re: Error DBCMD/2001 Workarea not in use: ORDKEYNO

Posted: Mon Oct 13, 2014 7:50 pm
by Dave Zowasky
Euclides and James,

I appreciate your help.

I have modified my code in a fashion that Euclides has posted.
So far so good.

Code: Select all

function testlb2()
local odlg
local xa:=array(2)
local a:=1
local olba
xa[1]:="atest"
xa[2]:="btest"
 DEFINE DIALOG oDlg
@ 0,0 listbox olba;
fields prgdispmru(xa,oLba:nAt);
  size 100,50;
  of odlg;
  on dblclick(msginfo(str(oLba:nAt)))
 oLba:SetArray(xa)
ACTIVATE DIALOG oDlg
return(nil)
 
I should know soon how well it is working.

Thanks Much
Dave