×
Linguagem de Programação ADVPL
Perguntas Filtro Sem SQL
- vcardoso
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 119
- Obrigados Recebidos: 0
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
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.
- mbrigagao
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 350
- Obrigados Recebidos: 1
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:
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.
- vcardoso
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 119
- Obrigados Recebidos: 0
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
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.
- vcardoso
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 119
- Obrigados Recebidos: 0
Tempo para a criação da página:0.134 segundos