Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Convertendo DBF para SQL (DBF2SQL)

Colaboração: Pablo Dall'Oglio

Data de Publicação: 10 de September de 2008

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 "< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>#\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 "< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>#\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;
  }
  ?>

Fonte: http://www.dalloglio.net/63

Veja a relação completa dos artigos de Pablo Dall'Oglio

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1294 votos)

Opinião dos Leitores

marcal
15 Dez 2011, 17:09
boa tarde, copiei a linha de codigo para um programa chamado teste.bat como faço agora para executar, fui no prompt do dos mas e rodei o teste mas não obtive sucesso. Desde já muito obrigado
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Read in English - Uma Maneira Divertida de Aprender Inglês