Que bom Rodrigo, que parece ter resolvido essa questão. Legal também saber que o sistema foi feito por você mesmo e quanto as varáveis, você me sorprendeu. Isso é sinal que você ja mostra grande personalidade em programação. Quanto a você não ter muita prática, bem... isso todos nós ja passamos por isso... e você não será nem o primeiro nem o ultimo... sinta-se a vontade, aqui todos nós estamos aqui com o mesmo propósito.
bfrodrigo escreveu:acho que não soube me expressar
Bem, é importante saber expor a questão toda, exemplificando e mostrando (de preferência) seu código-fonte, onde pode estar ocorrendo o erro. Isso facilita na identificação de falhas.
bfrodrigo escreveu:Agora, estou fazendo assim:
Use Clientes index Clidat
Sim, não está errado abrir de essa forma. Mas seria conveniente, você sempre verificar se o NTX existe primeiramente. Também não sei se você utiliza o SELE 1, SELE 2, SELE 3, conforme você vai abrindo os diferentes DBFs. Com certeza seu sistema deve ter mais do que 1 DBF. E eu acho muito válido identificar as áreas conforme você vai abrindo, isto evita que você tenha que estar abrindo e fechando os DBFs. Um exemplo do uso do SELECT, é assim:
SET DATE TO BRITISH // Seleciona o formatado como o utilizado aqui no Brasil
SET CENTURY ON // Para trabalhar com 4 dígitos do ano
SELE 1
USE CLIENTES SHARED
IF !FILE("CLINUM.NTX")
INDEX ON STR
ZERO(CODCLI,5,0) TO CLICOD.NTX
ENDIF
IF !FILE("CLIDAT.NTX")
INDEX ON DTOS(DTANAS) TO CLIDAT.NTX
ENDIF
SET INDEX TO CLICOD,CLIDAT // isto é o mesmo que fazer DBSETINDEX("CLIDAT")
SELE 2
USE NOTAS SHARED
IF !FILE("NFDAT.NTX")
INDEX ON STRZERO(COD_CLI,5,0)+DTOS(NFDTA) TO NFCLDT.NTX
ENDIF
VCOD:="00001" // veja que contém zeros por causa do STRZERO()
SELE 1
SEEK VCOD
IF FOUND()
VNOM:=(
1->NOME) // Veja o 1 dizendo que da área 1 (clientes.dbf)
ELSE
MENSAGEM("Cliente não encontrado !",3)
RETURN .F.
ENDIF
VDTA:=CTOD("01/04/2007") // Trabalhe sempre com 4 dígitos no ano (+seguro)
SELE 2
SEEK VCOD+DTOS(VDTA) // o DTOS, irá transformar as data AAAAMMDD
// Veja que CONCATENEI o cpodigo_cliente MAIS a data_compra
// Mas precisa ser indexado do mesmo jeito.
DO WHILE (2->(!EOF()))
? STRZERO(2->NF,8,0)+" "+DTOC(2->VENCE)+" "+TRANSFORM((2->VALOR),"@E 999,999.99")
SKIP
ENDDO
bfrodrigo escreveu:E qual seria a finalidade do comando SHARED que vc usou.
O SHARED é para que o arquivo DBF seja aberto de forma COMPARTILHADO. Isto é fundamental, se você precisar utilizar seu sistema em REDE. Quer um conselho
Faça uso SEMPRE (ao menos que seja algum muito pequeno e tenha certeza que não usará em rede) das funções de tratamento para REDES. Comece sempre fazendo compartilhando os arquivos, pois um dia você vai se arrepender de não te-lo feito e dar o maior trabalho. Mas para isso, ja existem várias funções de tratamento, como por exemplo:
- Para
abrir DBF em modo compartilhado, dando a mensagem de que este arquivo não foi possível abrir.
- Para
bloquear o ARQUIVO, caso você precise fazer manutenção (como por exemplo, fazer um PACK).
- Para
bloquear o REGISTRO, caso você precise gravar no DBF. Por exemplo, fazer um REPLACE ou DELETE
- Para
adiconar um REGISTRO, caso você precise APPENDAR
Estas funções, que mencionei ja contém toa a forma seguras para estabelecer um SEMÁFORO na rede.
E outra coisa muito importante, que ajudará bastante no seu aprendizado é você ter AJUDA
ONLINE como por exemplo o uso do NG (norton Guide) que ora ativado possa ser usado com o seu EDITOR-DE-TEXTOS, onde você se posiciona com o cursor no COMANDO ou FUNÇÃO e você ativando com as teclas-hot-key poderá procurar a sintaxe de cada comando/função de dentro do seu editor.
Ok, Robson. espero ter ajudado um pouco.
Um clip-abraço :)Pos