operador macro "&"
Moderador: Moderadores
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Discussão mais boba gente.
A macro gera mais PCODE mas hoje não dá para sentir atraso no processamento, independente de como a abertura seja feita, se ela funcionar, está correto.
Existem técnicas, e cada um tem a sua, é inquestionável.
Agora explicar por que eu uso isso ou por que eu uso aquilo ai é demais né.
A se funcinou. Bola para frente.
Um código limpo, mostra um programador esperientes, macros, eu não uso em meu sistemas, em casos muitos raros. Mas para filtros ou algo do tipo, mas se ela é existe, é para ser usada, independente da forma.
A macro gera mais PCODE mas hoje não dá para sentir atraso no processamento, independente de como a abertura seja feita, se ela funcionar, está correto.
Existem técnicas, e cada um tem a sua, é inquestionável.
Agora explicar por que eu uso isso ou por que eu uso aquilo ai é demais né.
A se funcinou. Bola para frente.
Um código limpo, mostra um programador esperientes, macros, eu não uso em meu sistemas, em casos muitos raros. Mas para filtros ou algo do tipo, mas se ela é existe, é para ser usada, independente da forma.
-
gransoft
- Usuário Nível 3

- Mensagens: 321
- Registrado em: 06 Jul 2004 17:48
- Localização: UBERLÂNDIA-MG
- Contato:
Operador macro &
ARAGUARI-MG, 14 de fevereiro de 2005.kiko escreveu: CAMI := "C:\PROGRAMA\ATACADO\LOJA\DADOS\KARAPALIDA\LOJA1"
Prezado kiko,
Verifique:
CAMI := "C:\PROGRAMA\ATACADO\LOJA\DADOS\KARAPA~1\LOJA1"
Atenciosamente,
Janis Peters Grants.
Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Olá amigos...
Também já apanhei muito com esta macro.
Acontece que o USE não aceita macro na linha com o operador + , ou seja:
cCam := "F:"
USE &cCam + "\CLIENTE\DADOS.DBF" && dá erro.
Use assim:
cCam := "F:"
cArq:= "\CLIENTE\DADOS"
cStr := cCam + cArq && aqui está o pulo do gato.
USE &cStr
Abraços.
Hasse
Também já apanhei muito com esta macro.
Acontece que o USE não aceita macro na linha com o operador + , ou seja:
cCam := "F:"
USE &cCam + "\CLIENTE\DADOS.DBF" && dá erro.
Use assim:
cCam := "F:"
cArq:= "\CLIENTE\DADOS"
cStr := cCam + cArq && aqui está o pulo do gato.
USE &cStr
Abraços.
Hasse
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
VOCE ESTA COMETENDO UM ERRO DE SINTAXE.. TENTE ASSIM...
CAMI := CAMI + "FINCLI.DBF"
USE &CAMI
OU ENTAO
CAMI := CAMI + "FINCLI.DBF"
USE (CAMI)
DO JEITO QUE VOCE ESTA USANDO O COMANDO VAI GERAR UMA EXECUCAO ASSIM:
USE C:\PROGRAMA\ATACADO\LOJA\DADOS\KARAPALIDA\LOJA1\+"FINCLI.DBF"
OK..
RUBENS
CAMI := CAMI + "FINCLI.DBF"
USE &CAMI
OU ENTAO
CAMI := CAMI + "FINCLI.DBF"
USE (CAMI)
DO JEITO QUE VOCE ESTA USANDO O COMANDO VAI GERAR UMA EXECUCAO ASSIM:
USE C:\PROGRAMA\ATACADO\LOJA\DADOS\KARAPALIDA\LOJA1\+"FINCLI.DBF"
OK..
RUBENS
"Eu e minha casa servimos ao Senhor e você
"
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho Kiko,
O Clipper trabalha entendendo que nomes de diretórios e arquivo devem possuir no maximo 8 letras e 3 de extensão e 250 ou 255 de tamanho da linha somando os sub dos subdiretórios componentes.
Como se trata de diretórios o maximo que se pode alcançar no nome são oito caractesres e se o exemplo que voce deu realmente exista um diretório com KARAPALIDA, este não será enxergado pelo Clipper.
Faça uso de uma biblioteca que trata estes tipos de nomes como a LFN.LIB, Long File Name.LIB.
Basta pegar aqui
Lembre-se o Clipper surgiu para ser usado sob o DOS padrão( abaixo da versão 7, que vem no Win95 em diante) portanto ele não é obrigado a aceitar esta compatibilidade.
@braços :?)
O Clipper trabalha entendendo que nomes de diretórios e arquivo devem possuir no maximo 8 letras e 3 de extensão e 250 ou 255 de tamanho da linha somando os sub dos subdiretórios componentes.
Como se trata de diretórios o maximo que se pode alcançar no nome são oito caractesres e se o exemplo que voce deu realmente exista um diretório com KARAPALIDA, este não será enxergado pelo Clipper.
Faça uso de uma biblioteca que trata estes tipos de nomes como a LFN.LIB, Long File Name.LIB.
Basta pegar aqui
Lembre-se o Clipper surgiu para ser usado sob o DOS padrão( abaixo da versão 7, que vem no Win95 em diante) portanto ele não é obrigado a aceitar esta compatibilidade.
@braços :?)
descobri uma outra causa pra esse problema, e assim, a soluçao tb...
eu trabalho com RDD SixNsx versao 2 com Tags.
vejam como eu faço a abertura dos arquivos de dados:
no codigo acima existem duas chamadas de funcao, uma eh o CRIA_REL() com a estrutura do arquivo de dados, que nao é necessaria no momento, e a segunda é a funçao ABRE(), cujo codigo segue abaixo:
ai, o que acontecia para gerar o erro: no começo da funcao ABRE, eu gero um string com os indices do banco de dados para serem abertos, e na hora de jogar essa string no ¯o era quando gerava o erro.
como o rochinha falou agora a pouco, o nome do arquivo tem que ser no formato 8.3, e a linha de ateh 250 caracteres...
no exemplo que eu citei acima, o tamanho da string pra ser colocada no operador ¯o passava dos 250 caracteres, e gerava o erro que me levou a abrir esse topico: &OPERATIO TOO COMPLEX.
o que eu fiz para sanar esse problema foi dividir a funçao CRIA_REL() em partes menores, para nao estourar o tamanho dos 250 caracteres. agora esta tudo tranquilo. segue abaixo o novo formato da funçao:
assim funcionou perfeitamente, pois na primeira chamada, nao vai passar o tamanho dos 250 caracteres na linha pra colocar no ¯o, e na segunda chamada, eu crio o restante dos indices...ai fica supimpa!
é isso ai, obrigado pela atençao de todos e ateh a proxima...
eu trabalho com RDD SixNsx versao 2 com Tags.
vejam como eu faço a abertura dos arquivos de dados:
Código: Selecionar todos
CRIA_REL(INI+"REL")
aIndex:={"PE_TOSA",;
"PE_TOTA",;
"STRZERO(PE_CODI,7)+PE_GRAD+STRZERO(PE_CORA,2)",;
"PE_RDAT",;
"PE_RHIS",;
"PE_DIAS",;
"PE_CODI",;
"PE_NOPR",;
"PE_GRUP",;
"PE_SUBG",;
"PE_COLE",;
"PE_GRAD+STRZERO(PE_CORA,2)",;
"STRZERO(PE_GRUP,4)+STRZERO(PE_TOTA,10,2)",;
"STRZERO(PE_TOTA,10,2)+STRZERO(PE_GRUP,4)"}
"PE_FORN",;
"PE_RCUS+STRZERO(PE_TOTA,10,2)",;
"PE_RORI"}
IF ! Abre(INI+"REL",aIndex,"Relatorio")
RETURN(FALSE)
ENDIF
Código: Selecionar todos
******************************
func Abre(cCom,aIndex,cAlias)
******************************
LOCAL cAux:="",temp,f,nEvery
FOR f=1 TO LEN(aIndex)
cAux +=".OR. ! FILE('"+cCom+NTX+"')"
NEXT f
IF EMPTY(cAux)
cAux=".F."
ELSE
cAux=SUBSTR(cAux ,5)
ENDIF
IF USED()
NEW_SELECT()
ENDIF
IF &cAux .OR. indexa .or. legal2=.T.
IF ! USEREDE(cCom+DBF)
mensagem("Arquivo n„o Acess¡vel !!!")
RETURN(.f.)
ENDIF
cAux=STRTRAN(cAux,".OR.",".AND.")
IF &cAux .or. indexa .or. legal2=.T.
PACK
ENDIF
IF ! FILE(cCom+NTX) .OR. indexa .or. LEGAL2=.T.
FOR f=1 TO LEN(aIndex)
aInd=ListAsArray(aIndex[f],";")
IF ! ISFISCAL()
INDEX ON &(aInd[1]) tag (ccom+strzero(F,2)) TO (cCom) eval indexbar() every ROUND(LASTREC()/10,0)
ELSE
INDEX ON &(aInd[1]) tag (ccom+strzero(F,2)) TO (cCom)
ENDIF
NEXT f
ENDIF
ENDIF
IF ! USEREDE(cCom+DBF,cAlias,.F.)
Mensagem(cAlias+" -> Aten‡„o: Arquivo n„o dispon¡vel !!!")
RETURN(.F.)
ENDIF
Set Index TO (cCom+NTX)
ordlistclear()
RETURN(.T.)
como o rochinha falou agora a pouco, o nome do arquivo tem que ser no formato 8.3, e a linha de ateh 250 caracteres...
no exemplo que eu citei acima, o tamanho da string pra ser colocada no operador ¯o passava dos 250 caracteres, e gerava o erro que me levou a abrir esse topico: &OPERATIO TOO COMPLEX.
o que eu fiz para sanar esse problema foi dividir a funçao CRIA_REL() em partes menores, para nao estourar o tamanho dos 250 caracteres. agora esta tudo tranquilo. segue abaixo o novo formato da funçao:
Código: Selecionar todos
CRIA_REL(INI+"REL")
aIndex:={"PE_TOSA",;
"PE_TOTA",;
"STRZERO(PE_CODI,7)+PE_GRAD+STRZERO(PE_CORA,2)",;
"PE_RDAT",;
"PE_RHIS",;
"PE_DIAS",;
"PE_CODI",;
"PE_NOPR",;
"PE_GRUP",;
"PE_SUBG",;
"PE_COLE",;
"PE_GRAD+STRZERO(PE_CORA,2)",;
"STRZERO(PE_GRUP,4)+STRZERO(PE_TOTA,10,2)",;
"STRZERO(PE_TOTA,10,2)+STRZERO(PE_GRUP,4)"}
IF ! Abre(INI+"REL",aIndex,"Relatorio")
RETURN( FALSE )
ENDIF
CRIA_RE1(INI+"RE1")
aIndex:={"PE_FORN",;
"PE_RCUS+STRZERO(PE_TOTA,10,2)",;
"PE_RORI"}
IF ! Abre(INI+"RE1",aIndex,"Relatorio1")
RETURN( FALSE )
ENDIFé isso ai, obrigado pela atençao de todos e ateh a proxima...