Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Advantage Database Server 12.0 1

Status
Not open for further replies.

Goofus828

Programmer
Nov 9, 2005
127
0
0
US
Hi all,
this is a shot in the dark.

Does anyone use ADS 12 and xBase++.

Thanks
 
Hi,

Do you use ADS these days ?
if you do, what version ?

We use V8 on Novell
 
Just started. Setup is tricky.
We have old clipper program that we had a consultant convert to xBase++ 2.0 and ADS V12.00

Tuff to find any support for ADS since SAP bought it.
 
We pretend to migrate to Windows based programs in a couple of years or more and need to keep ADS working with Clipper but unfortunately SAP discontinued the old versions of ADS. We offered them to buy new licenses but they refused to do it...figure it out...It's a calvary now to handle the licenses when we add new users.

By the way, don't you have the DISCONN.OBJ for Clipper ?

Thank you.
 
Sorry I do not have the Disconn.obj. I searched our entire network and nothing.
 
We have been using Xbase++ 1.9 and 2.0 with ADS for both OES/SLES and windows since 2013, formerly clipper/novell since 1995. Have been using version 12 in a 2 user development workstation but did not see any issues. Setup of ADS is not tricky, unless you are working in a linux environment. Only exposure to that is OES/SLES and it was fun. We have 200+ users.

We are a dealer and support directly from SAP has been somewhat OK. We only need them for somewhat tricky questions and they attempt to resolve the issue. Help with getting the OES environment initially setup was good.
 
Hi Cliff.

We have a test server and a production server and my local drive.
No problem running off the production server because that is where ADS is installed.
Trouble we are having is running off of the Test server because that is on a different server, which we do not have ADS installed on. So we get the error message that ADS cannot see the files because they are on a server that is different than the one the EXE was started on.


 
You have two easy solutions. Make certain the adsloc32.dll in the folder where you ads enabled application is located and configure your ADS.INI file to use the local version. Most things should be supported, I can't recall the few things that are not.

I did this method for a long time on my development computer and some user would use this in production, though it is supposed to not have more than 10 users.

For testing purposes, the best way is to use the 2 user test version of ads. It is a full version of ADS (I don't think it would support replication), but allows 2 user so you can test your multi-user environments. Just load it on your test work station and the test server. There are versions available for ADS11 and ADS12. There is no cost for them and no license. It is in the SDK.


This above is the link to the development SDK version. There also is a 32 bit version.
 
Thanks Cliff.

I will try this soon and let you know how I make out!
 
Hi Cliff,

I had those file and Installed them.

here is my situation:
ADS is installed on the server FoxA - when I run my production EXE from this server it works.

My testing server is called VFoxB - when I run my EXE from this server it does not work because.

In the Advantage Data Architect (ADR) when I try to create a database with the files from VFoxB I get the error: Error 5020: The path given was not valid. The path cannot be on a different server [evil]

Is there a way to have ADS/ADR have Data Dictionaries across servers?

Thanks!

 
A data dictionary cannot have files on 2 different servers. What you need to do is have a data dictionary for the files on each server. Then you create a 2nd database connection to the 2nd server and then you can access those files.

This is some code fragments. Drive G: is mapped to Server1 and drive H: is mapped to Server2. A separate ADS server is loaded on each server with its own license.

/*
This program copies the existing definition from g:\FCA\DATA to each of
the other companies
*/

#INCLUDE "AXCDXCMX.CH"

clear

oDACSession(1):SetDefault()

select 0
use fca SHARED VIA 'ADSDBE' Alias fca
select 0
use G:\aff\data\fca SHARED via 'ADSDBE' alias fcaAFF
select 0
use G:\dfs\data\fca SHARED via 'ADSDBE' alias fcaDFS
select 0
use G:\bfc\data\fca SHARED via 'ADSDBE' alias fcaBFC

oDACSession(2):SetDefault()

select 0
use H:\hg1\data\fca SHARED via 'ADSDBE' alias fcaHG1
select 0
use H:\hg2\data\fca SHARED via 'ADSDBE' alias fcaHG2
select 0
use H:\hg4\data\fca SHARED via 'ADSDBE' alias fcaHG4
select 0
use H:\afh\data\fca SHARED via 'ADSDBE' alias fcaafh

This is the modified dbesys that establishes 2 connections one to drive g: (server1) and one to drive h: (server2) The connection is only important when opening the file, they you access via the alias. You much close both connections also.

dbesys.prg (modified for 2 data connections.


// Xbase++ DatabaseEngine startup/preloader
//
// Syntax:
// DbeSys() is called automatically at program start before the
// function MAIN.
//
//////////////////////////////////////////////////////////////////////


#include "ads.ch"
#include "adsdbe.ch"

#define MSG_DBE_NOT_LOADED " database engine not loaded"
#define MSG_DBE_NOT_CREATED " database engine could not be created"

STATIC oDACSession1
STATIC oDACSession2

*******************************************************************************
* DbeSys() is always executed at program startup
*******************************************************************************

PROCEDURE dbeSys()
//
// The lHidden parameter is set to .T. for all database engines
// which will be combined to a new abstract database engine.
//
LOCAL aDbes := { { "DBFDBE", .T.},;
{ "NTXDBE", .T.},;
{ "CDXDBE", .T.},;
{ "DELDBE", .F.},;
{ "SDFDBE", .F.},;
{ "ADSDBE", .F.} }
LOCAL aBuild :={ { "DBFNTX", 1, 2 },;
{ "DBFCDX", 1, 3} }
LOCAL i
LOCAL cSession
LOCAL oThread

//
// Set the sorting order and the date format
//
SET COLLATION TO AMERICAN // changed for ADS
SET DATE TO AMERICAN

//
// load all database engines
//
FOR i:= 1 TO len(aDbes)
IF ! DbeLoad( aDbes[1], aDbes[2])
Alert( aDbes[1] + MSG_DBE_NOT_LOADED , {"OK"} )
ENDIF
NEXT i

//
// create database engines
//
FOR i:= 1 TO len(aBuild)
IF ! DbeBuild( aBuild[1], aDbes[aBuild[2]][1], aDbes[aBuild[3]][1])
Alert( aBuild[1] + MSG_DBE_NOT_CREATED , {"OK"} )
ENDIF
NEXT i
cServer := 'G:'
cServer := Upper(cServer)

cSession := "DBE=ADSDBE;SERVER=" + cServer

oDACSession1 := DacSession():new(cSession)

IF !oDACSession1:isConnected()
Alert( "Unable to establish connection to ADS Server" + ';' + ;
"Error Code: " + Alltrim(Str(oDACSession1:getLastError())) + ';' + ;
oDACSession1:getLastMessage() + ";" + "Using DBFCDX Driver", {"OK"} )
ELSE
dbeSetDefault('ADSDBE')
DbeInfo( COMPONENT_DATA, ADSDBE_MEMOBLOCKSIZE, 64 )
DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_PROPRIETARY_LOCKING )
ENDIF

cServer := 'H:'
cServer := Upper(cServer)

cSession := "DBE=ADSDBE;SERVER=" + cServer

oDACSession2 := DacSession():new(cSession)

IF !oDACSession2:isConnected()
Alert( "Unable to establish connection to ADS Server" + ';' + ;
"Error Code: " + Alltrim(Str(oDACSession2:getLastError())) + ';' + ;
oDACSession2:getLastMessage() + ";" + "Using DBFCDX Driver", {"OK"} )
ELSE
dbeSetDefault('ADSDBE')
DbeInfo( COMPONENT_DATA, ADSDBE_MEMOBLOCKSIZE, 64 )
DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_PROPRIETARY_LOCKING )
ENDIF

AX_AXSLocking( .T. ) // Set AXS locking to non clipper compatible
AX_RightsCheck( .T. ) // Turn off networks right checking // chg 10/1



// AX_RIGHTSCHECK(.T.) // CHANGED FOR ADS TESTING

// changed above for testing

// AX_ChooseOrdBagExt( 'CDX') //

RETURN

FUNCTION oDACSession(nNum)
IF nNum = 1
RETURN oDACSession1
ENDIF

RETURN oDACSession2

//
// EOF

 
Hey Cliff,
I was able to get it to work finally.
Thanks for your help.
Josh
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top