Jump to content
Fivewin Brasil

Sobre o Ads sugerido


giovanyvecchi

Recommended Posts

Eu denovo!!! rsrs

mudei o meu programa para o ADT. Só que me atrapalhei em uma rotina que tenho. é o seguinte:


Sel(cDBF,nNTX) // Abre o Arquivo de Crediario do Cliente

DbGoTop()

While !EOF()

If SIM_NAO = "S"

aReg := { }

*

nFator := nTotalPg / (nTAux + nDesconto)

*

RecLock()

Replace VA_DATPAGO With Date()

Replace VA_VALPAGO With CalcPrestacao(VA_VALPRES,VA_DATVENC) * nFator

UnLockRecord()

*

For nRg1 := 1 To FCount()

AADD( aReg, FieldGet(nRg1) )

Next nRg1

*

cTipo := VA_TPMOVIM

nNumero := VA_NUMPEDI

dDtVenc := VA_DATVENC

nVrPres := CalcPrestacao(VA_VALPRES,VA_DATVENC)

*

RecLock()

DbDelete()

UnLockRecord()

*

Sel("M"+cDBF,nNTX) // Abre arquivo Morto do Crediario do Cliente

AppendRec()

For nRg1 := 1 To Len(aReg)

FieldPut(nRg1,aReg[nRg1])

Next nRg1

*

Sel("MC00000",1) // Abre um Arquivo para Caixa

AppendRec()

For nRg1 := 1 To Len(aReg)

FieldPut(nRg1,aReg[nRg1])

Next nRg1

*

Sel(cDBF,nNTX)

EndIf

DbSkip(1)

EndDo

id=code>id=code>

*

O problema esta na linha do Delete (Deletando o registro que foi pago) ai não sei o que acontece ele deleta apenas o primeiro, os outros permanece...

OU SEJA, PARECE QUE A ROTINA SE PERDE POR CAUSA DO ADT APROFEITA OS REGISTRO DELETADOS...

ALGUEM TEM ALGUMA IDÉIA...???id=red>

*

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Editado por - theotokos on 04/10/2010 22:00:05

Editado por - theotokos on 05/10/2010 20:33:01

Link to comment
Share on other sites

mudei o meu programa para o ADT. Só que me atrapalhei em uma rotina que tenho. é o seguinte:


Sel(cDBF,nNTX) // Abre o Arquivo de Crediario do Cliente

DbGoTop()

While !EOF()

If SIM_NAO = "S"

aReg := { }

*

nFator := nTotalPg / (nTAux + nDesconto)

*

RecLock()

Replace VA_DATPAGO With Date()

Replace VA_VALPAGO With CalcPrestacao(VA_VALPRES,VA_DATVENC) * nFator

UnLockRecord()

*

For nRg1 := 1 To FCount()

AADD( aReg, FieldGet(nRg1) )

Next nRg1

*

cTipo := VA_TPMOVIM

nNumero := VA_NUMPEDI

dDtVenc := VA_DATVENC

nVrPres := CalcPrestacao(VA_VALPRES,VA_DATVENC)

*

RecLock()

DbDelete()

UnLockRecord()

*

Sel("M"+cDBF,nNTX) // Abre arquivo Morto do Crediario do Cliente

AppendRec()

For nRg1 := 1 To Len(aReg)

FieldPut(nRg1,aReg[nRg1])

Next nRg1

*

Sel("MC00000",1) // Abre um Arquivo para Caixa

AppendRec()

For nRg1 := 1 To Len(aReg)

FieldPut(nRg1,aReg[nRg1])

Next nRg1

*

Sel(cDBF,nNTX)

EndIf

DbSkip(1)

EndDo

id=code>id=code>

*

O problema esta na linha do Delete (Deletando o registro que foi pago) ai não sei o que acontece ele deleta apenas o primeiro, os outros permanece...

OU SEJA, PARECE QUE A ROTINA SE PERDE POR CAUSA DO ADT APROFEITA OS REGISTRO DELETADOS...

ALGUEM TEM ALGUMA IDÉIA...???id=red>

*

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Link to comment
Share on other sites

Rene,

Não entendi bem seu código, mas afianço-lhe que não há qualquer problema com o Delete do ADS. Naturalmente uso com frequência e sem problema algum. O tratamento implementado pelo ADS para este recurso é apenas mais eficiente que o padrão do CA-Clipper onde os registros são apenas "marcados" para exclusão.

O Mais provável é que existe alguma falha no controle do laço que você está executando.

Vilian F. Arraes

vilian@vfatec.com.br

Belém - Pa

FWH 9.12/xHabour/ADS Server

Link to comment
Share on other sites

citação:

O TOPICO PAROU, ALGUEM POR FAVOR, SOCORRO!!!id=red>

Em Cristo!

Rone - Itajubá(MG)

id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>


id=quote>id=quote>

Estranho o que esta acontecendo.

Mais para um bom funcionamento dos aliases aconselho direcionamento direto nos aliases: Ex:

CLIENTES->(DbSkip())

CLIENTES->(Rlock())

CLIENTES->(DbAppend())

CLIENTES->(DbDelete())

CLIENTES->NOME := "TESTE DO NOME"

Se o alias for uma variavel tipo: cAlias

(cAlias)->(DbSkip())

(cAlias)->(DbDelete())

Lembrando que o ads tem threads, e em um certo ponto de execução ele adianta o proximo procedimento, e neste caso ele esta processando um alias anterior e voce da um DBDELETE(), isto pode entrar na fila do threads e deletar o registro de outro arquivo. Por isto que o correto seria direcionar o alias: CLIENTES->, que neste caso o ads tem certeza que é para movimentar, deletar, incluir, pular o alias que foi passado para ele.

Editado por - giovanyvecchi on 08/10/2010 09:35:18

Link to comment
Share on other sites

valeu pessoal, vou retomar este teste, e vê se acerto agora com as suas dicas. OBRIGADO!!!

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Link to comment
Share on other sites

citação:

Giovanny,

Como você resolveu a questão de Scopes com datas em branco ?

Qual a versão das dlls do ADS que você usa ?

Vilian F. Arraes

vilian@vfatec.com.br

Belém - Pa

FWH 9.12/xHabour/ADS Server

Editado por - vilian on 15/10/2010 16:35:30


id=quote>id=quote>

È, Isto foi um lema.

Atualmente não uso mais Ordscope, Uso apenas xFilter que eu criei e que usa o AdsSetAof, não preciso selecionar o ordem de um indice pra obter certos resultados e a velocidade do AdsSetAof é a mesma do ordscope.

Para filtrar as datas em branco é assim:

PAGAMENTOS->(AdsSetAof("DT_PAGAMENTO = NULL"))

Giovany Vecchi - Jales - SP

FWH 8.6 / Harbour RC1 V 1.0.0 / Code Gear 6 Bcc 5.6 /Bcc 5.9 / Ads 8.1 /PellesC

Link to comment
Share on other sites

  • 2 weeks later...

Giovany,

Voltando a questão dos campos com conteúdo NULL, Como podemos pesquisar campos com este conteúdo ?

Explico melhor - Tenho um indice por data_pgto, naturalmente titulos não pagos não tem esse campo preenchido, como fazer o SEEK pra achar esses lançamentos ?

Vilian F. Arraes

vilian@vfatec.com.br

Belém - Pa

FWH 9.12/xHabour/ADS Server

Link to comment
Share on other sites

citação:

Giovany,

Voltando a questão dos campos com conteúdo NULL, Como podemos pesquisar campos com este conteúdo ?

Explico melhor - Tenho um indice por data_pgto, naturalmente titulos não pagos não tem esse campo preenchido, como fazer o SEEK pra achar esses lançamentos ?

Vilian F. Arraes

vilian@vfatec.com.br

Belém - Pa

FWH 9.12/xHabour/ADS Server


id=quote>id=quote>

Se voce usar os recursos do ads, o comando SEEK se torna obsoleto. Voce pode fazer de varias maneiras.

Veja exemplos abaixo:

Exemplo usando xFilter


nCodCliente := 100

nDtVence := CTOD("28/10/2010")

aadd(aFlags,{"Codigo_Cliente",nCodClinte})

aadd(aFlags,{"Dt_Vencimento",nDtVence})

PAGAMENTOS->(xFilter("DATA_PGTO = NUL and COD_CLI = Codigo_Cliente and DT_VENCE < Dt_Vencimento",aFlags))

id=code>id=code>

Ou da forma mais simples usando sql com data dictionary


nCodCliente := 100

cDtVence := "'28/10/2010'"

cComando := ""

cComando += "SELECT * from PAGAMENTOS where "

cComando += "DATA_PGTO = NULL "

cComando += "and COD_CLI = "+Str(nCodCliente)+" "

cComando += "and DT_VENCE < "+cDtVence

cComando += " order by DT_VENCE"

AdsCreateSqlStatement("PAGAMENTOS",3) // 3 ADT

AdsExecuteSQLDirect(cComando)

id=code>id=code>

Giovany Vecchi - Jales - SP

FWH 8.6 / Harbour RC1 V 1.0.0 / Code Gear 6 Bcc 5.6 /Bcc 5.9 / Ads 8.1 /PellesC

Link to comment
Share on other sites

Ou da forma mais simples usando sql com data dictionary

nCodCliente := 100 cDtVence := "'28/10/2010'" cComando := "" cComando += "SELECT * from PAGAMENTOS where " cComando += "DATA_PGTO = NULL " cComando += "and COD_CLI = "+Str(nCodCliente)+" " cComando += "and DT_VENCE < "+cDtVence cComando += " order by DT_VENCE" AdsCreateSqlStatement("PAGAMENTOS",3) // 3 ADT AdsExecuteSQLDirect(cComando)

Giovany Vecchi - Jales - SP

*************************************

como que eu usaria isso no bd,, e como abriria os arquivos,, tem que comprar sql ou coisa parecida ou o proprio ads, ja tem isso pronto....

duvidas que tenho,,,

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...