× Linguagem de Programação ADVPL

Perguntas Filtro Sem SQL

Mais
11 anos 5 meses atrás #14539 por vcardoso
Filtro Sem SQL foi criado por vcardoso
Galera, boa tarde!
Estou com uma demanda aqui que é simples, mas tá me dando um trabalho...
Eu quero atualizar os campos da tabela SB2 através da SB9, mas não posso fazer uma query porque não usam SQL. Então tem que ser no ADVPL mesmo.
Abaixo está o fonte, mas ele não está passando pelo WHILE. Criei uns alerts pra ver como o fonte está sendo lido, pelo o que vi, ele dá um alert no OK1 e depois pula direto pro OK4, sem passar pelo WHILE.
Alguém, analisando esse fonte, sabe se está com erro?

Agradeço a ajuda.


User Function AtualTab()

DbSelectArea("SB9")
DbSetOrder(1)
Set Filter To SB9->B9_DATA == Ctod("31122011") .AND. SB9->B9_LOCAL == "01"
DbGoTop()

Alert("OK1")

While !EOF()
DbSelectArea("SB2")
DbSetOrder(1)
DbGoTop()
IF DbSeek(xFilial("SB2")+B9_COD+B9_LOCAL)
Alert("OK2")
// RecLock("SB2",.F.)
// SB2->B2_QFIM := B9_QINI
// SB2->B2_UFIM1 := B9_VINI
// SB2->B2_CM1 := B9_CM1
// MsUnlock()
ENDIF
Alert("OK3")
DbSelectArea("SB9")
DbSkip()
ENDDO
Alert("OK4")
DbCloseArea("SB9")
DbCloseArea("SB2")

Return

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 5 meses atrás - 11 anos 5 meses atrás #14544 por mbrigagao
Respondido por mbrigagao no tópico Filtro Sem SQL
Victor,

Tenta o set filter assim :
Set Filter To SB9->B9_DATA == dTos(Ctod("31/12/2011")) .AND. SB9->B9_LOCAL == "01"

Caso não funcione tente assim:
dbSelectArea("SB9")
xIndice := Criatrab(nil,.f.)
xChave  := informe aqui a sua chave de indice
xFiltro := "B9_DATA=='" +cTod("31/12/2011")+"'"
IndRegua("SB9",xINDICE,xCHAVE,,xFILTRO,"Selecionando Registros SB9...")

dbGoTop()

If EOF()
  Alert("Arquivo VAzio")

Else
 
   .... seu processamento

EndIf
Ultima edição: 11 anos 5 meses atrás por mbrigagao.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 5 meses atrás #14559 por vcardoso
Respondido por vcardoso no tópico Filtro Sem SQL
Consegui da seguinte forma:

User Function AtualTab()

DbSelectArea("SB9")
DbSetOrder(1)
DbGoTop()

While !EOF()
IF B9_DATA == ctod("31/12/2011")
DbSelectArea("SB2")
DbSetOrder(1)
DbGoTop()
IF DbSeek(xFilial("SB2")+SB9->B9_COD)
RecLock("SB2",.F.)
SB2->B2_QFIM := SB9->B9_QINI
SB2->B2_VFIM1 := SB9->B9_VINI1
SB2->B2_CM1 := SB9->B9_CM1
MsUnlock()
ENDIF
endif
DbSelectArea("SB9")
DbSkip()
ENDDO
DbCloseArea("SB9")
DbCloseArea("SB2")
ALERT("FIM")
Return

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 5 meses atrás #14560 por vcardoso
Respondido por vcardoso no tópico Filtro Sem SQL
Obrigado a todos

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.134 segundos
Joomla templates by a4joomla