Página 1 de 1
linha de comando para acessar e alterar dados no Dbase
Enviado: 01 Out 2013 16:02
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
linha de comando para acessar e alterar dados no Dbase
Enviado: 01 Out 2013 17:04
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
//----------------------------------------------------------------------------------
linha de comando para acessar e alterar dados no Dbase
Enviado: 01 Out 2013 17:08
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>
linha de comando para acessar e alterar dados no Dbase
Enviado: 01 Out 2013 17:19
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
linha de comando para acessar e alterar dados no Dbase
Enviado: 02 Out 2013 12:47
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.
linha de comando para acessar e alterar dados no Dbase
Enviado: 02 Out 2013 13:36
por will_pacini
realmente vou criar um executável... só para garantir...
obrigado a ajuda de todos!
linha de comando para acessar e alterar dados no Dbase
Enviado: 02 Out 2013 19:45
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
//----------------------------------------------------------------------------------
linha de comando para acessar e alterar dados no Dbase
Enviado: 02 Out 2013 20:44
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).