Skip to main content

Kode Import DBF to POSTGRE

<!DOCTYPE html>
<html>
<head>
  <title>Progress Bar</title>
</head>

<body>
<!-- Progress bar holder -->

<link rel="stylesheet" href="progress/bootstrap.min.css">

<div id="progress" class="progress-bar progress-bar-striped active" style="width:500px;border:1px solid #000;"></div>

<!-- Progress information -->
<div id="information" style="width"></div>
</br>

<?php

@include "config-postgre.php";            // please copy the config.sample.php and edit the correct fields

@include "classes/XBase/Table.php";
@include "classes/XBase/Column.php";
@include "classes/XBase/Record.php";
@include "classes/DBFhandler.php";

use XBase\Table;

 // Initializing vars
ini_set( 'memory_limit', '2048M' );
set_time_limit( 0 );

$time_start = time();
$files = scandir($xbase_dir) or die ("Error! Could not open directory '$xbase_dir'.");


$conn =    pg_connect("host=$db_host dbname=$db_name user=$db_uname password=$db_passwd");
   
/* $conn = new mysqli($db_host, $db_uname, $db_passwd, $db_name) or die ("Error connecting to mysql $mysqli->connect_error"); */

foreach ($files as $file) {
  switch ($file) {
  case (preg_match("/dbf$/i", $file) ? true : false):

   
    echo "File ditemukan : $file </br>";
   
      dbftopostgre($file);
   
      break;
  default:
 
      /* echo "Other file: $file</br>"; */
   
  }

}
$time_end = time();
echo "Import Selesai! Dengan waktu: ". round( ( $time_end - $time_start ) / 60, 2 ) ." minutes</br>";



function dbftopostgre($file) {
    // Path to dbase file

    global $xbase_dir;
    global $conn;
    global $die_on_pgsql_error;

    $db_path = sprintf("%s/%s",$xbase_dir,$file);

    // Open dbase file
    $table = new Table($db_path);
    $tbl = substr($file,0,strlen($file)-4);

/*     echo "$tbl"; */
   
    $line = array();

    foreach ($table->getColumns() as $column) {
/*         print_r("\t$column->name ($column->type / $column->length)\n"); */
        switch($column->type) {
            case 'C':    // Character field
                $line[]= "$column->name character varying($column->length) NOT NULL";
                break;
            case 'F':    // Floating Point
                $line[]= "$column->name FLOAT";
                break;
            case 'N':    // Numeric
                $line[]= "$column->name character varying($column->length) NULL";
                break;
            case 'L':    // Logical - ? Y y N n T t F f (? when not initialized).
                $line[]= "$column->name integer NULL";
                break;
            case 'D':    // Date
                $line[]= "$column->name date NULL";
                break;
            case 'T':    // DateTime
                $line[]= "$column->name time NULL";
                break;
            case 'M':    // Memo type field
            default:
                $line[]= "$column->name character varying($column->length) NULL";
                break;
        }
    }

    $str = implode(", ", $line);
/*     $str = implode(",",$line); */
    $sql = 'CREATE TABLE IF NOT EXISTS "'. $tbl .'" ( '.$str.' ) WITH (oids = false);';

   
    if (pg_query($conn, $sql)) {
       
        echo "Tabel: $tbl telah dibuat </br>";
       
    } else {
/*         echo "Error SQL: ".$conn->error ." >> $sql \n"; */
                echo "Error SQL: ".$sql." </br>";
        if ($die_on_pgsql_error) {
            die;
        }
    }

      $sql = 'TRUNCATE TABLE "'.$tbl.'"'; //hapus data lama
    pg_query($conn, $sql);  
   
    $table->close();

// Import using dbf + fpt files (for MEMO data...)
    $fpt_file = str_replace( '.dbf', '.fpt', $db_path );
    $fpt_path = ( file_exists( $fpt_file ) ? $fpt_file : '' );
    import_dbf_to_postgre( $tbl, $db_path, $fpt_path );
//    import_dbf($db_path, $tbl);
}


function import_dbf($db_path, $tbl) {
    global $conn;
    global $die_on_pgsql_error;
    // print_r ("$db_path\n");
    $table = new Table($db_path);

/*     echo "$table->recordCount</br>"; */
    $total=$table->recordCount;
    echo sizeof($table->columns) ."</br>";
    $i = 0;
    while ($record=$table->nextRecord()) {


        $fields = array();
        $line = array();
        foreach ($record->getColumns() as $column) {
            $fields[]=$column->name;
            echo $column->name;
            switch($column->type) {
                case 'C':    // Character field
                case 'M':    // Memo type field
                    $line[]= sprintf("'%s'", $record->getObject($column) );
                    break;
                case 'F':    // Floating Point
                    $line[]=sprintf("%7.2f", $record->getObject($column) );
                    break;
                case 'N':    // Numeric
                    $line[]=sprintf("%d", $record->getObject($column) );
                    break;
                case 'L':    // Logical - ? Y y N n T t F f (? when not initialized).
/*                     $line[] = sprintf("%d", ($record->getBoolean($column) ? 1 : 0) ); */
                    $line[] = sprintf("%d", $record->getString($column->name) );
                    break;
                case 'T':    // DateTime
                case 'D':    // Date
                    $line[]= sprintf("'%s'", strftime("%Y-%m-%d %H:%M", $record->getObject($column) ) );
                    break;
            }
        }

        $val = "{" . implode(", ", $line) . "}";
/*         $val = implode(",",$line); */
        $col = implode(",",$fields);

        if($GLOBALS['from_encoding']!="")$val = mb_convert_encoding($val, 'UTF-8', $GLOBALS['from_encoding'] );

        /*         if($GLOBALS['from_encoding']!=""){$val = mb_convert_encoding($val, 'UTF-8', $GLOBALS['from_encoding'] );} */
       
        $sql = 'INSERT INTO "'.$tbl.'" ("'. strtolower($col).'") VALUES ("'.$val.'");';

        echo "$sql";
/*         if (pg_query($conn, $sql)) { */       
        if (pg_query_params($sql, array($val))) {

            $i++;
            if ( $i % 100 == 0 ) {
                echo "$i records inserted in $tbl\n";
            }
            die;
        } else {
            echo "Error SQL: ".$conn->error ." >> $sql \n";

            if ($die_on_pgsql_error) {
                die;
            }
        }
    }
    $table->close();
    echo "Table $tbl import_dbf</br>";

}

function import_dbf_to_postgre( $table, $dbf_path, $fpt_path ) {
    echo "Proses impor: Tabel $table </br>";

    global $conn;
    global $die_on_pgsql_error;
    $i = 0;
   
    $Test = new DBFhandler( $dbf_path, $fpt_path );
   
   
    while ( ($Record = $Test->GetNextRecord( true )) and ! empty( $Record ) ) {

        // Calculate the percentation http://stackoverflow.com/questions/15298071/progress-bar-with-mysql-query-with-php
            $percent = intval($i/10000 * 100)."%";

            // Javascript for updating the progress bar and information
              echo '<script language="javascript">
              document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#000000;\">&nbsp;</div>";
              document.getElementById("information").innerHTML=" '.$i.' data sedang diproses.";
              </script>';
             // This is for the buffer achieve the minimum size in order to flush data
              echo str_repeat(' ',1024*64);

              // Send output to browser immediately
              flush();

              // Sleep one second so we can see the delay
              sleep(0);
             
        $a = 0;
        $sql1 = 'INSERT INTO "'.$table.'" (';
        $sql2 = ") VALUES (";
        $sql = "";
        foreach ( $Record as $key => $val ) {
            $key = (strpos($key, 0x00) !== false ) ? substr($key, 0, strpos($key, 0x00)) : $key;

            if ( $val == '{BINARY_PICTURE}' ) {
                continue;
            }
            $val = str_replace( "'", "", $val );
            if($GLOBALS['from_encoding']!="")$val = mb_convert_encoding($val, 'UTF-8', $GLOBALS['from_encoding'] );
            $a = $a + 1;
            if ( $a == 1 ) {
                $sql1 .='"'. strtolower($key).'"';
                $sql2 .="'" . trim( $val ) . "'";
            } else {
                $sql1 .=', "'.strtolower($key).'"';
                $sql2 .=", '".$val."'";
            }
        }
        $sql = "$sql1 $sql2);";
       
       
        if (pg_query($conn, $sql)) {
            $i++;
           
            if ( $i % 100 == 0 ) {
   
                 echo '.';
            }
        } else {

            echo "SQL = " . $sql;   

/*             echo "Muncul : ".$conn->error ." >> ".$sql;   
 */
            if ($die_on_pgsql_error) {
                die;
            }
        }
  }

    echo "<strong>Table $table import_dbf_to_postgre</strong></br></br>";

}

echo '<script language="javascript">document.getElementById("information").innerHTML=" Proses selesai"</script>';


?>

</body>
</html>


Download

Comments

Popular posts from this blog

Menggenerate nomor id

<?php //config $database = "dopo"; $tabel = "po"; $kolom_generate ="id"; $kolom_referensi = "id"; /* Database connection start */ $servername = "localhost"; $username = "root"; $password = ""; $dbname = $database; $mysqli = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error()); $q1 = "select * from $tabel order by $kolom_referensi DESC"; /* Database connection end */ echo '<table>'; // connect to the database // number of results to show per page $per_page = 10000; // figure out the total pages in the database if ($result = $mysqli->query($q1)) { if ($result->num_rows != 0) { $total_results = $result->num_rows; // ceil() returns the next highest integer value by rounding up value if necessary $total_pages = ceil($total_results / $per_page); // check if the 'page' variab...

Membuat Codeigniter PDF di CPANEL

1. Download FPDF dan copykan di folder application/thirdparty/pdf/ 2. Buat file Fpdf_gen.php di libraries. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Fpdf_gen { public function __construct() {  require_once APPPATH.'third_party/fpdf/fpdf-1.8.php'; define('FPDF_FONTPATH', APPPATH.'third_party/fpdf/font/'); $pdf = new FPDF(); $pdf->AddPage(); $CI =& get_instance(); $CI->fpdf = $pdf; } public function Footer() { $this->fpdf->SetY(-15); $this->fpdf->SetFont('Arial','I',8); $this->fpdf->SetTextColor(128); $this->fpdf->Cell(0,10,'Page ',0,0,'C'); } } 3. Buat file pdf.php di controller <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); defined('BASEPATH') OR exit('No direct script access allowed'); class Pdf extends CI_Controller {   public f...

CRUD dengan vue.js

pada tutorial kali ini kita akan belajar cara menampilkan data mengunakan  Vue JS  di framework  Codeigniter,  di dutorial sebelumnya kita sudah mempelajari cara Crud mengunakan Vue JS dan Codeigniter, kalian bisa lihat tutorialnya disini  CRUD CODEIGNITER DAN VUE JS  . kali ini kita akan mencoba menampilkan data yang ada pada database dengan framwork codeigniter dan vue js, untuk koneksi database di codeigniter adalah : <?php defined('BASEPATH') OR exit('No direct script access allowed'); $active_group = 'default'; $query_builder = TRUE; $db['default'] = array(     'dsn'    => '',     'hostname' => 'localhost',     'username' => 'root',     'password' => 'root',     'database' => 'civue',     'dbdriver' => 'mysqli',     'dbprefix' => '',     'pconnect' => FALSE,     ...