× Linguagem de Programação ADVPL

Perguntas Socorro com uma Query

Mais
10 anos 1 mês atrás #25634 por mbrigagao
Pessoal, bom dia.

Estou tendo um problema com uma query, que até uns dias atrás funcionava perfeitamente.

Hoje ela dá o seguinte erro :
ADS - Replace Error - 5003: The data supplied was longer than Advantage expected. - Field: G1RECNO Table: \\192.168.4.3\d$\outsourcing\clientes\g5d800\protheus_data\system\t_sc824470.dbf

Segue o bloco do codigo que está com 'erro'...
dbSelectArea("SG1")
dbSetOrder(1)

cQryTRB := "SELECT SG1.*,SG1.R_E_C_N_O_ AS G1RECNO FROM "
cQryTRB += RetSqlName("SG1") + " SG1 WHERE "
cQryTRB += "SG1.D_E_L_E_T_ = ' ' AND "
cQryTRB += "SG1.G1_FILIAL='"+cSG1Filial+"' And SG1.G1_COMP ='"+cCodOrig+"' "

If !lPyme
	cQryTRB += " And  SG1.G1_GROPC='"+cGrpOrig+"' And SG1.G1_OPC='"+cOpcOrig+"' "
EndIf

cQryTRB += " ORDER BY "+SqlOrder(SG1->(IndexKey()))
cQryTRB := ChangeQuery(cQryTRB)

dbUseArea( .T.,"TOPCONN", TcGenQry( ,,cQryTRB ), cAliasTMP, .T., .F. )
TcSetField(cAliasTMP,"G1_INI","D",8,0)
TcSetField(cAliasTMP,"G1_FIM","D",8,0)

dbSelectArea(cAliasTMP)
copy to &_carq
dbUseArea( .T.,__LOCALDRIVER, _cArq,cAliasTRB, .T. , .F. )
dbSelectArea(cALiasTRB)
dbGoTop()

A query montada fica assim :
SELECT SG1.*, SG1.R_E_C_N_O_ AS G1RECNO FROM SG1010 SG1 WHERE SG1.D_E_L_E_T_ = ' ' AND SG1.G1_FILIAL='01' AND SG1.G1_COMP ='UNV-003-00-PINT' AND SG1.G1_GROPC=' ' AND SG1.G1_OPC=' ' ORDER BY G1_FILIAL,G1_COD,G1_COMP,G1_TRT

Pelo query analizer do APSDU ela roda certinho.... porém na hora de copiar o resultado para o DBF é que dá o err.

Alguém poderia me dar uma luz ?

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25641 por admin
Respondido por admin no tópico Socorro com uma Query
Marcelo quantos registros existem nesta tabela ? aparentemente está estourando o campo.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25645 por mbrigagao
Respondido por mbrigagao no tópico Socorro com uma Query
Olhando pelo APSDU, na barra de 'status' tem 1.033.833....

Fazendo uma query para contar os registros ativos tenho 807.982... já contando todos registros (ativos e deletados) tenho 961.367.

Na query da rotina que está acusando erro, pude verificar que tenho registros com o RECNO acima de 1.000.000, me se for contar os registros que estão dentro do resultado da query não chegam a 1.000 ....

Como resolver esse problema para que eu possa gerar o DBF ?

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25647 por admin
Respondido por admin no tópico Socorro com uma Query
Rapaz tenta mudar para:

TCQUERY cQuerAA New Alias "TEMP1"

Senão acho que vai ter que gerar como ctree este arquivo, ou na boa, reduzir esta tabela eliminando os registros deletados.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25651 por mbrigagao
Respondido por mbrigagao no tópico Socorro com uma Query
Bom dia,

Eliminar os deletados resolve até certo ponto, pois como a tabela continua 'crescendo' o problema apareceria em breve...

Consegui resolver da seguinte forma usando TcSetField(cAliasTMP,"G1RECNO","N",15,0), conforme abaixo :
dbSelectArea("SG1")
dbSetOrder(1)

cQryTRB := "SELECT SG1.*,SG1.R_E_C_N_O_ AS G1RECNO FROM "
cQryTRB += RetSqlName("SG1") + " SG1 WHERE "
cQryTRB += "SG1.D_E_L_E_T_ = ' ' AND "
cQryTRB += "SG1.G1_FILIAL='"+cSG1Filial+"' And SG1.G1_COMP ='"+cCodOrig+"' "

If !lPyme
	cQryTRB += " And  SG1.G1_GROPC='"+cGrpOrig+"' And SG1.G1_OPC='"+cOpcOrig+"' "
EndIf

cQryTRB += " ORDER BY "+SqlOrder(SG1->(IndexKey()))
cQryTRB := ChangeQuery(cQryTRB)

dbUseArea( .T.,"TOPCONN", TcGenQry( ,,cQryTRB ), cAliasTMP, .T., .F. )
TcSetField(cAliasTMP,"G1_INI","D",8,0)
TcSetField(cAliasTMP,"G1_FIM","D",8,0)
TcSetField(cAliasTMP,"G1RECNO","N",15,0)

Assim não terei problemas....

Grato a todos.

Por favor Acessar ou Registrar para participar da conversa.

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