Ads..por favor

User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Giovany.
Saludos

Ls pruebas que estoy haciendo me funciona bien, tengo un problema , esporadicamente me sale este mensaje,
La Aplicacion no se puede iniciar Correctamente (0x0000142. Haa Click
Para acepta y Cerrarla.
Es como que algo en memoria quedara. despues de salirme del programa.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

ruben Dario wrote:Giovany.
Saludos

Ls pruebas que estoy haciendo me funciona bien, tengo un problema , esporadicamente me sale este mensaje,
La Aplicacion no se puede iniciar Correctamente (0x0000142. Haa Click
Para acepta y Cerrarla.
Es como que algo en memoria quedara. despues de salirme del programa.
Na pasta do seu executavel voce deve descompactar as dll que estão no arquivo zipado Ads10.1_Redistribute.zip

Lembre-se de linkar o programa com as libs de ACE: Ace32_10.1_Bcc5.8.lib ou Ace32_10.1_Bcc7.lib e de Rdd que possui algumas alterações RddAds_10.1_Bcc5.8.lib ou RddAds_10.1_Bcc7.lib

No rdd original não possui a função AdsFlushFileBuffer(), então eu sempre modifico e incluo este função para evitar registros truncados nas conexões locais quando chamado o method Commit()
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Giovany.
Saludos

Gracias por su respuesta, si esto que tu dices es lo que dice, pero no se soluciona.
Este es el codigo que ejecuto.
Este es elemnsaje que sale
La Aplicacion no se puede iniciar Correctamente (0x0000142. Haa Click Para acepta y Cerrarla.

Esporadica mente sale el mensaje , y de pronto se arragla.
Segun veo parece que el problema me lo genera esta funcion TADS_START_CONFIG()
PArece que algo en memoria quedara que impidira que se ejecutara.


Este es el codiog que ejecuto

Code: Select all

#Include "Fivewin.Ch"
#Include "TAds.ch"
#include "xbrowse.ch"

#ifdef __HARBOUR__
   #ifndef __XHARBOUR__
   #xcommand TRY  => BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
   #xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
   #xcommand FINALLY => ALWAYS
   #xtranslate Throw( <oErr> ) => ( Eval( ErrorBlock(), <oErr> ), Break( <oErr> ) )
   #endif
#endif

Static oConexaoDefault

function main()
  Local cComando := "", nModo := 0
  Local lConnected := .f.
  Local oError
  Local oWndMain, oBarMain, oCursorHand
  Local oMenuRdd, oBtnRdd, oBtnServer, oMenuServer,oDatx
  Local oBtnInfo, oBtnExit,n
  Local cSenhaLocal, cSenhaInternet

  //Local oSelf := Self
  Local oDs_CATCUE,cSql,cCursor
  Local aExistingGrps := {}
  Local aColunas := {}, nColTmp := 0
 

    
  cSenhaLocal      := "12345"

 TRY

  
  TADS_START_CONFIG() // Inicia as configurações basicas de ambientes para Advantage
  
  oConexaoDefault := tAdsConnection():New(1,.T.) // Conexão de Numero 1 e .T. para definir conexão padrao
  oConexaoDefault:cDataDictionary  := "J:\PLA3ADS\DADOS\TESTE.ADD"  //".\DADOS\TESTE.ADD"  //ruben
  oConexaoDefault:cSenhaConnect    := "12345"
  oConexaoDefault:nTpConnect       := 1
  lConnected := oConexaoDefault:tAdsConnect()
 
  If !lConnected
    MsgStop("No hay Conexion con el Diccionario de Dados ")
    //Return  //Self
  Else
    MsgInfo("Conexion Con Exito")
    XBROWSER "F_CFOP.ADT" FASTEDIT
    DbUseArea( .T., "ADS" , "F_CFOP", "cust" )
    Browse()
    DbCloseArea()
  EndIf 

 CATCH oError
      MsgStop(oError:Operation+CRLF+oError:Description,"Ado Connection")
      RETURN NIL
  END
 
  oConexaoDefault:tAdsCloseConnect()

      Memory(-1)
      hb_gcAll(.t.)  //para que harbour haga una recogida de "basura".


return nil

 
Este e4s el TADS_START_CONFIG() que tengo

Code: Select all


FUNCTION TADS_START_CONFIG(f_cDirTmp,f_cPassAdsSys)
  Local oConnectionTmp, cDirExpr := "", lCreateTmp := .F.
  Local aStructTmp := {}

  Default f_cDirTmp := "J:\PLA3ADS\DADOSTMP\"  //HB_CURDRIVE()+":\"+CURDIR()+"\DADOSTMP\"
  Default f_cPassAdsSys := ""

  St_cDirTmp := f_cDirTmp 
  
  REQUEST DBFCDX , DBFFPT, DBFDBT
  REQUEST ADS , ADSX, ADSADTX, ADSKeyno, ADSKeycount, AdsGetRelKeyPos,  AdsSetRelKeyPos

    hb_rddADSRegister()
    Set( _SET_OPTIMIZE, .T. ) 
    //Set( _SET_AUTORDER, .T. )
    
    //RddRegister( "ADSADTX", 1 )      // ADS for Harbour
    //RddSetDefault( "ADSADTX" )       // ADS for Harbour

    RddRegister( "ADS", 1 )      // ADS for Harbour
    RddSetDefault( "ADS" )       // ADS for Harbour
    AdsLocking( .T. )
    AdsRightsCheck( .T. )
    AdsTestRecLocks( .T. )
    ADSCACHEOPENTABLES( 10 ) // PADRÃO 0
    AdsCacheOpenCursors( 126 ) // PADRÃO 25
    AdsSetDateFormat( "DD/MM/YYYY" )
  AdsSetEpoch("01/01/1990")
    AdsSetFileType( 3 ) /// 1 NTX / 2 CDX / 3 ADT

  AdsSetCharType(1)
  
    #ifdef __XHARBOUR__
        SET(_SET_HARDCOMMIT,.F.)  
    #else
        SET(106,.F.) 
    #endif

  ///SET(43,.F.)

 
  lMkDir(f_cDirTmp)
  FERASE(f_cDirTmp+"TADS_ERR.ADI")
  If !File(f_cDirTmp+"TADS_TMP.ADD")
    cDirExpr := StrTran(f_cDirTmp,"\","\\")
    AdsSetServerType(1)
    TAds_CreateDataDictionary(cDirExpr+"TADS_TMP.ADD","Dicionario de dados temporal para TAds")
    lCreateTmp := .T.
  EndIf

  oConnectionTmp := tAdsConnection():New(121,.F.)
  oConnectionTmp:cDataDictionary  := f_cDirTmp+"TADS_TMP.ADD"
  oConnectionTmp:cSenhaConnect    := f_cPassAdsSys 
  oConnectionTmp:nTpConnect       := 1
  oConnectionTmp:tAdsConnect()

  If lCreateTmp

    if !Empty(f_cPassAdsSys)
      TAds_ModifyUserProperty(121,"ADSSYS",f_cPassAdsSys)
    EndIf

    aadd(aStructTmp,{"STATUS","Short",2,0,1,"Status para Controle Interno",0})
    aadd(aStructTmp,{"Dt_Ocorrencia","Date",8,0,1,"Data da Ocorrencia do erro",Nil})
    aadd(aStructTmp,{"Hr_Ocorrencia","C",10,0,0,"Horas da Ocorrencia do erro",Nil})
    aadd(aStructTmp,{"cComputerName","C",50,0,0,"Nome do Computador ",Nil})
    aadd(aStructTmp,{"cInfoProcLine","C",100,0,0,"Linha e procedimento da chamada de DsNew()",Nil})
    aadd(aStructTmp,{"nErrorSql","N",7,0,0,"Numero do Erro retornado por AdsGetLastError",Nil})
    aadd(aStructTmp,{"cErrorSql","Memo",8,0,0,"Descricao do Erro retornado por AdsGetLastError",Nil})
    aadd(aStructTmp,{"cSqlScript","Memo",8,0,0,"Script Sql aplicado",Nil})
    aadd(aStructTmp,{"cErrorComplete","Memo",8,0,0,"Descrição completa do erro",Nil})

    TAds_CreateTableFromCode(121,"TADS_ERR",aStructTmp,"Tabela para registros de erros de tAds DataSet")
    
  EndIf
 
RETURN NIL
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor (Giovani.)

Post by ruben Dario »

Giovani.,
Saludos
He estado analizando tus ejemplos de la Ayuda HTML que colocas, esta muy bien documentada Excelente Trabajo.
Con tus Ejemplos que vi, Abrindo Tablas via Rdd para navegar Hacer Append , Modificar, etc. es muy bueno.
segun este codigo

Code: Select all

CLASS DB_CLIENTES from TAds
  Data cTableName     Init "CLIENTES"
  Data nCache
  Data lConnected     Init .F.
  METHOD OpenRdd(f_nConexao,;      // Numero da Conexão - Default tAds_GetConnectionDefault()
              f_nCache);           // Numero de registros em Cache - Default nCacheAds()
              Constructor 
  METHOD Properties();            // Parametros e dados da Tabela
              Constructor 
  METHOD END()
ENDCLASS

//-----------------------------------------------------------------------------

METHOD OpenRdd(f_nConexao,f_nCache) CLASS DB_CLIENTES
  Default f_nCache := nCacheAds()
  ::nCache        := f_nCache
  ::nTpCallRdd    := 2
  ::NewRdd(::cTableName,f_nConexao,::nCache)
  IF ::nOpenStatus == 0 
    ::lConnected := .T.
  ENDIF
RETURN SELF

//-----------------------------------------------------------------------------

METHOD END() CLASS DB_CLIENTES
   IF ::lConnected
     SUPER:END()
   ENDIF
   SELF := NIL
RETURN NIL

//-----------------------------------------------------------------------------Após compilar o código você poderá começar a abrir as tabelas por objetos ex:
LOCAL oDb_Clientes := DB_CLIENTES():OpenRdd() // Abrindo via Rdd.
oDb_Clientes01 := DB_CLIENTES():OpenRdd()
oDb_Clientes02 := DB_CLIENTES():OpenRdd()
xBrowse(oDb_Clientes01:cAlias)
xBrowse(oDb_Clientes02:cAlias)
oDb_Clientes01:END() // Fecha a tabela associada a variavel objeto oDb_Clientes01
oDb_Clientes02:END() // Fecha a tabela associada a variavel objeto oDb_Clientes02
 
Mi pregunta seria mejor trabajar las Tablas para hacer Append , Modificar) Usando via Rdd, o de ka otra manera Usando Sentencias SQL usar el ejemplo que colocaste.
Segun veo es mas radido Usando via Rdd no se si me equivoco.

::oDs_CepSql := tAds():DsNew(1,1)
::oDs_CepSql:cQrySql := "Select * from TB_CEP "
::oDs_CepSql:DsExecute(120)

Por ultima como se corrige el Error Variable SUPER No existe.


Saludos
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

Oi Rubens

Vamos aos passos:
1-Executar TADS_START_CONFIG()
2-Abrit uma conexão com dicionario de dados ex:

Code: Select all

PUBLIC oMyConnectionServer, oMyConnectionLoja02
#Define nConnectionServer    01 // Para determinar o numero da conexão 01
#Define nConnectionLoja02    02 // Atribuir a conexão 02 outra conexão

TADS_START_CONFIG() // Parametriza e cria os ambientes para uso do Advantage DataBase Server

oMyConnectionServer := tAdsConnection():New(nConnectionServer,.T.) // .T. Para informar que esta conexão é a Padrão (Por Falta)
oMyConnectionServer:cDataDictionary  := "\\SERVER\REDE\DADOS\MyDataDictionary.add"
oMyConnectionServer:cUserLogin       := "adssys"
oMyConnectionServer:cSenhaConnect    := "123456"
oMyConnectionServer:nTpConnect       := 7

lConnect := oMyConnectionServer:tAdsConnect()

  IF lConnect == .F.
     MsgStop("Não foi possivel conectar com a base de dados de advantage.",;
             "Falha na conexão")
     RETURN .F.
  ENDIF


 
Para aproveitar seus codigos fontes voce pode usar DBUSEAREA da mesma maneira que estas.
A diferença é que voce não precisa abrir os indices ex:
DbUseArea( .T., "ADS" , "F_CFOP", "cust" ) // esta correto e se tiver indices são carregados automaticamente
Não necessita de colocar a rota ou pasta (ex: c:\dados\F_CFOP > errado), apenas "F_CFOP" > desta maneira esta correta.

XBROWSER "F_CFOP.ADT" FASTEDIT // Tirar .ADT

Se voce abrir uma tabela estatica, voce não pode efetuar append , replace etc, mais voce pode tratar isto em código com insert, update ou aproveitar a busca ex:

Code: Select all

  oDs_BuscaCliente := tAds():DsNew(1)
  oDs_BuscaCliente:cQrySql := "Select * from CLIENTES where codigo = 100 ;"
  oDs_BuscaCliente:DsExecute()

  oDs_BuscaCliente:DataLoad() // Carrega os conteudos das variaveis tipo DATA  

  Redefine Get id 301 var oDs_BuscaCliente:Nome of odlg

  Redefine Get id 302 var oDs_BuscaCliente:SobreNome of odlg

  // depois voce escolhe o metodo de atualização

/// 1- primeiro
  oDs_GravaCliente := tAds():DsNew(2) // 2 = não tem cursores
  oDs_GravaCliente:cQrySql := "Update CLIENTES set NOME = _NOME_UPD_, SOBRENOME = _UPD_SOBRE_NOME_"
  oDs_GravaCliente:DsAddVar("_NOME_UPD_",oDs_BuscaCliente:Nome)
  oDs_GravaCliente:DsAddVar("_UPD_SOBRE_NOME_",oDs_BuscaCliente:SobreNome)
  oDs_GravaCliente:Dsexecute() // grava e atualiza

/// 2 - Segundo
  oDb_Clientes := Db_Clientes():OpenRdd() // ou tAds():NewRdd("CLIENTES")
  oDb_Clientes:Seek(100,"CODIGO") // Posiciona no código 100 do cliente
  oDb_Cliente:rLock() // travar Registro
  oDb_Cliente:VarPut("NOME",oDs_BuscaCliente:Nome) 
  oDb_Cliente:VarPut("SOBRENOME",oDs_BuscaCliente:SobreNome) 
  odb_Cliente:Commit(.T.) // .T. Unlock

 
Agora uma maneira mais facil

Code: Select all

  oDb_Clientes := Db_Clientes():OpenRdd() // ou tAds():NewRdd("CLIENTES")
  oDb_Clientes:Seek(100,"CODIGO") // Posiciona no código 100 do cliente
  oDb_Clientes:Dataload() // Atualizar variaveis DATA

  Redefine Get id 301 var oDb_Clientes:Nome of odlg

  Redefine Get id 302 var oDb_Clientes:SobreNome of odlg

  oDb_Clientes:rLock() // travar para atualizar
  oDb_Clientes:DataSave() // Grava e atualiza _ carregados e depois alterados em GET
  oDb_Clientes:Commit(.T.)  

 
No Caso de SUPER troque por ::SUPER
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Saludos Giovany
Mira este Trozo de Codigo

  oDs_CepSql:DataLoad()
  Do While !oDs_CepSql:Eof()
    ?oDs_CepSql:VarGet("CEP")+" "+oDs_CepSql:VarGet("CIDADE")  
    ?oDs_CepSql:CEP  //+" "+oDs_CepSql:CIDADE
    oDs_CepSql:Skip()
    oDs_CepSql:DataLoad()
  EndDo

Pregunta No 1
Porque no funciona cuando se dice asi
    ?oDs_CepSql:CEP+" "+oDs_CepSql:CIDADE
funciona colocando cada uno en forma individual  de esta manera  ?oDs_CepSql:CEP 

Pregunta No 2
para evitar colocar el DataLoad()
que pasa si se modifica la clase METHOD OnSkip asi, hice la prueba y funciona, no se que opina usted.

METHOD OnSkip


//-----------------------------------------------------------------------------
METHOD OnSkip(f_lData) Class TAds
  Default f_lData := .T.
 
  ::lBoF        := (::cAlias)->(Bof())
  ::lEoF        := (::cAlias)->(Eof())
  ::nFocusRecno := (::cAlias)->(Recno())
 
  If ::lBufferOnSkip .and. f_lData
    if ::lEof
      ::DataBlank()
    Else
      ::DataLoad()
    EndIf
  else
    if ::lEof
    Else
      ::DataLoad()
    EndIf
  EndIf
 
RETURN NIL

Pregunta No 3
Me sigue generando el error, a pesar que el código compila bien, y al rato se arregla, es como que quedara algo en memoria, no es suficiente para que cierre todos los Objetos de esta manera como indicas. oConexaoDefault:tAdsCloseConnect()
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

Oi Rubens

Para funcionar DataLoad automaticamente voce tem que acionar o lBufferOnSkip = .T., desta maneira carrega automaticamente quando o ponteiro de registro é movimentado.
Esta opção não pode ser .T. inicialmente porque _ em que voce esta em um registro como por exemplo GET VAR oDb_Clientes:Nome picture "@!" e ocorra uma movimetação nos ponteiros, as variaveis DATA com nomes _ serão atualizadas e o problema aparece. Quando usando a classe tCtrlxBrw ai sim fica automaticamente.
Pregunta nº 3
Me sigue generando o erro, um pouco para o código de compilação, e em vez de arregla, é como ficar em memória, não está disponível para todos os objetos de esta forma como indicas. OConexaoDefault: tAdsCloseConnect ()
Verifique se há algum objeto aberto com alguma tabela ex:
1- odb_clientes := tAds():NewRdd("CLIENTES")
2- oDb_Clientes := DB_CLIENTES():OpenRdd()
3- oDs_Clientes := tAds():DsNew(1)
Se tiver algum objeto que não foi invocado o fechamento com END() (oDb_Clientes:End()) e voce invocar tAdsCloseConnect() as tabelas referente a conexão abertas serão fechadas mais os objetos estarão abertos na memoria, neste caso ocorrera erro.

No final do programa coloque a função tAds_AliasesAutoOpened()
Ex:

Code: Select all

If !Empty(tAds_AliasesAutoOpened())
  MsgAlert(tAds_AliasesAutoOpened(),"Tabelas Abertas")
EndIf
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Giovani
Saludos

En tu conecion hay un codigo de la funcion TADS_START_CONFIG()
Cual es la finalizadad de crear TADS_TMP.ADD Dicionario de dados temporal para TAds.

Lo que entiendo es que el archivo .ADD (Contiene el dicionario de datos o sea todo el nombre de las tablas , indices etc del el proyecto)

Code: Select all

 FERASE(f_cDirTmp+"TADS_ERR.ADI")
  If !File(f_cDirTmp+"TADS_TMP.ADD")
    cDirExpr := StrTran(f_cDirTmp,"\","\\")
    AdsSetServerType(1)
    TAds_CreateDataDictionary(cDirExpr+"TADS_TMP.ADD","Dicionario de dados temporal para TAds")
    lCreateTmp := .T.
  EndIf

  oConnectionTmp := tAdsConnection():New(121,.F.)
  oConnectionTmp:cDataDictionary  := f_cDirTmp+"TADS_TMP.ADD"
  oConnectionTmp:cSenhaConnect    := f_cPassAdsSys 
  oConnectionTmp:nTpConnect       := 1
  oConnectionTmp:tAdsConnect()

  If lCreateTmp

    if !Empty(f_cPassAdsSys)
      TAds_ModifyUserProperty(121,"ADSSYS",f_cPassAdsSys)
    EndIf

    aadd(aStructTmp,{"STATUS","Short",2,0,1,"Status para Controle Interno",0})
    aadd(aStructTmp,{"Dt_Ocorrencia","Date",8,0,1,"Data da Ocorrencia do erro",Nil})
    aadd(aStructTmp,{"Hr_Ocorrencia","C",10,0,0,"Horas da Ocorrencia do erro",Nil})
    aadd(aStructTmp,{"cComputerName","C",50,0,0,"Nome do Computador ",Nil})
    aadd(aStructTmp,{"cInfoProcLine","C",100,0,0,"Linha e procedimento da chamada de DsNew()",Nil})
    aadd(aStructTmp,{"nErrorSql","N",7,0,0,"Numero do Erro retornado por AdsGetLastError",Nil})
    aadd(aStructTmp,{"cErrorSql","Memo",8,0,0,"Descricao do Erro retornado por AdsGetLastError",Nil})
    aadd(aStructTmp,{"cSqlScript","Memo",8,0,0,"Script Sql aplicado",Nil})
    aadd(aStructTmp,{"cErrorComplete","Memo",8,0,0,"Descrição completa do erro",Nil})

    TAds_CreateTableFromCode(121,"TADS_ERR",aStructTmp,"Tabela para registros de erros de tAds DataSet")
    
  EndIf
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

En tu conecion hay un codigo de la funcion TADS_START_CONFIG()
Cual es la finalizadad de crear TADS_TMP.ADD Dicionario de dados temporal para TAds.

Lo que entiendo es que el archivo .ADD (Contiene el dicionario de datos o sea todo el nombre de las tablas , indices etc del el proyecto)
Oi Ruben
Veja bem. Em varias partes do meu programa necessito de buscar os dados de varias maneiras e depois listar para criar reports etc.
Para não comprometer o trafico de banda de rede ou internet, eu carrego varias tabelas em associação por sql e faço copiar para a maquina cliente gerando uma tabela temporaria, assim depois de carregado os resultados das querys eu posso fazer qualquer outro procedimento depois de gerado o temporario. Estes temporarios são criados em TADS_TMP.ADD
Para isto veja as variaveis lDsCursorsToTemp, lDsTempEraseOnClose, aFieldsTempIndex

EX:

Code: Select all

aFieldsTempIndex - Variavel vetor com os nomes _ que deseja que seja indexado apos criar o arquivo temporario. Ex:

  oDs_Sql := DsNew(1)
  oDs_Sql:cQrySql := "Select * from CLIENTES Where SALARIO > _Salario_"
  ods_Sql:DsAddVar("_Salario_",1200.00)
  oDs_Sql:lDsCursorToTemp := .T. // Depois de executar a query sera copiado para a maquina cliente
  oDs_Sql:aFieldsTempIndex := {"CODIGO","NOME"} // depois de gerado o temporario será criado chaves dos indices de CODIGO e NOME
  oDs_Sql:DsExecute()
  (oDs_Sql:cAlias)->(xBrowse())
  
 
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Saludos Giovany

Estoy creado la libreria rddadsh.lib y me da este error.
Error: Unresolved external '_HB_FUN_ADSFLUSHFILEBUFFERS' referenced from K:\V_XHARB_V3\LIB\HARB\TADS_H.LIB|tAds

De la contribucion de Harbour, en el fuente \rddads\adsfunc.c , mi pregunta esta es la unica funcion que le agregas

Gracias
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
Giovany Vecchi
Posts: 129
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Ads..por favor

Post by Giovany Vecchi »

ruben Dario wrote:Saludos Giovany

Estoy creado la libreria rddadsh.lib y me da este error.
Error: Unresolved external '_HB_FUN_ADSFLUSHFILEBUFFERS' referenced from K:\V_XHARB_V3\LIB\HARB\TADS_H.LIB|tAds

De la contribucion de Harbour, en el fuente \rddads\adsfunc.c , mi pregunta esta es la unica funcion que le agregas

Gracias
Sim, eu incluo esta função para evitar erros de corrupção de dados em mode LOCAL SERVER.
As Libs ja compiladas ja possuem esta função
https://github.com/giovanyvecchi/tAdsGi ... aster/Libs
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Gracias Giovany
.
Te pregunto al instalar el exactamente el adswin_x86_32.exe, le intgreso. El serial , La validation Code y Replication Code. Hasta aqui me recibe el todo, cuando paso a la siguiente pantalla me dice que Ingrerse el nombre o sea Registered Owner, mi pregunta que le debo dar ahi, lo estoy dejando en blanco, y lo instala.
Le dijo Start Service para inicial el servicio pero no lo sube, no se que me falta o se requiere alguna configuracion. para poder iniciar el servicio.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Ads..por favor

Post by ruben Dario »

Saludos Giovany

Estoy usanto el ultimo Dbf2Advantage.EXE que coloco.
Creo una carpteta
Ejecuto Dbf2Advantage.EXE
veo que el crea una carpeta
ClassTads
DadosAdd

Cuando Adiciono un DBF y dejo el nombre por default MyDataDictionary.add que coloca y luego le doy generar.
me da este error
Criando Dicionario de dados - 08/09/2017 - 09:51:37
Falha na tentativa de criar o dicionario de dados J:\\PLA3ADS\\DadosAdd\\MyDataDictionary.add

Otra duda si tengo un .add creado, no deberia adicionar la tabla a diccionario que existe.

Gracias
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
rubenfernandez01
Posts: 23
Joined: Sun Sep 20, 2015 1:41 am

Re: Ads..por favor

Post by rubenfernandez01 »

ruben Dario wrote:Saludos Giovany

Estoy usanto el ultimo Dbf2Advantage.EXE que coloco.
Creo una carpteta
Ejecuto Dbf2Advantage.EXE
veo que el crea una carpeta
ClassTads
DadosAdd

Cuando Adiciono un DBF y dejo el nombre por default MyDataDictionary.add que coloca y luego le doy generar.
me da este error
Criando Dicionario de dados - 08/09/2017 - 09:51:37
Falha na tentativa de criar o dicionario de dados J:\\PLA3ADS\\DadosAdd\\MyDataDictionary.add

Otra duda si tengo un .add creado, no deberia adicionar la tabla a diccionario que existe.

Gracias
Rubén Dario, debes crear la tabla desde programa. O desde el arc32.exe te conectas a tu archivo.add y desde ahí creas la tabla.
Saludos
Ruben Dario Fernandez

Gracias y saludos cordiales.
Rubén Dario Fernández
Fwh 16.08 - Bcc 7.2 - Synwrite
Post Reply