• Home
  • Projetos
  • Palestras
  • Artigos
  • Livros

Convertendo DBF para SQL (DBF2SQL)

08/09/2008  Ler e Comentar

Há muitos anos atrás eu precisava converter diversos bancos de dados no foramato DBF para o formato SQL. Naquela época eu tinha desenvolvido uma ferramenta simples, a qual estava guardada naquelas pastas do computador que já chegam a ter pó de tanto tempo que não são visitadas.
Apesar de não utilizar mais esta ferramenta, sei que no Brasil existe muito programa feito em clipper, eu mesmo desenvolvi vários na década de 90. Muitos ainda estão ativos, mas uma hora irão migrar. E neste caso, se alguém precisar extrair as informações, coloco aqui um programinha simples que lê o arquivo .DBF e gera os SQL necessários para importá-lo em uma base de dados relacional.
Ao rodar o programa pela linha de comando, o mesmo irá indicar como proceder com a conversão: php dbf2sql <dbfile> <tablename> > output.sql



<?
if (count($argv) != 3)
{
    echo 
"#####################################################\n";
    echo 
"# dbf2sql : Converts DBF files to SQL instructions  #\n";
    echo 
"# sintax:                                           #\n";
    echo 
"#   php dbf2sql <dbfile> <tablename> > output.sql   #\n";
    echo 
"#                                                   #\n";
    echo 
"#   author : Pablo Dall'Oglio <pablo at php.net>    #\n";
    echo 
"#####################################################\n";
    die;
}

if (!
function_exists('dbase_open'))
{
    die(
"DBF support (--enable-dbase) is not enabled");
}

dbf2sql($argv[1], $argv[2]);


/* function dbf2sql
 * Converts a DBF file into SQL instructions
 * @dbffile    = DBF file name
 * @tablename  = Target table name
 */
function dbf2sql($dbffile, $tablename)
{
    
# Opens Dbase and SQLite files
    
$dbf = @dbase_open($dbffile, 0);
    
$pg_types['memo']      = 'text';
    
$pg_types['character'] = 'varchar';
    
$pg_types['number']    = 'float';
    
$pg_types['date']      = 'date';
    
    if (
$dbf)
    {
        
# Get Number or records and columns info
        
$num_records = dbase_numrecords($dbf);
        
$columns     = dbase_get_header_info($dbf);
        
        
# Create the SQLite table
        
$sql = "create table $tablename (";
        foreach (
$columns as $column)
        {
            
$name = $column['name'];
            
$type = $pg_types[$column['type']];
            
$len  = $column['length'];
            if (
$type == 'character')
            {
                
$type.="($len)";
            }
            
$sql .= "$name $type,";
        }
        
$sql = substr($sql,0,-1) . ')';
        echo 
"$sql;\n";
        
        
        
# Loop the Dbase records
        
for($index=1; $index <= $num_records; $index ++)
        {
            
# Get one record
            
$record = dbase_get_record($dbf, $index); // get the actual record
            # Ignore deleted fields
            
if ($record["deleted"] != "1")
            {
                
# Insert the record
                
$query = "insert into $tablename values(";
                foreach (
$record as $key=>$field)
                {
                    if (
$key!=='deleted')
                    {
                        
$field = str_replace("'", "\'", $field);
                        
$field = trim($field);
                        
$query .= "'$field',";
                    }
                }
                
$query = substr($query,0,-1) . ')';
                echo 
"$query;\n";
            }
        }
    }
    else
    {
        die(
"Cannot open DBF file");
    }
    return 
true;
}
?>




Comentários



 Adicionar Comentário
 Nome
 Email
 Título
 Comentário

Livros


  • Outros

    • Galeria de Fotos
    • Posts no Codare

    Arquivo

    • 2008
    • 2007
    • 2006
    • 2005
    • 2004
  • Google

    Blogroll

    • Adler Medrado
    • Aurélio Jargas
    • Andrei Zmievski
    • Eduardo Maçan
    • Efetividade
    • Er Galvão
    • Joel on Software
    • Marcelio Leal
    • Martin Fowler
    • Miguel de Icasa
    • Newton Wagner
    • Rafael Dohms
    • Rasmus Lerdorf
    • Sérgio Crespo
    • Timoty Ney

    Posts Aleatórios

    • Passeio nas Missões
    • Agora sim, como recondicionar seu cooler
    • Treinamento de Agata Report na Univates
    • Experiências de um desenvolvedor de software livre
    • Gerando Thumbs em PHP
    • Experiências de um desenvolvedor de software livre
    • Chegaram os kazoos
    • Nova versão do Agata Report
    • Acessando o Gmail do PHP
 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

© 2006 Wordpress Themes | Theme (Not so) Fresh
XHTML CSS