|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
Erro query |
|
Versão: |
12.1.17 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
ROMERO_BR
em 09/10/2020, 09:34 h
Local: SP Registro: 12/03/2015 Postagens: 8 |
Bruno Romero
Olá.
Estou com um erro na execução de uma query. Segue o fonte:
Static function areserv()
LOCAL cNUMERO := GetSxeNum("SC0","C0_NUM")
LOCAL cQuerysc6 := ""
LOCAL cQuerysc0 := ""
LOCAL lRet := .F.
aAreax := GetArea()
cQuerysc0 := " SELECT COUNT(C0_NUM)AS COUNT "
cQuerysc0 += " FROM " + RetSQLName("SC0")+" SC0 "
cQuerysc0 += " WHERE SC0.C0_DOCRES = ‘" + SC6->C6_NUM + "‘ "
cQuerysc0 += " AND SC0.D_E_L_E_T_ = ‘‘ "
cQuerysc0 := ChangeQuery(cQuerysc0)
DbUseArea(.T., "TOPCONN", TCGenQry(,,cQuerysc0), ‘TSC0‘, .F., .T.)
IF TSC0->COUNT = 0
lRet := .T.
ENDIF
TSC0->(dbCloseArea())
RestArea(aAreax)
cQuerysc6 := "SELECT C6_ITEM, C6_PRODUTO, C6_QTDVEN, C6_LOCAL, C6_NUM, C6_RESERVA, C6_XOBSERV,C6_LOCALIZ,C6_NUMSERI "
cQuerysc6 += "FROM " + RetSqlName( "SC6" ) + " SC6 "
cQuerysc6 += "WHERE SC6.C6_NUM = ‘" +SC6->C6_NUM + "‘ "
cQuerysc6 += "ORDER BY SC6.C6_ITEM"
DbUseArea(.T., "TOPCONN", TCGenQry(,,cQuerysc6), ‘TSC6‘, .F., .T.)
While !TSC6->(Eof())
IF lRet
aOPERACAO := {1,"PD",TSC6->C6_NUM,AllTrim(cUserName),xFilial("SC6"),AllTrim(TSC6->C6_XOBSERV)}
cPRODUTO:= TSC6->C6_PRODUTO
cLOCAL := TSC6->C6_LOCAL
nQUANT := TSC6->C6_QTDVEN
aLOTE := {"","",TSC6->C6_LOCALIZ,TSC6->C6_NUMSERI}
A430Reserv(aOPERACAO,cNUMERO,cPRODUTO,cLOCAL,nQUANT,aLOTE)
dbSelectArea("SC6")
dbSetorder(1)
dbSeek(xFilial("SC6")+TSC6->C6_NUM+TSC6->C6_ITEM+TSC6->C6_PRODUTO)
Reclock("SC6",.F.)
SC6->C6_RESERVA := cNUMERO
SC6->(MsUnlock())
SC6->(dbCloseArea())
ENDIF
TSC6->(dbSkip())
Enddo
TSC6->(dbCloseArea())
Return
O erro ocorre na query cQuerysco pois nao traz o valor correto da quantidade de registro, ou seja o TSC0->COUNT traz sempre o valor de 0. Quando realizo essa query MSTUDIO do SQLServer traz o resultado corretamente de valor 2. Fiz um teste sem cQuerysc0 += " AND SC0.D_E_L_E_T_ = ‘‘ " e o TSC0->COUNT trouxe o resultado correto porem sei que preciso dessa clausula. Alguma idéia do que pode ser este erro?
|
|
|
Mensagem do
EMERSON.EN
em 09/10/2020, 16:31 h
Local: SP Registro: 20/08/2010 Postagens: 669 |
Bobagem, mas não custa tentar...
No lugar de apelidar o campo de COUNT, chame-o de QTD ou NUMREG ou qualquer outro nome que não seja uma palavra reservada. |
|
|
Mensagem do
ROMERO_BR
em 15/10/2020, 09:16 h
Local: SP Registro: 12/03/2015 Postagens: 8 |
Bruno Romero
Realizei a alteração removendo a palavra reservada da query porem o erro persiste.
cQuerysc0 := " SELECT COUNT(C0_NUM)AS QUAN "
cQuerysc0 += " FROM " + RetSQLName("SC0")+" SC0 "
cQuerysc0 += " WHERE SC0.C0_DOCRES = ‘" + cPedido + "‘ "
cQuerysc0 += " AND SC0.R_E_C_N_O_ <> SC0.R_E_C_D_E_L_ "
cQuerysc0 := ChangeQuery(cQuerysc0)
Quando eu debugo a query armazenada de cQuerysc0 funciona. Alguma outra idéia?
|
|
|
Mensagem do
RPERICO
em 15/10/2020, 10:41 h
Local: SP Registro: 10/01/2019 Postagens: 1 |
bom dia
Tente gravar o resultado da query em uma pasta e depois executar ela no SQL Studio para ver como sua rotina está montando. Talvez ajude na solução do problema.
Grava resultado da query em arquivo texto
--------------------------------------------*/
MemoWrit("\Query_Temp\nome do arquivo.sql", cQuerysc0)
Abraço
|
|
|
Mensagem do
CJ_CAMPOS
em 15/10/2020, 10:44 h
Local: SP Registro: 22/04/2020 Postagens: 61 |
Vc não se esqueceu de tirar no TSC6 os registros "deletados" do SC6 ? |
|
|
Mensagem do
INFOBRENO
em 15/10/2020, 10:55 h
Local: MT Registro: 02/03/2011 Postagens: 117 |
cQuerysc0 := ChangeQuery(cQuerysc0) <-- AUI PODE RETIRAR DBUSEAREA NÃO PRECISA
DbUseArea(.T., "TOPCONN", TCGenQry(,,cQuerysc0), 'TSC0', .F., .T.)
cQuerysc0 := " SELECT COUNT(C0_NUM)AS COUNT "
TENTA TROCAR POR
cQuerysc0 := " SELECT COUNT(*) NREG " |
|
|
Mensagem do
EMERSON.EN
em 15/10/2020, 11:16 h
Local: SP Registro: 20/08/2010 Postagens: 669 |
tente assim:
Static function areserv()
LOCAL cNUMERO
LOCAL cQuerysc6 := ""
LOCAL cQuerysc0 := ""
LOCAL lRet := .F.
LOCAL aAreax := GetArea()
LOCAL cNumPedido := SC6->C6_NUM
if SELECT(‘TSC0‘) > 0
TSC0->(dbCloseArea())
endif
BeginSQL Alias ‘TSC0‘
SELECT COUNT(C0_NUM) AS QTD
FROM %table:SC0%
WHERE %notdel% AND C0_FILIAL = %xFilial:SC0%
AND C0_DOCRES = %exp:cNumPedido%
EndSQL
lRet := (TSC0->QTD = 0)
TSC0->(dbCloseArea())
If lRet
if SELECT(‘TSC6‘) > 0
TSC6->(dbCloseArea())
endif
BeginSQL Alias ‘TSC6‘
SELECT C6_ITEM, C6_PRODUTO, C6_QTDVEN, C6_LOCAL,
C6_NUM, C6_RESERVA, C6_XOBSERV, C6_LOCALIZ, C6_NUMSERI
FROM %table:SC6%
WHERE %notdel% AND C6_FILIAL = %xFilial:SC6%
AND C6_NUM = %exp:cNumPedido%
ORDER C6_ITEM
EndSQL
SC6->(dbSetorder(1)) // C6_FILIAL, C6_NUM, C6_ITEM, C6_PRODUTO
cNUMERO := GetSxeNum("SC0","C0_NUM")
cFilSC6 := xFilial("SC6") // melhora a performance porque chama a função uma única vez
While !TSC6->(Eof())
aOPERACAO := {1, "PD", TSC6->C6_NUM, AllTrim(cUserName), cFilSC6, AllTrim(TSC6->C6_XOBSERV)}
cPRODUTO := TSC6->C6_PRODUTO
cLOCAL := TSC6->C6_LOCAL
nQUANT := TSC6->C6_QTDVEN
aLOTE := {"" ,"", TSC6->C6_LOCALIZ, TSC6->C6_NUMSERI}
A430Reserv(aOPERACAO, cNUMERO, cPRODUTO, cLOCAL, nQUANT, aLOTE)
If SC6->(dbSeek(cFilSC6+TSC6->C6_NUM+TSC6->C6_ITEM+TSC6->C6_PRODUTO))
Reclock("SC6",.F.)
SC6->C6_RESERVA := cNUMERO
SC6->(MsUnlock())
//SC6->(dbCloseArea()) // EVITE FECHAR UMA ÁREA PADRÃO
EndIf
TSC6->(dbSkip())
Enddo
TSC6->(dbCloseArea())
EndIf
RestArea(aAreax)
Return
|
|
|
Mensagem do
ROMERO_BR
em 20/10/2020, 11:43 h
Local: SP Registro: 12/03/2015 Postagens: 8 |
Bruno Romero
Bom dia.
Agradeço a todos as dicas e sugestões. Com a ajuda de vocês melhorei meu código.
No final das contas o erro estava no ponto de entrada que eu estava utilizando. Este ponto de entrada estava executando após todos as atualizações do sistema, ou seja, o sistema por padrão realmente excluía os registros na SC0 e quando eu realizava a consulta de fato estava sempre zerado. quando executei em outro ponto de entrada. que executava antes das atualizações a consulta trouxe o valor correto. |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|