Erro Set Relation indexação de nome
Moderador: Moderadores
- Piqueno
- 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
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)
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)
Erro Set Relation indexação de nome
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.
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.
Erro Set Relation indexação de nome
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
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
- Piqueno
- 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
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 ??
- Piqueno
- 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
Alguem tem alguma rotina que me ajudaria nisso quero algo bem simples.
Erro Set Relation indexação de nome
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!
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!
Erro Set Relation indexação de nome
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:
Como estamos usando índices é muito rápido usando DBSEEK. Qualquer dúvida vamos nos ajudando!
Sds,
Júlio.
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
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.Eolo escreveu:Em tempo: contar uma história, que aconteceu comigo. Era 1900 e bolinha
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
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
- Piqueno
- 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
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
Erro Set Relation indexação de nome
Piqueno, é isso aí."pescar o peixe e não comprar de um pescador"
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.
Erro Set Relation indexação de nome
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.
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.
Erro Set Relation indexação de nome
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.
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

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Erro Set Relation indexação de nome
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!
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)
Alexandre Santos (AlxSts)
- Piqueno
- 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
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.
