Página 1 de 1
ALIAS = dor de cabeça
Enviado: 25 Out 2006 16:47
por Genildo
Boa Tarde galera... resolvi recorrer novamente a vcs antes q eu jogue esse monitor no chão ... eu até consigo usar o SELECT sem dar problema ... mas usando no meu Drive C ...
quando eu jogo o programa para executar na rede ele agora inventou de dar erro de ALIAS DOES NOT EXIST XXX
o pedaço do programa é esse :
*******************************
PROCEDURE REL_GRAT
Set Talk Off
SET DATE BRITISH
SET CENTURY ON
CLOSE ALL
Select 0
Use FUNC ALIAS folha
Select Folha
Sort TO Lista on Wnome
CLOSE ALL
USE LISTA
Select 1
Use LISTA Alias XXX
Select XXX
DELETE FOR WAREA <> 1 <-- erro aki
DELETE FOR WFOLHA <> "S"
IF LEMP <> "T"
DELETE FOR WEMP <> LEMP
falta algum comando para executar em rede ?? to doido ..to doido .. iniciante é triste né ... grato
Enviado: 25 Out 2006 17:51
por vagucs
PROCEDURE REL_GRAT
Set Talk Off
SET DATE BRITISH
SET CENTURY ON
CLOSE ALL
// Select 0 Se vai usar alias nao use numeração para eles isso
// praticamente está em desuso
Use FUNC NEW ALIAS folha // Use sempre o NEW para criar um
// novo alias, é um bom costume
// Select Folha Vc nao precisa selecionar o alias pois vc está nele.
Sort TO Lista on Wnome
CLOSE ALL
// USE LISTA Vc está usando o banco de dados sem especificar alias
// Select 1 Nada de numeração para areas de trabalho
Use LISTA NEW Alias XXX // Aqui o alias nao era aberto pois vc ja tinha
// abrido o bando de dados antes sem
// especificar nome de alias, o arquivo
//ficava trancado
// Select XXX Nao precisa selecionar a area pois vc está nela
DELETE FOR WAREA <> 1 <-- erro aki // Veja se o erro vai acontecer
//e me fale
DELETE FOR WFOLHA <> "S"
IF LEMP <> "T"
DELETE FOR WEMP <> LEMP
Enviado: 26 Out 2006 13:23
por gvc
[DELETE FOR WAREA <> 1]
Verifique se existe o campo WAREA no seu arquivo aberto. (LISTA.DBF)
[select 0] - funciona como o new. Ele posiciona na primeira área (select) não utilizada pelo sistema.
[CLOSE ALL
USE LISTA (1)
Select 1 (2)
Use LISTA Alias XXX (3)
Select XXX ]
1 - vc abriu o arquivo lista em uma área.
2 - vc passou para área 1.
3 - mandou abrir o mesmo arquivo com um novo alias.
Como o Mestre Wagner colocou:
dbcloseall()
Use LISTA Alias XXX new
DELETE FOR WAREA # 1 .or. WFOLHA # "S"
IF LEMP # "T"
DELETE FOR WEMP # LEMP
end
No LISTA.DBF vc deve ter os campos WAREA, WFOLHA e WEMP.
Enviado: 26 Out 2006 14:16
por vagucs
Se for trabalhar com a clausula NEW não uise SELECT <NUMERO> quando for portar isto para uma outra linguagem pode ter problemas como eu ja tive, sempre referencia a area de trabalho pelo nome e sempre use a clausula NEW para já abrir em uma area vazia.
Nao terá assim nenhum problema quando portar isto para o xHarbour.
Enviado: 27 Out 2006 16:23
por Genildo
isso é muito comédia ... semana passada o cara me explicou nesse modo .. na linha seguinte do ALIAS dar um SELECT tipo como se estivesse abrindo o ALIAS ... estou testando aqui
Enviado: 27 Out 2006 16:35
por Genildo
deu erro na primeira linha de DELETE (erro: WORK AREA NOT IN USE: DBEVAL) esse erro ta me perseguindo quando executo a rotina no drive F da rede ... no meu C ela ta rodando tranquilo ... isso ta mto escroto ... agradeço pelas ajudas, estão sendo de muita serventia.
Enviado: 27 Out 2006 16:47
por vagucs
so se a unidade tá mapeada como somente leitura.
Enviado: 27 Out 2006 17:07
por MARCELOG
Partindo do pressuposto de que esse é exatamente o seu prg,
veja o que eu, talvez, faria.
Fique bem claro, eu talvez faria!
PROCEDURE REL_GRAT
Set Talk Off
SET DATE BRITISH
SET CENTURY ON
CLOSE ALL
Select 0 //Tire isso
Use FUNC ALIAS folha
Select Folha //Tire isso
Sort TO Lista on Wnome
CLOSE ALL
USE LISTA EXCLUSIVE //Acrescente aqui
Você pretendente deletar vários registros, então use o arquivo no modo exclusivo para isso.
Select 1 //Tire isso
Use LISTA Alias XXX //Tire isso
Select XXX //Tire isso
DELETE ALL FOR WAREA <> 1 <-- erro aki //Acrescente aqui
DELETE ALL FOR WFOLHA <> "S" //Acrescente aqui
IF LEMP <> "T"
DELETE ALL FOR WEMP <> LEMP
//Acrescente aqui
MarceloG
PS: fique calma, desafios foram criados para serem superados. Você vai conseguir, tenho certeza disso.
Enviado: 27 Out 2006 17:28
por MARCELOG
Criar um sistema em rede é relativamente fácil.
Mas isso depois que você quebra o cabeção para resolver problemas que, no futuro, vai dizer: como eu era burro!
Eu não gosto de comandos, muito embora eles sejam simples e didáticos, vão ser convertidos em função.
Então, é desperdício de tempo não familiarizar-se com quem realmente faz o "serviço": as funções.
Contudo,vou usar comandos nessa ajuda.
Para o arquivo ser "funcionalmente" utilizado em rede, você precisa abrí-lo no modo compartilhado
USE NomedoArquivo SHARED NEW
Esse comando abre o arquivo compartilhado na próxima área de trabalho, seja ela qual for.
Pronto!
O quê? Quer saber o esquema de incluir, alterar e exluir né? Eu sabia?
Bem, para incluir registros num arquivo compartilhado, você usa o seguinte comando:
APPEND
Quando usá-lo, você deve verificar se foi bem sucedida a operação.
Como?
Testando a condição da função NETERR()
IF !NETERR()
OK
ENDIF
Se tudo deu certo, um registro em branco foi criado no final do arquivo e bloqueado.
Então, preecha os campos com os dados que você quer, force sua gravação em disco (no arquivo) e libere o registro. Como?
COMMIT
UNLOCK
Para alterar ou deletar um registro em rede, ele também tem que estar bloqueado. Como?
RLOCK()
Pra isso não tem jeito, tem que ser a função.
Depois, se for alterar, preecha os campos com os dados que você quer, force sua gravação em disco (no arquivo) e libere o registro. Como?
COMMIT
UNLOCK
Ou, se for deletar?
DELETE
UNLOCK
----------------
Acho que é, de forma bem básica, isso.
MarceloG
Enviado: 28 Out 2006 04:38
por rochinha
Amiguinho
Voce pode usar técnicas de TRACE para detectar algum problema, exemplo:
Após preencher uma variavel e verificar se a mesma contem um dado especifico coloque após a mesma algo como isto:
? Variavel
No caso de tabelas:
? dbf()
Pode ser que o arquivo esteja aberto mas por algum motivo voce esta dando um comando para uma tabela que esta em outra area.
Um exemplo é voce estar tentando dar um comando em um campo, em uma tabela, em uma determinada area sendo que o campo desejado esta em outra area. Detecte em qual area vc esta e selecione-a e volte para a area atual.
@braços :?)