linha de comando para acessar e alterar dados no Dbase

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

will_pacini
Usuário Nível 1
Usuário Nível 1
Mensagens: 18
Registrado em: 29 Jul 2011 16:21
Localização: Santo André / SP

linha de comando para acessar e alterar dados no Dbase

Mensagem por will_pacini »

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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

linha de comando para acessar e alterar dados no Dbase

Mensagem por alxsts »

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.

Código: Selecionar todos

#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)
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á

linha de comando para acessar e alterar dados no Dbase

Mensagem por Pablo César »

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 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á

linha de comando para acessar e alterar dados no Dbase

Mensagem por Pablo César »

Quiser ler mais sobre o Dbase, aqui tem um livro eltrônico: http://books.google.com.br/books?id=K86 ... CCwQ6AEwAA
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.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

linha de comando para acessar e alterar dados no Dbase

Mensagem por alxsts »

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)
will_pacini
Usuário Nível 1
Usuário Nível 1
Mensagens: 18
Registrado em: 29 Jul 2011 16:21
Localização: Santo André / SP

linha de comando para acessar e alterar dados no Dbase

Mensagem por will_pacini »

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

obrigado a ajuda de todos!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

linha de comando para acessar e alterar dados no Dbase

Mensagem por alxsts »

Olá!

Segue o código, revisado e compilado:

Código: Selecionar todos

#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)
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á

linha de comando para acessar e alterar dados no Dbase

Mensagem por Pablo César »

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.
Responder