Ads..por favor
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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.
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.
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
Re: Ads..por favor
Na pasta do seu executavel voce deve descompactar as dll que estão no arquivo zipado Ads10.1_Redistribute.zipruben 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.
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()
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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
Este e4s el TADS_START_CONFIG() que tengo
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
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
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor (Giovani.)
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
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
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
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
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
Re: Ads..por favor
Oi Rubens
Vamos aos passos:
1-Executar TADS_START_CONFIG()
2-Abrit uma conexão com dicionario de dados ex:
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:
Agora uma maneira mais facil
No Caso de SUPER troque por ::SUPER
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
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
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.)
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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()
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()
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
Re: Ads..por favor
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.
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:
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.
Verifique se há algum objeto aberto com alguma tabela ex: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 ()
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
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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)
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
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
Re: Ads..por favor
Oi RubenEn 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)
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())
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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
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
- Giovany Vecchi
- Posts: 129
- Joined: Mon Jun 05, 2006 9:39 pm
- Location: Brasil
Re: Ads..por favor
Sim, eu incluo esta função para evitar erros de corrupção de dados em mode LOCAL SERVER.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
As Libs ja compiladas ja possuem esta função
https://github.com/giovanyvecchi/tAdsGi ... aster/Libs
- ruben Dario
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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.
.
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
- Posts: 986
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Ads..por favor
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
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
-
- Posts: 23
- Joined: Sun Sep 20, 2015 1:41 am
Re: Ads..por favor
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.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
Saludos
Ruben Dario Fernandez
Gracias y saludos cordiales.
Rubén Dario Fernández
Fwh 16.08 - Bcc 7.2 - Synwrite