Erro Set Relation indexação de nome

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

Erro Set Relation indexação de nome

Mensagem por Piqueno »

Boa tarde preciso mais uma vez de uma ajudinha,
estou numa criação de uma rotina de vendas e na minha tela de pedido preciso buscar nome do cliente e tambem trazer o produto cadastrado para compor meu pedido porem na hora que relaciono não vem os dados, tenho os campos iguais nas tabelas EX: codcli, segue parte do meu codigo. Obs: vi que para usar duas relaçoes assim vou precisar da clausula additive, podem me ajudar nesta questão, duvidas estou a disposição.
/*dbselectarea("funcios") //SELECIONA A ARE Q RELACIONA COM A TABELA EM QUESTAO(PEDIDO)
funcios->( DbSetOrder(1) ) //SELECIONA O CAMPO Q IRA FAZER O RELACIONAMENTO(IGUAL EM AMBAS TABELAS)

dbselectarea("PEDIDOS") //SELECIONA A TABELA Q PRECISA DOS RELACIONAMENTOS
dbsetrelation("funcios", {|| PEDIDOS->codfunc } ) // RELACIONA O CODCLI PEDIDO COM O CODCLI CLIENTE-> Q JÁ FOI SELECIONADO ANTES
ALERT("TESTE")
dbselectarea("funcios")
dbsetorder(1)
go top
do while ! eof()
ALERT(funcios->nome)
*/
dbselectarea("clientes")
clientes->(dbsetorder(1))
dbselectarea("pedidos")
dbsetrelation("clientes",{||pedidos->codcli})
dbselectarea("clientes")
dbselectarea(1)
go top
do while !eof()
alert(clientes->nome)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

Piqueno,

Pela sua explicação, não deu pra entender exatamente o problema, mas parece que cabe um esclarecimento sobre o modo como o SET RELATION funciona. A “relation” é feita registro a registro: cada registro no DBF pai se relaciona a apenas UM registro no(s) DBF(s) filho.

Exemplo típico:

DBF Empregados
Nome Empregado / Codigo Departamento
Jose / 1
Antonio / 2
Maria / 1
Pedro / 3
Joao / 2

DBF Departamento
Codigo / Departamento
1 / Financeiro
2 / Compras
3 / Producao

Estando o RELATION setado (pelo código do Departamento), se vc der o comando
LIST empreg->nome + “-“ + depto->nome
sobre o DBF Empregados, vai aparecer:
Jose – Financeiro
Antonio - Compras
Maria - Financeiro
Pedro - Producao
Joao - Compras

Em tempo: a cláusula ADDITIVE ("adicional") é quando vc tem uma relação já ativada e quer incluir outra, mantendo a anterior.


Então, se você quer montar um PEDIDO juntando UM nome do cliente (DBF Clientes) com MAIS DE UM produto cadastrado (DBF Produtos) e/ou MAIS DE UM pedido (DBF Pedidos), o SET RELATION não vai resolver.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

Complementar o exemplo, colocando mais um DBF na história:

DBF Empregados
Nome Empregado / CodDpto / CodLocal
Jose / 1 / 2
Antonio / 2 / 2
Maria / 1 / 1
Pedro / 3 / 2
Joao / 2 / 1

DBF Departamento (indexado por CODIGO), alias DPTO
CodDpto / Departamento
1 / Financeiro
2 / Compras
3 / Producao

DBF Local (indexado por CODIGO), alias LOCAL
CodLocal / Local
1 / Capital
2 / Interior

SET RELATION TO CodDpto INTO DPTO, CodLocal INTO LOCAL

LIST empreg->nome + “-“ + depto->nome + "-" + local->local
Jose – Financeiro - Interior
Antonio - Compras - Interior
Maria - Financeiro - Capital
Pedro - Producao - Interior
Joao - Compras - Capital
Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

Erro Set Relation indexação de nome

Mensagem por Piqueno »

Como sou iniciante em clipper, as vezes me perco em algumas citações. como poderia resolver isso para que consiga gravar meu pedido, buscando nome de um cliente e um produto cadastrados em outro dbf. Como resolver esta situação ??
Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

Erro Set Relation indexação de nome

Mensagem por Piqueno »

Alguem tem alguma rotina que me ajudaria nisso quero algo bem simples.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

Piqueno, eu também já fui um iniciante em Clipper e, por isso, arrisco a dar o conselho (ou sugestão) a seguir: você pode até pegar e aplicar rotinas prontas de terceiros mas, se não entender o funcionamento da linguagem e como ela se aplica ao seu objetivo, vai ficar difícil.

Eu acho que você deveria adquirir um livro e se debruçar nele, como passo inicial. Eu, comecei com um do Clipper Summer 87, que você acha por aí pra comprar, bem barato (a versão mais estável do Clipper diz que é a 52e, mas a base entre ela e a Summer é a mesma).

http://produto.mercadolivre.com.br/MLB- ... ionais-_JM

Também, abra o NG (Norton Guide), que vem com o Clipper, e estude o funcionamento de cada comando/função.

Com isso, aprendendo os fundamentos da coisa, você vai conseguir andar melhor. Se copiar uma rotina de alguém sem saber direito o porquê das coisas, na primeira alteração que o seu cliente pedir você vai estar em apuros... Além disso, uma mesma rotina pode ser escrita de “n” maneiras diferentes, cada programador tem um jeitão de trabalhar (e você vai ter que desenvolver o seu).

Só pra falar rapidamente sobre DBFs, você precisa saber como os dados são guardados dentro dele, o que são e pra que servem os índices (NTX ou CDX), como funcionam os comandos LOCATE e SEEK, pra que serve o DBEdit e o Tbrowse, etc. etc. As dúvidas são surgir, mas vão ser específicas, aí poderemos lhe ajudar melhor!

Bem-vindo ao Clipper!



Em tempo: contar uma história, que aconteceu comigo. Era 1900 e bolinha, comprei um PC XT, com o DOS "0.0.0 Beta", levei pra casa. Liguei o danado, apareceu o "C:\", cursor piscando. Pensei: "Bão, vou fazer uma conta!". Apertei 2+2=ENTER, apareceu "Bad Command blablabla". Fiquei bem chateado, o tranqueira não fazia nem conta "de mais"! Fui na Livraria Cultura, Setor de Inphormática, expliquei meu problema. O cara me vendeu um livrinho (umas 30 folhas), sobre o DOS. Disse que eu estudasse ele e que, quando eu estivesse pronto, ele ia me indicar outro. Estudei, aprendi, meses depois peguei esse livro do Clipper (do link). Apanhei mais que cachorro de beudo, num entendia nada, mas acabei virando Clippeiro. Então, Piqueno, mãos à obra!
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Erro Set Relation indexação de nome

Mensagem por jelias »

Amiguinho Piqueno,

O Mestre Eolo já lhe passou dicas valiosas, eu mesmo já aprendi muito com ele. Entretanto irei tentar acrescentar alguma coisa. Por gentileza, compartilhe qual versão do Clipper está usando e qual RDD de índices, exemplo: DBFNTX / DBFCDX / DBFNSX. É sempre importante compartilhar o máximo de informação para que possamos entender melhor a situação.

Eu não faço uso de DBSETRELATION por vários motivos, um deles é a velocidade. Para a situação apresentada, pode fazer da seguinte forma:

Código: Selecionar todos

sele AL_CLIEN      // Seleciona o alias de clientes.
DBSETORDER(1)   // Índice (código do cliente)
DBSEEK(v_cliente)   // Seleciona o cliente desejado.
// Quando precisar mostrar o nome do cliente selecionado, é só se referir da seguinte forma: AL_CLIEN->nome
...
// Abaixo você poderá mostrar dos os itens do seu pedido. 

sele AL_ITENS     // Seleciona o alias de itens de pedido
DBSETORDER(1)  // Índice (código do pedido) 
DBSEEK(v_Pedido) //Seleciona o pedido desejado.
// Caso encontre o código do pedido contido na variável v_pedido, irá satisfazer o while e mostrar os itens. 
do while (codped = v_Pedido .and. !EOF())  
     @ 10,01 say "Item: "+Coditem+" "+Descricao+" "+AL_CLIEN->nome
     // Coditem = campo do banco de dados do alias AL_ITENS      
     // Descrição = campo do banco de dados do alias AL_ITENS
     // AL_CLIEN->nome = campo do banco de dados do alias AL_CLIEN já posicionado acima. 
    skip
end
Como estamos usando índices é muito rápido usando DBSEEK. Qualquer dúvida vamos nos ajudando!
Eolo escreveu:Em tempo: contar uma história, que aconteceu comigo. Era 1900 e bolinha
Mestre Eolo, agradeço por compartilhar conosco sua primeira experiência com o famoso DOS. Fez me recordar de quando vi meu primeiro PC, um IBM Personal Computer XT (IBM 5160), às vezes abreviado para PC XT ou simplesmente XT. Aprendi a programar em Basic no Centro Educacional de Informática em São Paulo, no bairro República. Na época tinha 13 anos. Hoje trabalho como administrador de empresa e quase não tenho tempo para programar, mais sou apaixonado pelos códigos e não consigo ficar longe.

Sds,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

Erro Set Relation indexação de nome

Mensagem por Piqueno »

Agradeço ao eolo pelas palavras, pretendo comprar um livro sim, quero "pescar o peixe e não comprar de um pescador" obrigado pelas dicas. Tambem ao jelias por encaminhar meus passos quanto ao codigo, obrigado por me ajudar. E uma honra esta neste forum. Ah estou usando clipper 5.2 e dbfntx
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

"pescar o peixe e não comprar de um pescador"
Piqueno, é isso aí.
Bem-vindo!

Em tempo: tudo no Clipper é em inglês e os nomes dos comandos e funções são uma dica do que eles fazem. Se você não sabe nada de inglês, arrume um dicionário. Vai ajudar bastante.

Dar um exemplo: DBCOMMITALL().
Quebra o nome:
- DB: Data Base, Banco de Dados
- COMMIT: submeter, encerrar
- ALL: todos
"Tradução": encerre o que tá pendente na memória, de todos os DBF abertos, e grave em disco.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

Piqueno, lembrei de outro detalhe, que pelo menos pra mim é fundamental.

Vai começar um sistema? Esquece ("em termos") a linguagem, o dicionário, o computador. Aliás, desligue o computador.

Pegue algumas folhas de sulfite em branco, um lápis e uma borracha, e desenhe o que vc tem em mente, onde vc quer chegar, como vc acha que a coisa vai funcionar. Use, se isso ajudar, as ferramentas de fluxugrama (só as básicas já resolvem).

Quando vc estiver com o seu sistema pronto, no papel e na cabeça, e sabendo quais funções o Clipper tem e como elas funcionam, é ligar o computador, sair digitando coisa e correr pro abraço.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Erro Set Relation indexação de nome

Mensagem por Eolo »

Júlio "Jelias", tem isso de mestre, não.
Legal alguma coisa minha ter lhe ajudado, mas somos todos aprendizes.
É a soma de todos nós que faz a coisa acontecer. E graças ao Toledo.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Erro Set Relation indexação de nome

Mensagem por alxsts »

Olá!

Sugiro que ao invés de estudar um livro sobre Clipper Summer'87, estude um sobre Clipper 5.2. É muito mais fácil passar do 5.2 para o Harbour.

Um dos melhores livros sobre o assunto é o do Rick Spence. Acabo de pesquisar e encontrar dois exemplares usados à venda, neste link
Bons estudos!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Piqueno
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Out 2013 18:07
Localização: Monte Carmelo-MG

Erro Set Relation indexação de nome

Mensagem por Piqueno »

Agradeço muito a todos, vi uma mensagem neste forum que diz tudo "...Feliz aquele que transfere o que sabe e aprende o que ensina. Cora Coralina..." do colega Rochinha. que um dia o possa repassar o q aprendi e aprender mais.
Responder