Conversor SQL para DBF

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

Moderador: Moderadores

Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Conversor SQL para DBF

Mensagem por Dr.Microso »

Prezados, saudações!

Estou com 3 tabelas gigantes aqui com a estensão .SQL e preciso de um utilitário que fizesse essa conversão para .DBF, alguém conhece algum?
O inverso encontramos com facilidade na internet...

Um abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Conversor SQL para DBF

Mensagem por alxsts »

Olá!

A extensão .SQL, por si só, não diz muito sobre o formato do conteúdo. Pode ser um export, em formato texto separado por vírgulas.

Teria mais detalhes, como o banco que gerou este arquivo? Abriu o arquivo para checar o tipo de conteúdo? É binário ou texto?

Talvez esse mesmo banco exporte os dados das tabelas em .DBF ou .CSV. Sabendo o formato ficará mais fácil. Ou com [x]Harbour possa ser possível acessá-lo diretamente.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Conversor SQL para DBF

Mensagem por Dr.Microso »

Essas tabelas SQL são resultados de um EXPORT um .ABS (Absolute Database - Delphi) que não faz direto para .DBF.
Eis o trecho inicial de uma delas (a apartir da linha final aqui, é uma repetição contínua até o final do arquivo...).

Código: Selecionar todos

DROP TABLE sm;
CREATE TABLE sm (
  VO VARCHAR(1),
  CD VARCHAR(4),
  CM VARCHAR(5),
  NQ VARCHAR(50),
  CP VARCHAR(5),
  NL VARCHAR(3),
  MT VARCHAR(1),
  DS VARCHAR(4),
  RG VARCHAR(20),
  RT VARCHAR(10),
  FL VARCHAR(10), 
  INDEX smA (VO, NQ), 
  INDEX smC (NL), 
  INDEX smF (MT, NQ), 
  INDEX smI (VO, CD), 
  INDEX smJ (VO, NL)
);
INSERT INTO sm values ('G', 'GTaa', NULL, 'SNC, depressores do', NULL, '---', '-', 'Taa', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTaa', '_#Gbz', 'Anestésicos gerais>>', NULL, 'Taa', '>', 'Saa', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTab', NULL, 'Anestésicos intravenosos>>', NULL, 'Saa', '>', 'Sbw', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Barbitúricos', NULL, 'Sbw', NULL, 'ƒ01', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Benzodiazepínicos', NULL, 'Sbw', NULL, 'ƒ02', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Opióides', NULL, 'Sbw', NULL, 'ƒ03', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Diversos', NULL, 'Sbw', NULL, 'ƒ04', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Associação', NULL, 'Sbw', NULL, 'ƒ05', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTac', NULL, 'Sedativos-hipnóticos>>', NULL, 'Taa', '>', 'Sab', NULL, NULL, NULL);
...
Grato!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Conversor SQL para DBF

Mensagem por Imatech »

Olá Dr.Microso !

Os arquivos que você possui são do tipo: Texto Plano com os comandos SQL para criação da Tabela e inserção dos dados ( uso em qquer formato de dados com suporte a linguagem SQL )

Caso tenha afinidade com a linguagem SQL, poderá usar: Database Desktop ( Delphi ), FoxPro ou o DBF Commander; criando a tabela .dbf desejada...

Alternativamente pode-se usar qquer editor de texto e deixar no formato CSV ( segue exemplo ):

Antes ( Plain Text):

Código: Selecionar todos

INSERT INTO sm values ('G', 'GTaa', NULL, 'SNC, depressores do', NULL, '---', '-', 'Taa', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTaa', '_#Gbz', 'Anestésicos gerais>>', NULL, 'Taa', '>', 'Saa', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTab', NULL, 'Anestésicos intravenosos>>', NULL, 'Saa', '>', 'Sbw', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Barbitúricos', NULL, 'Sbw', NULL, 'ƒ01', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Benzodiazepínicos', NULL, 'Sbw', NULL, 'ƒ02', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Opióides', NULL, 'Sbw', NULL, 'ƒ03', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Diversos', NULL, 'Sbw', NULL, 'ƒ04', NULL, NULL, NULL);
INSERT INTO sm values ('b', 'GTab', NULL, 'Associação', NULL, 'Sbw', NULL, 'ƒ05', NULL, NULL, NULL);
INSERT INTO sm values ('a', 'GTac', NULL, 'Sedativos-hipnóticos>>', NULL, 'Taa', '>', 'Sab', NULL, NULL, NULL);
Depois ( CSV ):

Código: Selecionar todos

"G","GTaa","","SNC, depressores do","","---","-","Taa","","",""
"a","GTaa","_#Gbz","Anestésicos gerais>>","","Taa",">","Saa","","",""
"a","GTab","","Anestésicos intravenosos>>","","Saa",">","Sbw","","",""
"b","GTab","","Barbitúricos","","Sbw","","ƒ01","","",""
"b","GTab","","Benzodiazepínicos","","Sbw","","ƒ02","","",""
"b","GTab","","Opióides","","Sbw","","ƒ03","","",""
"b","GTab","","Diversos","","Sbw","","ƒ04","","",""
"b","GTab","","Associação","","Sbw","","ƒ05","","",""
"a","GTac","","Sedativos-hipnóticos>>","","Taa",">","Sab","","",""
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Conversor SQL para DBF

Mensagem por Dr.Microso »

Prezado Imatech, não possuo afinidade com a linguagem SQL...

Por favor, poderia me passar um passo-a-passo com o app DBF Commander?
Grato!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Conversor SQL para DBF

Mensagem por Jairo Maia »

Olá Dr.Microso,

Não sei se já resolveu a migração dos dados, mas como tenho que fazer o mesmo com um banco de CEPs em SQL neste mesmo formato: "Texto Plano com os comandos SQL" (que nem sabia que tinha essa denominação, aprendi neste tópico), acabei conseguindo, e montei um exemplo com as suas informações. Veja se ajuda:

Código: Selecionar todos

/***********************************
   Compilar: hbmk2 Arquivo.PRG -lxhb
*///////////////////////////////////

REQUEST DBFCDX

Function Main()

 Local i, cBuffer, cLinha, nQtdLin, nConta := 0, nHandler

 Local cArquivoSQL := "SQL_File.SQL"  // Arquivo Origem
 Local cArquivoCVS := "CSV_File.CSV"  // Arquivo de Transicao
 Local ArquivoDBF  := "DBF_File.DBF"  // Banco de Dados Destino

 RDDSetDefault( "DBFCDX" )
 DBSetDriver( "DBFCDX" )

 Clear Screen

 cBuffer := FOpen( cArquivoSQL, 2 )

 nHandler := FCreate( cArquivoCVS )

 Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0

  If ( "sm values" $ cLinha )

   cLinha := Subst( cLinha, At( ['], cLinha ) )
   cLinha := StrTran( cLinha, ");", "," )
   cLinha := StrTran( cLinha, "NULL", "" )
   cLinha := StrTran( cLinha, "'" )
   cLinha := Hb_AnsiToOem( cLinha ) + Hb_Eol()
   // cLinha := Upper( cLinha )

   FWrite( nHandler, cLinha, Len( cLinha ) )

  EndIf

  @ 5, 2 Say ++nConta

 EndDo

 FClose( nHandler )

 DbCreate(ArquivoDBF,{;
                     {"vo" ,"C", 01, 0},;
                     {"cd" ,"C", 04, 0},;
                     {"cm" ,"C", 05, 0},;
                     {"nq" ,"C", 50, 0},;
                     {"cp" ,"C", 05, 0},;
                     {"nl" ,"C", 03, 0},;
                     {"mt" ,"C", 01, 0},;
                     {"ds" ,"C", 04, 0},;
                     {"rg" ,"C", 20, 0},;
                     {"rt" ,"C", 10, 0},;
                     {"fl" ,"C", 10, 0};
                     })

  Use ( ArquivoDBF )

  @ 5, 2 Say "Copiando os dados para o DBF"

  Append From ( cArquivoCVS ) DELIMITED

  @ 5, 2 Say "Gerando os indices          "

  Index On Upper( vo + nq ) To ( "smA" )
  Index On Upper( nl ) To ( "smC" )
  Index On Upper( mt + nq ) To ( "smF" )
  Index On Upper( vo + cd ) To ( "smI" )
  Index On Upper( vo + nl ) To ( "smJ" )

Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Conversor SQL para DBF

Mensagem por Dr.Microso »

Prezado Jairo, olá!

Era uma pendência que não tinha resolvido ainda... Puxa!
Com certeza será também de utilidade aos próximos que tenham esse problema.
Muito, mas muito grato mesmo por sua ajuda!

Um forte e fraterno abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Conversor SQL para DBF

Mensagem por Imatech »

Olá Dr.Microso !



Desculpe a falta de resposta (achei que já estava resolvido e não voltei ao tópico)



De qquer forma nosso amigo Jairo já forneceu bõa solução via código :)Pos



Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Responder