ALIAS = dor de cabeça

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Genildo
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 05 Out 2006 10:19
Localização: Nilopolis-RJ

ALIAS = dor de cabeça

Mensagem 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
P4-256 mem ... q merreca rss
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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.
Sem mais
Wagner Nunes
www.vagucs.com.br
Genildo
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 05 Out 2006 10:19
Localização: Nilopolis-RJ

Mensagem 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
P4-256 mem ... q merreca rss
Genildo
Usuário Nível 1
Usuário Nível 1
Mensagens: 16
Registrado em: 05 Out 2006 10:19
Localização: Nilopolis-RJ

Mensagem 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.
P4-256 mem ... q merreca rss
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

so se a unidade tá mapeada como somente leitura.
Sem mais
Wagner Nunes
www.vagucs.com.br
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder