=============================================================
Partcipe das enquetes sobre os novos rumos da comunidade! 
Acesse http://www.pgfoundry.org:8080/novosRumos
=============================================================
Enviando o script em PHP.. Mas o problema, creio que nao seja o script especificamente, e sim na biblioteca de dbase para o php.

Existe alguma outra maneira que seja razoavelmente facil de importar esse dbf pro postgresql?

abraços,
artz
---
<?
// This is a class that converts a .DBF file into SQL intructions
// Esta classe converte arquivo .DBF para instruções SQL
// Autor : Pablo Dall'Oglio ([EMAIL PROTECTED])
// Date :  Saturday, 07, 2001

// Correções de bugs e adaptação para as instruções do PostgreSQL
// Bugs fix and adaptation for PostgreSQL instructions
// Autor: Arthur Molina ([EMAIL PROTECTED])
// Date : 15/04/2005


class dbf2sql
{
    var $db;
    var $num_records;
    var $num_fields;
    var $nome_arq;
    var $table;
    var $myfile;

    // This function open DBF file, set the variables
    // returns 1 if open with success otherwise, returns 0
    function opendb($dbffile, $sqlfile, $tablename)
    {
      if (($dbffile) && ($sqlfile))
      {
        $this->db = @dbase_open($dbffile, 0);
        if ($this->db)
        {
          $this->num_records = dbase_numrecords($this->db);
          $this->num_fields = dbase_numfields($this->db);
        }
        else
        {
          return(0);
        }
        $this->dbf_nome = $dbffile;
        $this->nome_arq = $sqlfile;
        $this->table = $tablename;
        return(1);
      }
      return(0);
    }

    // This function open the SQL file for write
    // returns 1 if open with success otherwise, returns 0
    function opensql()
    {
      $this->myfile = @fopen($this->nome_arq, "w");
      if (!$this->myfile)
      {
        return(0);
      }
      return(1);
    }

    // This function close both DBf and SQL files
    function closeall()
    {
      fclose($this->myfile);
      dbase_close($this->db);
    }

    // This function get the columns from DBF file and
    // whrite it into a SQL file
    function GetColumns($banco)
    {
      $saida = '';
      $array_columns = $this->get_dbf_header();
      $total = count($array_columns);

//      $linha_mens = "CREATE DATABASE $banco;\n\n";
      $linha_mens .= "CREATE TABLE $this->table (";
      $linha_mens .= "IdxBD SERIAL, ";


        for($count=0; $count<$total; $count++)
        {
          Switch ($array_columns[$count][1])
              {
              Case 'C': // Char
                  $linha_mens .= $array_columns[$count][0] . " VARCHAR(" . $array_columns[$count][2] . "), ";
                    Break;
              Case 'D':  //Date
                  $linha_mens .= $array_columns[$count][0] . " DATE, ";
                    Break;
              Case 'F':  //Float ***
                  if($array_columns[$count][3]==0)
                      {
                      $linha_mens .= $array_columns[$count][0] . " INT8, ";
                      } else {
                      $linha_mens .= $array_columns[$count][0] . " DECIMAL(" . $array_columns[$count][2] . ", " . $array_columns[$count][3] . "), ";
                      }
                    Break;
              Case 'L':  //Logical
                  $linha_mens .= $array_columns[$count][0] . " BOOL, ";
                    Break;
              Case 'M':  //Memo
                  $linha_mens .= $array_columns[$count][0] . " VARCHAR(255), ";
                    Break;
              Case 'N':  //Number ***
                  if($array_columns[$count][3]==0)
                      {
                      $linha_mens .= $array_columns[$count][0] . " INT8, ";
                      } else {
                      $linha_mens .= $array_columns[$count][0] . " DECIMAL(" . $array_columns[$count][2] . ", " . $array_columns[$count][3] . "), ";
                      }
                    Break;
              Case 'S':  //Short
                  $linha_mens .= $array_columns[$count][0] . " SMALLINT, ";
                    Break;

          }

        }
        $linha_mens .= "PRIMARY KEY  (IdxBD));\n";

      fputs($this->myfile, "$linha_mens");
      $saida .= $linha_mens;

      // loop the database
      for($index=1; $index <= $this->num_records; $index ++)
      { // get the actual record
        $record = dbase_get_record($this->db, $index);
        //BUG aqui!!! - quando a coluna é numero e o dado está vazio, ele retorna zero e não vazio como deveria...

        // linha_mens is the SQL instruction to write into SQL file
        $linha_mens = "INSERT INTO $this->table ( ";

        // get the column names
        for($count=0; $count<$total; $count++)
        {
          $linha_mens .= $array_columns[$count][0] . ", ";

        }
        $linha_mens = substr($linha_mens,0, strlen($linha_mens)-2);
        $linha_mens .= " ) VALUES (";

        // get the column values
        for($count=0; $count<$total; $count++)
        {//echo $record[$count] . " - ";                                    ///////////////////
          $linha_mens .= "'" . trim($record[$count]) . "', ";
        }


        $linha_mens = substr($linha_mens,0, strlen($linha_mens)-2);
        $linha_mens .= " ); \n";

        // Ignore deleted fields
        if ($record["deleted"] != "1")
        { fputs($this->myfile, "$linha_mens");
          $saida .= $linha_mens;}

      }
    return $saida;
    }


    // This function open the dbfile and
    // returns the header in a array
   function get_dbf_header() {

   $dbfname = $this->dbf_nome;
   $fdbf = fopen($dbfname,'r');

   $dbfhdrarr = array();
   $buff32 = array();
   $i = 1;
   $goon = true;

   while ($goon) {
     if (!feof($fdbf)) {
         $buff32 = fread($fdbf,32);
         if ($i > 1) {
           if (substr($buff32,0,1) == chr(13)) {
               $goon = false;
           } else {
               $pos = strpos(substr($buff32,0,10),chr(0));
               $pos = ($pos == 0?10:$pos);

               $fieldname = substr($buff32,0,$pos);
               $fieldtype = substr($buff32,11,1);
               $fieldlen = ord(substr($buff32,16,1));
               $fielddec = ord(substr($buff32,17,1));

        array_push($dbfhdrarr, array($fieldname,$fieldtype,$fieldlen,$fielddec));

           }
         }
         $i++;
     } else {
         $goon = false;
     }
   }

   fclose($fdbf);
   return($dbfhdrarr);
}

}
?>


[EMAIL PROTECTED]
escreveu:
<[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]>Message: 6
Date: Mon, 17 Jul 2006 13:58:43 -0300
From: "Nabucodonosor Coutinho" <[EMAIL PROTECTED]>
Subject: Re: [PostgreSQL-Brasil] dbf -> PG (PHP)
To: " Grupo de Usuários do PostgreSQL no Brasil "

Message-ID:
<[EMAIL PROTECTED]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Manda teu script que fica mais facil

Em 17/07/06, Arthur Molina<[EMAIL PROTECTED]> escreveu:
> =============================================================
> Partcipe das enquetes sobre os novos rumos da comunidade!
> Acesse http://www.pgfoundry.org:8080/novosRumos
> =============================================================
>
> oi gente,
>
> fiz uma pequena função em PHP que converte arquivos DBF em linhas de sql
> para rodar no Postgre. Só que estou tendo um problema: quando utilizo coluna
> de inteiro e uma das celulas está vazia, o comando do php que uso para pegar
> o dado do DBF (dbase_get_record) retorna zero em vez de vazio.
>
> Isso prejudica a minha analise de dados, pois quando o dado está zero é pq
> determinada variavel nao esta presente no objeto descrito pela linha, e
> quando está vazia é pq nao existem dados pesquisados sobre essa variavel no
> referido objeto.
>
> Alguem teria outra solução?
>
> abraços,
> artz
>
>
> ________________________________
> Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular.
> Registre seu aparelho agora!
>
>
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> Antes de perguntar consulte o manual
> http://pgdocptbr.sourceforge.net/
>
>


--
Nabucodonosor Coutinho
Database Administrator
PostgreSQL Brasil - www.postgresql.org.br
Accu Hosting - www.accuhosting.com


------------------------------

Message: 7
Date: Mon, 17 Jul 2006 14:22:26 -0300
From: "SENAI Joinville" <[EMAIL PROTECTED]>
Subject: [PostgreSQL-Brasil] "campo_tabela" does not exist
To: [email protected]
Message-ID:
<[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

Quando tento fazer uma consulta sql, através de um query , na hora de
executar a pesquisa ele não reconhece o campo, ja coloquei entre aspas
duplas, simples, e nada ele não encontra o campo, e eu sei q o campo existe
pois esta la na tabela, se alguem poder me ajudar agradeço atenciosamente
fabio
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://pgfoundry.org/pipermail/brasil-usuarios/attachments/20060717/e4d801ba/attachment-0001.html

------------------------------

Message: 8
Date: Mon, 17 Jul 2006 14:24:20 -0300
From: "SENAI Joinville" <[EMAIL PROTECTED]>
Subject: [PostgreSQL-Brasil] Conexão
To: [email protected]
Message-ID:
<[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

Porq sempre q vou conectar no banco , ele pede uma senha e um usuário, onde
consigo desabilitar este ? pois ate quando o executavel roda ele pede
usuario e senha e não existe nenhum cadastrado, tanto q se eudeixar em
branco e der ok, ele passa numa boa.
grato desde ja
fabio
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://pgfoundry.org/pipermail/brasil-usuarios/attachments/20060717/94376f32/attachment.html

------------------------------

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br
http://pgfoundry.org/mailman/listinfo/brasil-usuarios


Fim da Digest Brasil-Usuarios, volume 239, assunto 3
****************************************************


Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas!
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Responder a