Page 1 of 1
ADS NTX AND CDX
Posted: Sat Jun 18, 2011 3:49 am
by Janko
Roger,
is it possible to handle FOXCDX and DBFNTX systems VIA ADSDBE at the same time in same application? I have plenty of programs using both sorts of tables, but only prevailing one is running VIA ADS. Is there a solution?
Regards
Janko
Re: ADS NTX AND CDX
Posted: Sat Jun 18, 2011 7:20 am
by rdonnay
This looks like a limitation of ADSDBE, but I am not entirely sure about this.
I'm going to write a test program to see if I can find a workaround.
Re: ADS NTX AND CDX
Posted: Sat Jun 18, 2011 7:52 am
by rdonnay
Here is the solution. You simply need to call AdsNtx() before opening NTX databases and AdsCdx() before opening CDX databases.
Code: Select all
#INCLUDE "dcdialog.CH"
#INCLUDE "adsdbe.CH"
#Pragma Library("dclipx.lib")
#Pragma Library("dclip1.lib")
FIELD test1, test2
FUNCTION Main()
LOCAL cSession, oSession, cError, cDrive, aStru, i
IF ! DbeLoad( "ADSDBE" )
DC_WinAlert( "Unable to load ADSDBE", "ADS Server",, ;
XBPMB_WARNING + XBPMB_APPMODAL )
QUIT
ENDIF
cDrive := CurDrive() + ':'
cSession := "DBE=ADSDBE;SERVER=" + cDrive
oSession := DacSession():new(cSession)
IF !oSession:isConnected()
cError := "Error Code: " + Alltrim(Str(oSession:getLastError())) + Chr(13) + oSession:getLastMessage()
DC_WinAlert( "Unable to establish connection to ADS Server" + Chr(13) + cError )
QUIT
ENDIF
aStru := {{ 'TEST1','C',10,0 }, ;
{ 'TEST2','C',10,0 }}
AdsNtx()
DbCreate( 'TESTNTX.DBF', aStru, 'ADSDBE' )
USE TESTNTX EXCLUSIVE NEW
INDEX ON TEST1 TAG 'TEST1' TO TESTNTX1
INDEX ON TEST2 TAG 'TEST2' TO TESTNTX2
SET INDEX TO TESTNTX1, TESTNTX2
FOR i := 1 TO 9
TESTNTX->(dbAppend())
REPLACE TESTNTX->test1 WITH 'TEST1_' + Alltrim(Str(i))
REPLACE TESTNTX->test2 WITH 'TEST2_' + Alltrim(Str(i))
NEXT
TESTNTX->(dbGoTop())
AdsCdx()
DbCreate( 'TESTCDX.DBF', aStru, 'ADSDBE' )
USE TESTCDX EXCLUSIVE NEW
INDEX ON TEST1 TAG 'TEST1' TO TESTCDX
INDEX ON TEST2 TAG 'TEST2' TO TESTCDX
FOR i := 1 TO 9
TESTCDX->(dbAppend())
REPLACE TESTCDX->test1 WITH 'TEST1_' + Alltrim(Str(i))
REPLACE TESTCDX->test2 WITH 'TEST2_' + Alltrim(Str(i))
NEXT
TESTCDX->(dbGoTop())
DC_Dot()
RETURN nil
* -------------
PROC appsys ; RETURN
* -------------
FUNCTION AdsNtx()
dbeSetDefault('ADSDBE')
DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_NTX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_NTX )
RETURN nil
* ---------
FUNCTION AdsCdx()
dbeSetDefault('ADSDBE')
DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )
RETURN nil