Como colocar dois campos em um so

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Como colocar dois campos em um so

Mensagem por Antonio Matheus »

Boa tarde para todos venho atraves deste para se consigo fazer um arquivo de atualizacao para um banco de dados que uso, e o seguinte uso no banco de dados que é para controle de estoque o arquivo ARQ0006.DBF e o para consulta TABELA.DBF, eu olhei as estru dos mesmos e tem algums campos que sao iguais, porem no arq0006.dbf esta descricao e no tabela.dbf esta med_des e med_apre portanto eu queria transformar os campos med_des e med_apre em descricao do arq0006.dbf para que possa fazer a atualizacao, deste ja agradeco a colaboracao
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Como colocar dois campos em um so

Mensagem por anacatacombs »

Calma lá.
Você tem dois DBFS e quer passar os dados de um para o outro. Em um arquivo, a variavel que grava a descrição está com um nome, e no outro arquivo são duas variaveis. Você gostaria que esses dois campos ficassem com a descrição ?
É isso?
É uma rotina que será realizada apenas uma vez?

Desculpe ficar perguntando, mas não consegui entender com clareza sua pergunta.
Deve ser o sono.
Maya Fiuza
Usuário Nível 2
Usuário Nível 2
Mensagens: 50
Registrado em: 11 Out 2010 19:38
Localização: Foz do Iguaçu-PR
Contato:

Re: Como colocar dois campos em um so

Mensagem por Maya Fiuza »

Eu entendi que são 2 arquivos que possuem campos idênticos em tamanho, mas em cada arquivo o nome destes campos são diferentes, e quer unificar as operações em um arquivo apenas. Parece um caso de redundância física (eliminar arquivo/indice), parece...
Faça o post da descrição estrutural dos DBFs, a solução sai mais rápido.
Harbour III, Qt Framework, HMG's, OOHG
2xExplorer, cxIDE, xEdit, EditPad
SQLite, MySQL, DBF
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Como colocar dois campos em um so

Mensagem por sygecom »

Olá,
Eu entendi a mesma coisa que a Maya. Amigo Antonio, por favor de mais detalhes do que você precisa, para o pessoal poder lhe ajudar com algum exemplo na pratica, ou até mesmo lhe dar dica mais focaliza na sua duvida.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Re: Como colocar dois campos em um so

Mensagem por Antonio Matheus »

boa noite sao arquivos de programa diferentes, o arquivo arq0006.dbf e de estoque de controle de farmacia, e o outro é de consulta, porem o arq0006.dbf tem o descricao que é a junção do med_des com med_apre, eu quero fazer o seguinte juntar estes dois campos para fazer um arquivo de atualização para o arq0006.dbf, espero que tentado esclarecer um pouco, segue em anexo os arquivos em questao mais uma vez agradeço a colaborção de voçes.
ARQ0006.rar
(1004 Bytes) Baixado 255 vezes
Maya Fiuza
Usuário Nível 2
Usuário Nível 2
Mensagens: 50
Registrado em: 11 Out 2010 19:38
Localização: Foz do Iguaçu-PR
Contato:

Re: Como colocar dois campos em um so

Mensagem por Maya Fiuza »

*char = carácter
*Os DBFs possuem muitos campos, foco-me apenas nos campos em questão.

DBF 1 (arq0006) tem 1 campo: DESCRICAO (55 char).
DBF 2 (tabela) tem 2 campos: MED_DES (45 char) e MED_APR (45 char).
A fusão dos campos MED_DES + MED_APR resulta uma descrição mais detalhada do medicamento (90 char).

Vejo várias soluções, se for o que entendi segue uma inicial...
- Aumente o tamanho do campo DESCRICAO para 91 char no DBF 1 (arq0006)
- Crie uma rotina de leitura-junção/gravação dos 2 campos foco do DBF 2 no campo do DBF 1.
Um pequena linha de código apenas para tentar passar uma luz...

Código: Selecionar todos

DESCR_PLUS := Rtrim( MED_DES ) + Space( 1 ) + Rtrim( MED_APR )
DESCR_PLUS poderá ser gravada no campo DESCRICAO (DBF 1) ou ser parte de outro DBF para consulta/atualização.
Mais detalhes, mais código...
Harbour III, Qt Framework, HMG's, OOHG
2xExplorer, cxIDE, xEdit, EditPad
SQLite, MySQL, DBF
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Como colocar dois campos em um so

Mensagem por rochinha »

Amiguinho,

Como postado anteriormente modifique o tamanho do campo DESCRICAO para o tamanho dos dois campos que voce deseja APPENDar.

Crie no arquivo ARQ0006.DBF os campos MED_DES (45 char) e MED_APR (45 char).

Se voce deseja jogar os dados do arquivo ESTOQUE.DBF para o ARQ0006.DBF, zere(ZAP) o arquivo ARQ0006.DBF e faça um APPEND FROM ESTOQUE.

Com os dados dentro do ARQ0006.DBF faça um repasse dos dados dos campos MED_DES e MED_APR para o campo descricao concatenando-os:

Código: Selecionar todos

REPLACE ALL descricao WITH alltrim( med_des ) + " " + alltrim( med_pes )
Claro que para isto voce deve abrir o arquivo ARQ0006.DBF em modo exclusivo e fechar o ESTOQUE para não obter erro de abertura.

Ajudei?
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.
Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Re: Como colocar dois campos em um so

Mensagem por Antonio Matheus »

Boa noite a todos, desculpe por nao compeender, mas como faço esta rotina?
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como colocar dois campos em um so

Mensagem por Pablo César »

Antonio, você é programador ? Desculpe perguntar é que os colegas ja indicaram de cómo você fazer essa junção. Eu gostaria de saber qual é a razão de "criar" um novo dbf chamado ARQ0006.DBF. Por quê a necessidade de criar esse arquivo ? Sendo que esses dados você ja os tem, mesmo que em campos diferentes. Outra coisa, que foi omitida, é saber sobre a necessidade de manter outros dados ja pre-existentes.

Se você quiser "criar" o arquivo, desconsiderando qualquer dado pre-existente faça:

Código: Selecionar todos

SELE 1
USE ARQ0006
// ir  verificar se a estrutura comporta a soma dos 2 campos
CAMPOS=DBSTRUCT()
IF !(CAMPOS[2,3]=91)
   CLOSE 1
   CAMPOS[2,3]=91
   DBCREATE("ARQ0006.DBF",CAMPOS)
   SELE 1
   USE ARQ0006
ENDIF
SELE 2
USE TABELA
DO WHILE (2->(!EOF()))
   SELE 1
   APPEND BLANK
   REPLACE DESCRICAO WITH ALLTRIM(2->MED_DES)+" "+ALLTRIM(2->MED_APR)
   SELE 2
   SKIP
ENDDO
Agora se precisar processar o dbf ja com dados pre-existentes. Só que é necessário saber quais é o campo que servirá de chave para a interligação. Suponhamos que o campo em comum no arquivo ARQ0006.dbf seja
"CODIGO" e no arquivo TABELA.dbf seja "MED_LAB", ja que tem o mesmo tamanho, então faça:

Código: Selecionar todos

SELE 1
USE ARQ0006
// ir  verificar se a estrutura comporta a soma dos 2 campos
CAMPOS=DBSTRUCT()
IF !(CAMPOS[2,3]=91) // VE O TAMANHO DO CAMPO DESCRICAO
   CLOSE 1
   CAMPOS[2,3]=91
   DBCREATE("ARQ0006.DBF",CAMPOS) // MODIFICA ESTRUTURA
   SELE 1
   USE ARQ0006
ENDIF
SELE 2
USE TABELA
IF !FILE("COD_TAB.NTX") // CRIANDO INDICE
   INDEX ON MED_LAB TO COD_TAB
ENDIF
DO WHILE (2->(!EOF()))
   SELE 1
   SEEK (2->CODIGO)
   IF !FOUND()
      SELE 1
      APPEND BLANK

      /* aqui entao repassa adicionando todos os campos que serao aproveitados
      REPLACE CODIGO WITH (2->CODIGO)
      REPLACE GRUPO WITH ...
      REPLACE CADASTRO WITH ...
      REPLACE CUSTO WITH ...
      */
   ENDIF
   REPLACE DESCRICAO WITH ALLTRIM(2->MED_DES)+" "+ALLTRIM(2->MED_APR)
   SELE 2
   SKIP
ENDDO
A manipulação dos arquivo, não foram tratados para a rede. Supondo que estas rotinas seriam utilizadas apenas uma vez apenas. Mas se a sua necessidade é eventual, teria que abrir os arquivos dbf em forma compartilhada e no momento de repassar (REPLACE) os registros deverão ser travados (com RLOCK /UNLOCK). Por isso é necessário ser específico nas suas necessidades. Porque existe muitas provabilidades de resaolver seu probelma, mas tudo sempre tem que ser analisado. Agora se esses dados são apena utilizados para consulta, então na minha opinião não precisariam serem juntados, basta indexar e procurar ja trazendo em varáivel os dois campos. Tudo dependerá de cómo você exibe os dados nessa procura, TBROWSE ou apenas @ ... SAY. Aíu seria o caso de analisar seu código e terá que ser exibido para nós.

Espero ter ajudado.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Re: Como colocar dois campos em um so

Mensagem por Antonio Matheus »

Bom dia Pablo eu nao sou programador estou estudando para ser um, mas uma vez venho pedir desculpas por estar batendo na mesma tecla, porem e o seguinte:
Tem dois sistemas um e de controle de estoque para drogaria e outro e um sistema de consulta de medicamentos,
o sistema de drogaria e que tem arq006.dbf e o de consulta e o que tem o med_des med _apr, na verdade eu queria fazer a juncao do med_des+med_apr para o descricao do arquivo arq006.dbf que na verdade e a juncao deste dois arquvivos, como tambem o campos, med_abc,med_pla1,med_pco1 sao na verdade cod_aux1,custo e venda do arq0006.dbf, eu quero fazer uma rotima para todo mes eu fazer alteracao do banco de dados do arq0006.dbf para comecar a emitir o cupom ja com os precos certos e sem perder os registros ja cadastrado no arq006.dbf,
desde ja agradeco a compreencao de todos e mas uma vez peco desculpas
Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Re: Como colocar dois campos em um so

Mensagem por Antonio Matheus »

Quero so fazer uma rotina com todos estes campos corresponde as do arq006.dbf juntando todos estes campos e nao perder os arquivos que estao cadastrados obrigado mais uma vez.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como colocar dois campos em um so

Mensagem por Pablo César »

Antonio, você compilou os meus exemplos ? Notou a diferença do procedimento de criar e do outro de preservar dados prexistentes ? Ainda assim eu acho que você terá um grande caminho pela frente. Fica inviável tentar te ajudar sem conhecer o sistema todo. Creio que irá ficar extremamente dificil te ajudar sem analisar a verdadeira necessidade de dar manutenção ao ARQ0006.DBF como você está mencionando.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Antonio Matheus
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 13 Jul 2010 23:18
Localização: sao caetano dosul

Re: Como colocar dois campos em um so

Mensagem por Antonio Matheus »

Boa noite Pablo obrigado pela ajuda referente a colocar dois campos em um so eu compilei a rotina e deu certo, porem ela sobrescreve os campos voce tinha falado sobre rlock e unlock como posso colocar essa duas chaves, na verdade eu queria conserva os outros arquivos.
desde ja agradeco abracos
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como colocar dois campos em um so

Mensagem por Pablo César »

Puxa depois de um mês... (vou ter que ler tudo de novo para tentar entender o caso...)
referente a colocar dois campos em um so eu compilei a rotina e deu certo, porem ela sobrescreve os campos
Volto a repetir, não sei se você percebeu que tem dois códigos. Um exemplo que te postei CRIA o arquivo ARQ0006.DBF do ZERO e o outro sobre-escreve o conteúdo dos dados. Quais destes é para considerar ??? Você compilou o primeiro ou o segundo ??? Qual é a sua necessidade ??? Cómo assim sobre-escreve os campos ? Explique-me por favor.
voce tinha falado sobre rlock e unlock como posso colocar essa duas chaves,
Eu falei sobre o RLOCK e UNLOCK para travar registros do DBF quando o sistema é utilizado em rede (modo compartilhado). O RLOCK e UNLOCK não são chaves, RLOCK() é uma função e outro é comando.

Eu aconselho que o colega leia mais sobre a ferramenta Clipper. Precisa entender as funções internas do Clipper, comandos, funções e outros recursos. Comece a pesquisar aqui no fórum todas as suas dúvidas, aquí é uma grande fonte de informação de consulta. Sobre esse tema de travar registros, veja este tópico: https://pctoledo.org/forum/viewto ... ock#p52559. Outra forma de você aprender, é fazendo PRGs TESTE1.PRG, TESTE2.PRG, TESTE3.PRG e assim subsequentemente. Abra uma pasta exclusiva para testes. Pegue um bom editor que permita interagir com os comandos e funções que você está colocando no seu PRG e que acionando por meio de uma HOTKEY possa abrir o help do Clipper que vem no formato NG (Norton Guide). Aqui na seção de downloads, tem muitos exemplos inclusive o QEDIT que é um editor para DOS que permite você utilizar o NG. Imagine você acabou de digitar "RLOCK" e pressionando Shift-F1 abre uma janela mostrando a sintaxe e exemplos de como usar o RLOCK. Isso é uma mão na roda. Leia este tópico: https://pctoledo.org/forum/viewto ... 094#p43094 nesse link você vai achar outros links sobre as ferramentas que mencionei.
na verdade eu queria conserva os outros arquivos.
Não entendí. Você fala de uma forma muito generalizada. Tem que ser mais específico Antonio. Não sei do que você está falando. Quais seriam os arquivos que você precisa "conservar". Pois a solução dada não altera seus outros arquivos, apenas cria ou modifica o ARQ0006.DBF, vai depender de qual exemplo você utilizou. Mas em difinitiva não altera os outros: ESTOQUE, TABELA...

Como já disse anteriormente, não sei qual é a necessidade de juntar as duas descrições em arquivo ? O arquivo arq0006.dbf ja existia em outro programa (acho que no sistema de drogaria), mas este arquivo você criou ou ja estava ? Eu sei que está dificil nós te entendermos, pois não visualizamos o seu sistema como um todo e você não está conseguindo explicar como o sistema é composto. Pois você fala que são dois programas diferentes e menciona 3 nomes diferentes, daí não entendo. Veja ao que eu me refiro:
Antonio Matheus escreveu:Tem dois sistemas um e de controle de estoque para drogaria e outro e um sistema de consulta de medicamentos, o sistema de drogaria e que tem arq006.dbf e o de consulta
Vamos fazer o seguinte, liste os nomes dos programas e vamos manter esses nomes sempre com o mesmo nome. E em cada nome, você vai listar os dbf que cada programa utiliza, e a estrutura de cada dbf. Por exemplo:

1. Programa de controle de Estoque:
- arquivo1.DBF
- arquivo2.DBF
2. Programa de Consulta (isto é mesmo um programa aparte? Isto é um EXE separado ? Ou é um módulo do sistema?):
- arquivo3.DBF
- arquivo4.DBF
3. Programa de Vendas (não sei se existe, imagino que sim):
- arquivo5.DBF

E liste também a estrutura de cada dbf, pode utilizar este utilitário (clique aqui) que te ajudará a exibir na tela e você com o mouse ou com opção do combobox, você pode copiar e colar na sua mensagem daqui do forum. Daí irei ter uma visão melhor do sistema. Depois iremos avaliar sobre a necessidade de criar ou modificar (isso você tem que ainda responder) o arquivo arq006.dbf. Pois pelo que eu sei você quer ele "atualizado" para emitir cumpom de venda. Mas acredito que tem outra forma de fazer isso. Por isso preciso das suas respostas e quanto mais explicado for melhor para entender o seu problema. Desculpe se estou parecendo chato, mas até agora você não resolveu, mas acredito que você tem várias dificuldades e não um só problema... Então teremos que ir por partes... como disse Jack o estripador... rsrs
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder