Deletar Banco de Dados velhos

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Deletar Banco de Dados velhos

Mensagem por alxsts »

Olá!

Certamente o programa armazena a numeração de clientes em algum campo de tabela.

Se desejar reiniciar a numeração, você terá que identificar esta tabela/campo e, através do DBU, zerá-lo.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Deletar Banco de Dados velhos

Mensagem por rochinha »

Amiguinha,

Neste caso com certeza existe um arquivo que guarda os numeros sequenciais.

analise um a um e veja se encontra alguma referencia.
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.
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á

Deletar Banco de Dados velhos

Mensagem por Pablo César »

Para pessoas aleias à programação, mesmo que com boa intenção, as orientações de cómo limpar o banco de dados caem num medonho procedimento... quando ví este tópico e percebí a pouca ou nula experiência em programação por parte da autora do tópico, logo pensei isso pode dar em consequências desagradáveis. Não adianta pessoal dar o comando e rezar para que dê certo. Essa questão de limpar toda a base de dados deve ser tomada com certo critério. Aconselho, como muitos ja o fizeram, em fazer uma cópia antes de tudo. E começar dbf por dbf a limpeza, começando com aqueles que são de tamanho grande, com muito registros. Claro que antes de começar, deve-se observar se o sistema possui alguma rotina de indexação, caso contrário deverá-se-ei anotar todas as chaves que cada arquivo de índice possui. Na minha opinião, eu não apagaria simplesmente. Eu copiaria os registros com data em que desejo remover. Nunca se sabe se esses registros poderão ser úteis em alguma circunstância futura. De preferência armazenaria por ano. Mas tudo isso devria ser avaliado e analisado com muita calma e conhecimento. Este tipo de procedimento e ainda que com pouca ou nehuma experiência em programação pode vir a dar maus resultados. Desculpe "MENINA LEIGA" não é querer desmercer ninguém, mas esse trabalho requer um profissional. Espero que você entenda e perdoe-nos se algo sair errado pois assim por distância sem ver a estrutura e função que cumprem os dados, fica dificil de avaliar. Reitero, recomece volte o sistema no que estava, mantenha uma cópia intacta e inicie DBF por DBF, veja se apagando, reindexando e incluindo dados o seu sistema funciona normalmente. Depois que você chegou à limpeza da maioria dos DBFs até que apresente alguma anomalia no funcionamento de inclusão/consulta e impressão, daí sim libere o sistema normalmente. Mas primeiro, conheça o sistema, senão irá dar dores de cabeça.
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.
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Deletar Banco de Dados velhos

Mensagem por anacatacombs »

Concordo com 100% com que o Pablo disse.
Como venho falando desde o começo: Entre em contato com o programador... Caso ele tenha abandonado tudo para criar avestruz, veja se outro programador em clipper pode te ajudar, visto que você tem os fontes do sistema.

Infelizmente não tem como adivinhar como sistema foi estruturado, e quais consequencias uma limpeza nos dbfs podem ocasionar...
MENINA LEIGA
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 29 Abr 2011 10:33
Localização: Itatiba/SP

Deletar Banco de Dados velhos

Mensagem por MENINA LEIGA »

Olá meus queridos amigos (as).

Quero agradecer a delicadeza de cada um e dizer que o problema já está resolvido e funcionando direitinho.

Sou leiga mas não tanto, deu problemas no começo mas tudo foi resolvido, estou com o programa funcionando certinho e imprimindo tambem.

Um abraço á todos(as) e um Feliz Dia das Mães.
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á

Deletar Banco de Dados velhos

Mensagem por Pablo César »

Quê bom que resolveu ! Ficamos todos satisfeitos em poder ajudar e mais ainda saber que você se deu bem nessa. Nós também agradecemos a sua comprensão, pois deste lado não dá para saber o grau de conhecimento. Seria bom que vocÊ adicionasse uma rotina para elaboração de "arquivo morto" assim não terão o mesmo inconveniente no futuro então.
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.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Deletar Banco de Dados velhos

Mensagem por asimoes »

Menina Leiga

Seu nick deveria ser "Menina com alguma experiência"

É brincadeirinha.. mas precisando é só perguntar!

Feliz dia das Mães.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Emanuel
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 20 Set 2018 14:39
Localização: parnaiba-pi

Deletar Banco de Dados velhos

Mensagem por Emanuel »

ola galera...
revivendo esse post rsrs..

eu uso linux (open suse), eu estou com esse mesmo problema, queria saber se é muito complexo a criação de um programa como esse que o sr.alxsts comentou.
Poderia até ser criado um utilitário que abrisse cada tabela e limpasse os dados.
pessoal se você poderem me ajudar dando dicas de estudo ou coisa do tipo eu agradeço muito :)Pos
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Deletar Banco de Dados velhos

Mensagem por alxsts »

Olá!
Emanuel escreveu:queria saber se é muito complexo a criação de um programa como esse
Emanuel:
não, não é difícil.

Nós, que gostamos de programação de computadores, somos frequentemente levados pelo ímpeto da paixão pela programação, ou pela ansiedade, ou por pressão de prazos curtos, a abrirmos nosso editor de código e dispararmos um arsenal de comandos, sem termos um plano definido do que precisamos codificar para atingirmos nosso objetivo. Escrevo isto por ter lido em outro tópico de sua autoria, onde você diz ser estudante. Muitos programadores não tiveram esta orientação no início de suas carreiras e só aprenderam com a experiência, após muito tempo perdido com retrabalho.

No caso deste programa citado, é, a grosso modo, como escrevi anteriormente: abrir cada tabela e limpar os dados. A grosso modo... mas e a questão segurança dos dados? É muito importante e sempre tem que ser levada em conta. Então, ao invés de limpar cada tabela, é melhor copiar apenas as estruturas para outro local, sem os dados.

Vamos planejar:
- criar uma interface com o usuário (tela)
- solicitar ao usuário que informe o local onde estão as tabelas
- solicitar ao usuário que informe o local onde deverão ser gravadas as estruturas das novas tabelas
- carregar para a memória o nome de todas as tabelas encontradas no local de origem informado
- varrer a lista de tabelas e para cada uma delas copiar a estrutura para o diretório destino
- manter o usuário informado do andamento da operação

Tranquilo? A princípio é isto. Existem alguns detalhes adicionais que poderão ser tratados no decorrer do desenvolvimento.

Tenho certeza que em breve postará sua solução.

Mãos à obra!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Deletar Banco de Dados velhos

Mensagem por JoséQuintas »

Emanuel escreveu:queria saber se é muito complexo a criação de um programa como esse que o sr.alxsts comentou.
É o mesmo que perguntar se é difícil quebrar uma parede.
Seria só usar marreta e quebrar tudo mas...
E se tiver encanamento, ou fiação elétrica passando pela parede?
E se tiver parte da construção apoiada encima dessa parede?
O simples ato de derrubar uma parede poderia precisar de pedreiro, encanador e eletricista.
Parece simples, mas nem sempre é.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Emanuel
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 20 Set 2018 14:39
Localização: parnaiba-pi

Deletar Banco de Dados velhos

Mensagem por Emanuel »

bom dia galera!!!

sr.AlxSts... eu fiz uma coisa bem simples, porém muito funcional rsrsrss....

Código: Selecionar todos

//apaga dbf
//*********
REQUEST DBFCDX
procedure main()

    USE dias ALIAS welcome
    USE cadastro  NEW ALIAS nomes
    USE cadastro3 NEW ALIAS cad 
    USE thevoice  NEW ALIAS well 

    SELECT 1
    IF NETERR()
       ALERT("ARQUIVO EM USO")
    ELSE
       DELETE 
       zap
    ENDIF
    //browse() 

    SELECT 2
    IF NETERR()
       ALERT("ARQUIVO EM USO")
    ELSE
       DELETE 
       zap
    ENDIF
    //browse()

    SELECT 3
    IF NETERR)
       ALERT("ARQUIVO EM USO")
    ELSE
       DELETE 
       zap
    ENDIF
    //browse()

    SELECT 4
    IF NETERR()
       ALERT("ARQUIVO EM USO")
    ELSE
       DELETE 
       zap
    ENDIF
    //browse()
return

fiz tudo diretamente no codigo, pode parecer ate ignorancia da minha parte fazer isso rsrsrs, mas vou completar o codigo assim como a sr. sugerio:
alxsts escreveu:Vamos planejar:
- criar uma interface com o usuário (tela)
- solicitar ao usuário que informe o local onde estão as tabelas
- solicitar ao usuário que informe o local onde deverão ser gravadas as estruturas das novas tabelas
- carregar para a memória o nome de todas as tabelas encontradas no local de origem informado
- varrer a lista de tabelas e para cada uma delas copiar a estrutura para o diretório destino
- manter o usuário informado do andamento da operação
so que como é so um codigo que quero criar porque gostei da ideia rsrs... em vez de pedir o usuario para especificar o local, quero que o programa leia todos os .dbf's da pasta onde esta sendo execultado e apague, so que vou deixar a criterio do usuario informar quais nn deverão ser apagadas.


sr. Quintas...
se eu tiver em mãos a planta da casa e informações necessarias, certamente irei saber as partes que oferecem riscos na hora de quebrar a parede.
JoséQuintas escreveu:É o mesmo que perguntar se é difícil quebrar uma parede.
Seria só usar marreta e quebrar tudo mas...
E se tiver encanamento, ou fiação elétrica passando pela parede?
E se tiver parte da construção apoiada encima dessa parede?
O simples ato de derrubar uma parede poderia precisar de pedreiro, encanador e eletricista.
Parece simples, mas nem sempre é.
sou programador junior, tudo o que faço, por enquanto, é so para testar com meus materiais mesmo. por isso que eu faço essas doidices kkkkkk

ao sr. Quintas e a todos os outros membros deste forum, muito obg por sempre estarem presente nos meus posts. cada comentario de voces é de muito valor para mim. (L)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Deletar Banco de Dados velhos

Mensagem por JoséQuintas »

DELETE
ZAP

DELETE apaga um registro, ZAP apaga o arquivo inteiro.
Se vai apagar o arquivo inteiro, porque apagar um registro?
E o índice?

Se é tudo igual, sugestão 1, baseada no seu fonte:

Código: Selecionar todos

FOR EACH cFile IN { "DIAS", "CADASTRO", "CADASTRO3", "THEVOICE" }
  //--- cada arquivo inicio
   USE ( cFile ) EXCLUSIVE
   IF NetErr()
      Alert( "Arquivo em uso" )
   ELSE
      ZAP
   ENDIF
   USE
   //--- cada arquivo fim
NEXT

Sugestão 2, diretório todo

Código: Selecionar todos

#include "directry.ch"
FOR EACH aFile IN Directory( "*.DBF" )
   cFile := aFile[ F_NAME ]
   // copiar do outro exemplo ref. cada arquivo inicio/fim
NEXT
Isso é igual o seu, sem confirmação nenhuma, sem se preocupar com índices, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Deletar Banco de Dados velhos

Mensagem por alxsts »

Olá!

Este tipo de operação requer que os arquivos sejam abertos em modo exclusivo:

Código: Selecionar todos

USE dias EXCLUSIVE NEW ALIAS welcome
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Deletar Banco de Dados velhos

Mensagem por JoséQuintas »

Bem lembrado.
Coloquei no meu exemplo mas esqueci de chamar atenção pra isso.
ZAP só funciona em arquivo aberto com EXCLUSIVE, ninguém mais usando.
E como vai fazer um de cada vez, só abrir um de cada vez, vai fazer os que conseguir.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Emanuel
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 20 Set 2018 14:39
Localização: parnaiba-pi

Deletar Banco de Dados velhos

Mensagem por Emanuel »

ola pessoal
boa tarde

eu usei o codigo que vc enviou sr: Quintas.
deu super certo :))

vou postar aqui o fonte:

Código: Selecionar todos


//apaga dbf
//*********

#include "directry.ch"
REQUEST DBFCDX
procedure main()
    
    local aFile
    local cFile

    for each aFile IN Directory( "home/music/*.dbf" )
        cFile := aFile[ F_NAME ]
        USE ( cFile ) EXCLUSIVE
        if NetErr()
            alert( "Arquivo em uso" )
        else
            if ( cFile == "dias.dbf" .or. cFile == "cadastro.dbf" .or. cFile == "cadastro3.dbf" ) 
                alert("as tres tabelas não seram apagadas!")
            else
                zap
            endif
        endif
    next

return

Responder