Clipper On Line • Ver Tópico - linha de comando para acessar e alterar dados no Dbase

linha de comando para acessar e alterar dados no Dbase

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

linha de comando para acessar e alterar dados no Dbase

Mensagempor will_pacini » 01 Out 2013 16:02

Olá amigos, estou com uma dúvida, preciso alterar um arquivo pelo Dbase em alguns clientes que não possuem internet, vou ter que enviar o arquivo por CD, e se não tiver como, terei que ir pessoalmente a eles,

Estava pensando em fazer um .bat simples, apenas para acessar o dbase e alterar o registro no meu arquivo, mas existe a possibilidade?

entrar no dbase é fácil, más a partir dai, já não sei, pois os comandos que eu digitaria no dbase para acessar o arquivo como, use arquivo, no meu .bat não funciona, parece que o .bat só consegue abrir o dbase, depois disso ele não acessa mais o dbase,

Então a duvida é, como acessar, abrir o arquivo e modificar a estrutura pelo Dbase em uma linha de comando no .bat?

Abraços
will_pacini
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 18
Data de registro: 29 Jul 2011 16:21
Cidade/Estado: Santo André / SP
Curtiu: 5 vezes
Mens.Curtidas: 0 vez

linha de comando para acessar e alterar dados no Dbase

Mensagempor alxsts » 01 Out 2013 17:04

Olá!

Realmente, pelo .Bat você só conseguirá abrir o dBase...

Mas, se você tem um .DBF a ser alterado, você não precisa de um .BAT e sim um .PRG, compilado e transformado em um .EXE, que faça as tarefas que você precisa. Creio que você tenha como gerar esse executável aí.

Segue um exemplo mostrando as funcionalidades básicas para atingir seu objetivo. Adapte conforme a tua necessidade.
#include "Dbstruct.ch"

FUNCTION Main()

   CriarTabela()
   
   ConverterTabela()
   
   RETURN NIL
   
//----------------------------------------------------------------------------------
FUNCTION CriarTabela()

   // Cria uma tabela para testes
   
   LOCAL aStru := {}
   LOCAL nPos
   
   AAdd( aStru, {"Codigo", "C", 50, 0 } )
   AAdd( aStru, {"Nome", "C", 20, 0 } )
   
   DbCreate( "Teste", aStru )

   USE Teste EXCLUSIVE NEW
     
   FOR nPos := 1 TO 100
      Teste->( DbAppend() )
     
      Teste->codigo := nPos
      Teste->nome := "Nome " + LTrim( Str( nPos )
   NEXT   
   
   Teste->( DbCloseArea() )
   
   RETURN NIL
//----------------------------------------------------------------------------------
FUNCTION ConverterTabela()

   LOCAL aStru := {}
   LOCAL nPos
   LOCAL nLen

   // Abre a tabela teste e...
   USE Teste EXCLUSIVE NEW

   //  captura seu layout
   aStru := Teste->( DbStruct() )
   
   // Quantidade de campos
   nLen := Len( aStru )
   
   // Altera o tamanho do campo "Nome" de 20 para 50 bytes
   FOR nPos := 1 TO nLen
      IF aStru[ nPos, F_NAME ] == "Nome"
         aStru[ nPos, F_SIZE ] := 50
      ENDIF
   NEXT       

   // Acrescenta o campo "Cidade" com 20 bytes na nova estrutura
   AAdd( aStru, {"Cidade", "C", 20, 0 } )

   // ria uma tabela temporária com o novo layout
   DbCreate( "_Teste", aStru )

   // abre a tabela temporária (vazia)
   USE _Teste EXCLUSIVE NEW
         
   // importa os dados da tabela existente para a nova tabela, já no novo layout
   APPEND FROM Teste
   
   // fecha a temporária
   _Teste->( DbCloseArea() )
   
   // deleta a tabela original
   Ferase( "Teste.DBF" )
   
   // renomeia a nova tabela para o nome da original
   IF FRENAME("_Teste.DBF", "Teste.DBF") == -1
      Alert( "Erro ao renomear arquivo convertido (_Test.DBF)." )
   ELSE
      Alert( "Arquivo convertido com sucesso." )     
   ENDIF

   RETURN NIL
//----------------------------------------------------------------------------------     
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

linha de comando para acessar e alterar dados no Dbase

Mensagempor Pablo César » 01 Out 2013 17:08

Oi Will,

O antigo DBase ainda vive... rs

É possivel sim. Mas não exatamente através de uma BAT. Pode até criar a BAT para chamar o DBASE e chamar o seu arquivo PRG.
Crie a sua rotina de alteração de dados no próprio PRG e no bat mande executar o nome desse PRG.

Na sua BAT, você chama also assim:

c:\dbase\DBASE <nome_do_prg>
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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

linha de comando para acessar e alterar dados no Dbase

Mensagempor Pablo César » 01 Out 2013 17:19

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

linha de comando para acessar e alterar dados no Dbase

Mensagempor alxsts » 02 Out 2013 12:47

Olá!

A programação xBase nasceu exatamente dessa forma, em dBase II, agrupando-se os comandos que se digitava em arquivos textos com a extensão .CMD e acrescentando-se os comandos de controle de laço e condições.

Mas no caso desse post, como o colega faria para entrar os dados após o comando MODI STRU?

Acredito que um executável seria mais seguro e flexível.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

linha de comando para acessar e alterar dados no Dbase

Mensagempor will_pacini » 02 Out 2013 13:36

realmente vou criar um executável... só para garantir...

obrigado a ajuda de todos!
will_pacini
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 18
Data de registro: 29 Jul 2011 16:21
Cidade/Estado: Santo André / SP
Curtiu: 5 vezes
Mens.Curtidas: 0 vez

linha de comando para acessar e alterar dados no Dbase

Mensagempor alxsts » 02 Out 2013 19:45

Olá!

Segue o código, revisado e compilado:
#include "Dbstruct.ch"

FUNCTION Main()

   AltD()

   CriarTabela()

   ConverterTabela()

RETURN NIL

//----------------------------------------------------------------------------------
FUNCTION CriarTabela()

   // Cria uma tabela para testes

   LOCAL aStru := {}
   LOCAL nPos

   AAdd( aStru, {"Codigo", "N", 5, 0 } )
   AAdd( aStru, {"Nome", "C", 20, 0 } )

   DbCreate( "Teste", aStru )

   USE Teste EXCLUSIVE NEW

   FOR nPos := 1 TO 100
      Teste->( DbAppend() )

      Teste->codigo := nPos
      Teste->nome := "Nome " + LTrim( Str( nPos ) )
   NEXT

   Teste->( DbCloseArea() )

RETURN NIL

//----------------------------------------------------------------------------------
FUNCTION ConverterTabela()

   LOCAL aStru := {}
   LOCAL nPos
   LOCAL nLen

   // Abre a tabela teste e...
   USE Teste EXCLUSIVE NEW

   //  captura seu layout
   aStru := Teste->( DbStruct() )
   Teste->( DbCloseArea() )

   // Quantidade de campos
   nLen := Len( aStru )

   // Altera o tamanho do campo "Nome" de 20 para 50 bytes
   FOR nPos := 1 TO nLen
      IF aStru[ nPos, DBS_NAME ] == "NOME"
         aStru[ nPos, DBS_LEN ] := 50
      ENDIF
   NEXT

   // Acrescenta o campo "Cidade" com 20 bytes na nova estrutura
   AAdd( aStru, {"Cidade", "C", 20, 0 } )

   // Cria uma tabela temporária com o novo layout
   DbCreate( "_Teste", aStru )

   // abre a tabela temporária (vazia)
   USE _Teste EXCLUSIVE NEW

   // importa os dados da tabela existente para a nova tabela, já no novo layout
   APPEND FROM Teste

   // fecha a temporária
   _Teste->( DbCloseArea() )

   // deleta a tabela original
   FErase( "Teste.DBF" )

   // renomeia a nova tabela para o nome da original
   IF FRename("_Teste.DBF", "Teste.DBF") == -1
      Alert( "Erro ao renomear arquivo convertido (_Test.DBF)." )
   ELSE
      Alert( "Arquivo convertido com sucesso." )
   ENDIF

RETURN NIL
//----------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

linha de comando para acessar e alterar dados no Dbase

Mensagempor Pablo César » 02 Out 2013 20:44

Na seção de Downloads, está disponível o STRU que permite alteração de estrutura no banco de dados e importa os dados, talvez você possa interagir em modo remoto com o cliente (um sugestã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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes




Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 15 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro