Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

inforicky

converter dbf para mysql

Recommended Posts

Olá amigos, estou precisando de ajuda para interpretar um script que converte de dbf para mysql:

no meu caso ele está gerando somente o cabecalho e dá o erro nesta fução: if (!function_exists('dbase_open'))

{

die("DBF support (--enable-dbase) is not enabled");

}

 

ele retorna : DBF support (--enable-dbase) is not enabled

 

para executar o script, deve entrar no prompt e digitar:

php dbf2sql.php <dbfile> <tablename> > output.sql

 

 

 

encontra disponivel em: http://www.pablo.blog.br/63

dbf2sql.php

 

<?
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;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mas já está pois encontrei um artigo aqui no imasters que le e grava no dbf e funcionou correto, ´só não esto entendendo porque está dando o erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro ocorre porque não está definida a função dbase_open. Veja que a função function_exists retorna true caso a função exista e false caso não esteja definida.

http://br.php.net/function_exists

 

false + false = true. Então, se não existir a função, vai disparar o erro que está mostrado. Para a função não existir, só se o módulo não estiver habilitado.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mas já está pois encontrei um artigo aqui no imasters que le e grava no dbf e funcionou correto, ´só não esto entendendo porque está dando o erro...

 

Já resolveu seu problema? pois se quiser eu te envio um programinha que eu mesmo fiz, bem simples más funcional se quiser entre em contato por email removido

Compartilhar este post


Link para o post
Compartilhar em outros sites

@gilmarfp, se pretende ajudar, por favor, o faça no fórum.

 

o iMasters é um fórum aberto e livre, portanto é interessante que as soluções fiquem no fórum, para pesquisas posteriores.

Além disso, este é um tópico um pouco antigo, se o criador do topico não retornou, quer dizer que já conseguiu resolver, ou desistiu do caso.

 

Procure postar coisas relevantes em tópicos recentes.

 

Se você pretende fazer 'auto promoção', existe um subfórum aqui, específico para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.