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 :?)