Error DBCMD/2001 Workarea not in use: ORDLISTADD
Moderator: Rathinagiri
-
- Posts: 157
- Joined: Mon Jun 07, 2010 2:24 am
Error DBCMD/2001 Workarea not in use: ORDLISTADD
Hello everyone:
Here is the story. I defined a schedule task with windows, and run my application at 12:20 every mon~Fri.
『Error DBCMD/2001 Workarea not in use: ORDLISTADD』keeps coming out on and off. I pretty sure that casue is no because of using by someone else at same time.
What else going worng?
Please Help!
sincerely chen min
Following are whole message
Date:11/14/11 Time: 12:20:01
Error DBCMD/2001 Workarea not in use: ORDLISTADD
Called from ORDLISTADD(0)
Called from DBSETINDEX(0)
Called from OPENDB(1107)
Called from WHENSTART$(757)
Following are partical source code
init function WhenStart()
set softseek OFF
set delete ON
Local m_driver:=upper(left(GetCurrentFolder(),1))
if m_driver=='J'
OpenDBt()
elseif m_driver=='X'
OpenDB()<-----------line 757
else
MsgInfo('無法開啟資料庫,按確定結束!','WhenStart()')
Form_upload.RELEASE
endif
return
OpenDB() and OpenDBt() are complete same.
OpenDB()
IF file("X:\DM_UPLOAD\ULHI01.ntx") .and. file("X:\DM_UPLOAD\ULHI02.NTX");
.and. file("X:\DM_UPLOAD\ULHI03.NTX") .and. file("X:\DM_UPLOAD\ULHI04.NTX");
.and. file("X:\DM_UPLOAD\ULHI05.NTX")
USE X:\DM_UPLOAD\ULHIS INDEX;
X:\DM_UPLOAD\ULHI01,;
X:\DM_UPLOAD\ULHI02,;
X:\DM_UPLOAD\ULHI03,;
X:\DM_UPLOAD\ULHI04,;
X:\DM_UPLOAD\ULHI05 EXCLUSIVE<------line 1107
if neterr()
msginfo("Fail to open database, someone is using it!")
close
endif
ELSE
ENDIF
......
return
Here is the story. I defined a schedule task with windows, and run my application at 12:20 every mon~Fri.
『Error DBCMD/2001 Workarea not in use: ORDLISTADD』keeps coming out on and off. I pretty sure that casue is no because of using by someone else at same time.
What else going worng?
Please Help!
sincerely chen min
Following are whole message
Date:11/14/11 Time: 12:20:01
Error DBCMD/2001 Workarea not in use: ORDLISTADD
Called from ORDLISTADD(0)
Called from DBSETINDEX(0)
Called from OPENDB(1107)
Called from WHENSTART$(757)
Following are partical source code
init function WhenStart()
set softseek OFF
set delete ON
Local m_driver:=upper(left(GetCurrentFolder(),1))
if m_driver=='J'
OpenDBt()
elseif m_driver=='X'
OpenDB()<-----------line 757
else
MsgInfo('無法開啟資料庫,按確定結束!','WhenStart()')
Form_upload.RELEASE
endif
return
OpenDB() and OpenDBt() are complete same.
OpenDB()
IF file("X:\DM_UPLOAD\ULHI01.ntx") .and. file("X:\DM_UPLOAD\ULHI02.NTX");
.and. file("X:\DM_UPLOAD\ULHI03.NTX") .and. file("X:\DM_UPLOAD\ULHI04.NTX");
.and. file("X:\DM_UPLOAD\ULHI05.NTX")
USE X:\DM_UPLOAD\ULHIS INDEX;
X:\DM_UPLOAD\ULHI01,;
X:\DM_UPLOAD\ULHI02,;
X:\DM_UPLOAD\ULHI03,;
X:\DM_UPLOAD\ULHI04,;
X:\DM_UPLOAD\ULHI05 EXCLUSIVE<------line 1107
if neterr()
msginfo("Fail to open database, someone is using it!")
close
endif
ELSE
ENDIF
......
return
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Hi
first of all I suggest to you to use this function (and related) to open table DBUSEAREA(....)
Little example
and bout ORDLISTADD, little example
As yu can see I always used cSomePath. You can create it as you prefer and then it's the same for table (dbf) and index (ntx). This can be an
About yor problem: before use OpenDbt() and OpenDb() all table area closed? Do you use the same alias? Are you shure only one time OpenDbt() OR opneDb() are execute......about commands _SET_* ?
Why do you write two functions and they do the same things?
Cheers
first of all I suggest to you to use this function (and related) to open table DBUSEAREA(....)
Little example
Code: Select all
LOCAL cFileName := hb_fnameMerge( cSomePath, cTableName, "dbf" )
LOCAL cAlias := cTableName // as you prefer
LOCAL lNewArea := .T. // as you prefer
LOCAL lNotShared := .F. // as you prefer
LOCAL lReadOnly := .F. // as you prefer
DBUSEAREA( lNewArea, DBSETDRIVER(), cFileName, cAlias, lNotShared, lReadOnly )
Code: Select all
LOCAL cFileName
cFileName := hb_fnameMerge( cSomePath, "index1", "ntx" )
ORDLISTADD( cFileName )
cFileName := hb_fnameMerge( cSomePath, "index2", "ntx" )
ORDLISTADD( cFileName )
etc
ORDSETFOCUS(1) // or 2 or 3
About yor problem: before use OpenDbt() and OpenDb() all table area closed? Do you use the same alias? Are you shure only one time OpenDbt() OR opneDb() are execute......about commands _SET_* ?
Why do you write two functions and they do the same things?
Cheers
Luigi from Italy
www.L3W.it
www.L3W.it
-
- Posts: 157
- Joined: Mon Jun 07, 2010 2:24 am
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Dear l3whmg:l3whmg wrote:Hi
first of all I suggest to you to use this function (and related) to open table DBUSEAREA(....)
Little example
...
Cheers
Sorry for replying so late.
Thanks for you help, and it is reall helpful.
After 'Hunting' for couples of days. Finally I knew the reason why the errors occures!
My boss using the application while I set database exclusived for synchronization.
I coding and testing in usb disk, so I make opendb() and opendbt() for real run and testing.
I let application tell which one to call while run from server or usb disk. Thus I don't have to switch for.
Thanks again for you help.
Sincerely chen min
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Hi Chen Min,
no problem for "late". I'm happy you found the problem and I want add these to help you again
A simple function related with previous example:
(1) here you can intercept errors while opening a table. And this include sharing/exclusive problem.
Cheers
no problem for "late". I'm happy you found the problem and I want add these to help you again
A simple function related with previous example:
Code: Select all
nSecondsToWait := 3 // or 5.....
lOpen := .F.
IF SELECT( cAlias ) <= 0
DO WHILE .T.
DBUSEAREA( lNewArea, DBSETDRIVER(), cFileName, cAlias, lNotShared, lReadOnly )
IF nSecondsToWait <= 0
EXIT
ELSEIF NETERR()
nSecondsToWait -= 1
INKEY( 1 )
ELSE
lOpen := .T.
EXIT
ENDIF
ENDDO
IF lOpen == .F.
YourErrorHandler( "Can't open table" ) <====(1)
ENDIF
ELSE
YourErrorHandler( "Alias already in use" )
ENDIF
RETURN lOpen // can be .T. or .F.
Cheers
Luigi from Italy
www.L3W.it
www.L3W.it
-
- Posts: 157
- Joined: Mon Jun 07, 2010 2:24 am
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Dear l3whmg:l3whmg wrote:Hi Chen Min,
no problem for "late". I'm happy you found the problem and I want add these to help you again
......
Cheers
Thank you very very much about those samples for me.
I don't figue out how nSecondsToWait got value for it ?
Could you explain it to me? Please.
Sincerely chen min
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Hi Chen Min.
Firts of all: this is one solution, there are many other as you prefer.
First: you are within a loop and you are trying to open a table
When it will be ended?
A) when a simple timer is finished
B) when table is opened
C) about this
There are many reasons to receive an error: ie an index rebuild. So: I wait a while and then I retry to open (3 or 5 secs for example).
I suggest to you to remember: write your programs thinking to be in a network where several users can do more actions based upon your code. For example: I write my programs without using reindex because it requires "exclusive" opening; for me this is a special event and must be done with database closed for end users. But this it is my opinion.
Cheers
p.s. you can use the same concept with RLOCK()......
Firts of all: this is one solution, there are many other as you prefer.
First: you are within a loop and you are trying to open a table
Code: Select all
DO WHILE .T.
DBUSEAREA( lNewArea, DBSETDRIVER(), cFileName, cAlias, lNotShared, lReadOnly )
ENDDO
A) when a simple timer is finished
Code: Select all
IF nSecondsToWait <= 0
EXIT
Code: Select all
ELSE
lOpen := .T.
EXIT
ENDIF
Code: Select all
ELSEIF NETERR()
nSecondsToWait -= 1
INKEY( 1 )
I suggest to you to remember: write your programs thinking to be in a network where several users can do more actions based upon your code. For example: I write my programs without using reindex because it requires "exclusive" opening; for me this is a special event and must be done with database closed for end users. But this it is my opinion.
Cheers
p.s. you can use the same concept with RLOCK()......
Luigi from Italy
www.L3W.it
www.L3W.it
-
- Posts: 157
- Joined: Mon Jun 07, 2010 2:24 am
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
Thanks again!huangchenmin wrote:l3whmg wrote:Hi Chen Min,
no problem for "late". I'm happy you found the problem and I want add these to help you again
...
Sincerely chen min
Being very helpful to me.
Sincerely chen min
Re: Question about 『Error DBCMD/2001 Workarea not in use: OR
i had the same error with virtualgrid
Function MaakBrowseDbf1()
use dbf1.dbf
MaakBrowse()
Function MaakBrowseDbf2()
use dbf2.dbf
MaakBrowse()
Function MaakBrowse()
local o
o:=Virtualgrid:New()
o:workarea:=alias()
This gives the error.
The solution is:
select 1
use dbf1
select 2
use dbf2
Function MaakBrowseDbf1()
use dbf1.dbf
MaakBrowse()
Function MaakBrowseDbf2()
use dbf2.dbf
MaakBrowse()
Function MaakBrowse()
local o
o:=Virtualgrid:New()
o:workarea:=alias()
This gives the error.
The solution is:
select 1
use dbf1
select 2
use dbf2
huangchenmin wrote:Hello everyone:
Here is the story. I defined a schedule task with windows, and run my application at 12:20 every mon~Fri.
『Error DBCMD/2001 Workarea not in use: ORDLISTADD』keeps coming out on and off. I pretty sure that casue is no because of using by someone else at same time.
What else going worng?
Please Help!
sincerely chen min
Following are whole message
Date:11/14/11 Time: 12:20:01
Error DBCMD/2001 Workarea not in use: ORDLISTADD
Called from ORDLISTADD(0)
Called from DBSETINDEX(0)
Called from OPENDB(1107)
Called from WHENSTART$(757)
Following are partical source code
init function WhenStart()
set softseek OFF
set delete ON
Local m_driver:=upper(left(GetCurrentFolder(),1))
if m_driver=='J'
OpenDBt()
elseif m_driver=='X'
OpenDB()<-----------line 757
else
MsgInfo('無法開啟資料庫,按確定結束!','WhenStart()')
Form_upload.RELEASE
endif
return
OpenDB() and OpenDBt() are complete same.
OpenDB()
IF file("X:\DM_UPLOAD\ULHI01.ntx") .and. file("X:\DM_UPLOAD\ULHI02.NTX");
.and. file("X:\DM_UPLOAD\ULHI03.NTX") .and. file("X:\DM_UPLOAD\ULHI04.NTX");
.and. file("X:\DM_UPLOAD\ULHI05.NTX")
USE X:\DM_UPLOAD\ULHIS INDEX;
X:\DM_UPLOAD\ULHI01,;
X:\DM_UPLOAD\ULHI02,;
X:\DM_UPLOAD\ULHI03,;
X:\DM_UPLOAD\ULHI04,;
X:\DM_UPLOAD\ULHI05 EXCLUSIVE<------line 1107
if neterr()
msginfo("Fail to open database, someone is using it!")
close
endif
ELSE
ENDIF
......
return