Page 1 of 1

ads y archivo add.

Posted: Thu Feb 02, 2012 11:33 am
by Ruben Fernandez
Hola amigos:

Estoy comenzando con un proyecto nuevo y como es chico, voy a hacerlo con ADS Local.(Pero deseo usar .add por si las _)

Si alguien me puede dar una mano con los archivos .ADD Advantage Data Dictionary, se lo agradezco.
Como lo creo, como accedo a las bases de datos a traves del archivo. Como abro el mismo archivo 2 veces.

Muchas gracias.

(Despues vendran las de MySQL.)

Saludos
Ruben Fernmandez.

Re: ads y archivo add.

Posted: Thu Feb 02, 2012 4:35 pm
by Patricio Avalos Aguirre
Hola

Los diccionario se crean con el Data Arquitec,

te adjunto el codigo inicial para conectarte al diccionario

Code: Select all

#include "ads.ch"
ANNOUNCE RDDSYS

procedure Main()

 // AQUI TU PROGRAMA PRINCIPAL

Return
//---------------------------------------------------------------------------------
Init Procedure Inicio()
    local hConnection := 0, lConecte := .f.

    SET MULTIPLE ON
    SET EPOCH TO 1950                            // Admite los años desde el 1990 en adelante
    SET CONFIRM ON
    SET CENTURY ON                               // 4 d¡gitos a¤o
    SET DATE FORMAT "DD/MM/YYYY"                 // formato dd-mm-yyyy
    SET DELETED ON                               // Impedir ver registros marcados borrar
    SetHandleCount( 150 )                        // M ximo n§ ficheros abiertos
    SET _3DLOOK ON
    SET CHARTYPE TO ANSI

    rddregister( "ADS", 1 )
    rddSetDefault( "ADS" )

    AdsSetCharType("OEM")
   AdsSetDateFormat( "DD/MM/YYYY" )
    AdsSetEpoch( 1950 )

    MsgRun( "Espere un momento, Conectando con el Servidor", "Sistema",;
             { || lConecte := AdsConnect60( "RUTA\ARCHIVO.ADD", ADS_LOCAL_SERVER, "adssys", "pass",, @hConnection ) } )

    if !lConecte
        MsgInfo( "Hay problemas en el servidor"+CRLF+"intente mas tarde", "usuario" )
        PostQuitMessage(0)
        QUIT
        return
    endif

    AdsSetServerType( ADS_LOCAL_SERVER )
    AdsSetFileType( ADS_CDX )
    AdsLocking( .T. )
    AdsRightsCheck( .T. )

return
//-----------------------------------------------------------------------------------------------------------------
procedure RddInit()
    REQUEST HB_LANG_ES
    REQUEST DBFCDX, DBFFPT
    REQUEST ADS
    REQUEST OrdKeyCount, OrdKeyNo, OrdKeyGoto, ADSKeyNo, AdsSetRelKeyPos, AdsGetRelKeyPos
return
//-----------------------------------------------------------------------------------------------------------------
 

Re: ads y archivo add.

Posted: Thu Feb 02, 2012 5:29 pm
by Ruben Fernandez
Muchas gracias Patricio.

Pruebo y mas tarde seguire molestando.

Muchas gracias de nuevo.

Saludos
Ruben Fernandez

Re: ads y archivo add.

Posted: Sun Feb 05, 2012 8:20 pm
by gabo
Ruben. Para crear diccionarios de ADS desde codigo

Code: Select all

 FUNCTION Main()
   LOCA lCreate
   LOCAL oIniFile, cLanIp, cLanPort, cInternetIp, cInternetPort, cServerType, cServerName, cDictionary
   LOCAL cIpFija, cPortFijo, cRootDrive, cUserServer, cServerPath, cPassServer, cErrorAds, cImageFondo

    REQUEST ADS ,  ADSKeyno, ADSKeycount, AdsGetRelKeyPos,  AdsSetRelKeyPos
    RddRegister( "ADS", 1 )      // ADS for Harbour
    RddSetDefault( "ADS" )       // ADS for Harbour
    AdsLocking( lLocking )
    AdsRightsCheck( lRightsCheck )
    AdsTestRecLocks( .T. )
    ADSCACHEOPENTABLES( nCacheOpenTables )
    AdsSetFileType( VAL( cServerType ) ) /// 1 NTX / 2 CDX / 3 ADT
    AdsSetDateFormat( cDateFormat )

    oIniFile     := TIniFile():New( cPathExe + "Ads.ini" )

    cLanIp       := oIniFile:ReadString( "SETTINGS", "LAN_IP", "" )
    cLanPort     := oIniFile:ReadString( "SETTINGS", "LAN_PORT", "" )
    cInternetIp  := oIniFile:ReadString( "SETTINGS", "INTERNET_IP", "" )
    cInternetPort:= oIniFile:ReadString( "SETTINGS", "INTERNET_PORT", "" )
    cServerType  := oIniFile:ReadString( "SETTINGS", "ADS_SERVER_TYPE", "" )
    cServerName  := oIniFile:ReadString( "SETTINGS", "ADS_SERVER_NAME", "" )
    cServerPath  := oIniFile:ReadString( "SETTINGS", "ADS_SERVER_PATH", "" )
    cImageFondo  := oIniFile:ReadString( "SETTINGS", "ADS_SERVER_JPEG", "" )

    lCreate := AdsDdCreate( cNameDictionary,, "Diccionario de datos ADS")   
 
   IF ! lCreate
       Alert( "DICCIONARIO DE DATOS NO CREADO")
      RETURN
   ENDIF
 IF cServerType == "1"
    cDictionary:= cServerPath + cServerName
    cIpFija    := ""
    cPortFijo  := ""
    cRootDrive := ""
 ELSEIF cServerType =="2" .OR. cServerType =="3"
    cDictionary:= cServerPath + cServerName
    cIpFija    := cLanIp
    cPortFijo  := ":" + cLanPort
    cRootDrive := "\\"
 ELSEIF cServerType == "4" .OR. cServerType =="7"
    cDictionary:= cServerPath + cServerName
    cIpFija    := cInternetIp
    cPortFijo  := ":" + cInternetPort
    cRootDrive := "\\"
 ENDIF
 AdsSetServerType( Val(cServerType) )

   oWait:= TMsgWait():New("CONECTANDOSE AL SERVIDOR REMOTO... UN MOMENTO POR FAVOR" )

  IF AdsConnect60( cRootDrive + cIpFija + cPortFijo + cDictionary, Val(cServerType), "AdsSys", "Edss18462",,@hCONN  )
      oWait:Close()
  ELSE
     oWait:Close()
     nError:= AdsGetLastError(@cErrorAds)
     Alert(  cErrorAds,;
             "ERROR DE ADS...")
    DBCloseAll()
    QUIT
 ENDIF
  
 // SI QUIERES USAR SQL CON LAS TABLAS QUE TENGAS EN EL DICCIONARIO.. TE RECOMIENDO QUE USES LAS TABLAS NATIVAS DE ADS. ADT EN VEZ DE DBF

 oWait:= TMsgWait():New("ABRIENDO ARCHIVOS DE DATOS, ESPERE UN MOMENTO POR FAVOR..." )

 lSqlQuery:= .F.
 cSqlQuery:= "SELECT * FROM CATGASTO ORDER BY ID_GASTO"
 IF Select( "CATGAS" ) > 0
    catgas->( DBCloseArea() )
 ENDIF
 DbSelectArea( 0 )
 IF ADSCreateSQLStatement( 'CATGAS', 3, hCONN )
    lSqlQuery:= ADSExecuteSQLDirect( cSqlQuery )
    IF !lSqlQuery
       oWait:Close()
       nError:= AdsGetLastError(@cErrorAds)
       ALERT( cErrorAds,'ERROR SCRIPT DE ADVANTAGE...'  )
       RETURN NIL
    ENDIF
 ELSE
    oWait:Close()
    nError:= AdsGetLastError(@cErrorAds)
    ALERT( cErrorAds,'ERROR SCRIPT DE ADVANTAGE...' )
    RETURN NIL
 ENDIF
 aGastos:= {}
 DBSelectArea( "CATGAS"); DBGoTop()
 DO WHILE !Eof()
    AAdd( aGastos, { catgas->ID_GASTO, Left(catgas->NOMBRE,25), catgas->TIPO, IF( catgas->TIPO="E", "EGRESO", "INGRESO") } )
    DBSkip()
 ENDDO
 
 
Saludos
GABO

Re: ads y archivo add.

Posted: Mon Feb 06, 2012 10:26 am
by Ruben Fernandez
Gracias gabo: Estoy intentado por ahora en modo local con disccionario de datos.

Saluydos y gracias de nuevo.

Ruben Fernandez