CONEXION 64 Y 32 BITS VISUAL FOX DBASE DRIVER ODBC 2 METODOS

<?php


ini_set('memory_limit', '256M');

header('Content-Type: application/json; charset=utf-8');

/*
$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";
*/



/*
Connection string for connecting to DBASE files in TestStand 64 bit
Syntax: Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=<Directory of dbf file>
Example: Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=C:\TestFolder  
*/










$directorio = "C:\\vfox";  // Directorio que contiene los archivos .dbf

// Configuración óptima para dBASE 5.0 (64 bits)

/*
$dsn3 = "Driver={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DriverID=533;" .
        "Dbq=$directorio;" .
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .
       "MaxBufferSize=2048;" .
       "PageTimeout=300;" .
       "Exclusive=No;" .  
       "Collate=Machine;" .
       "UID=;PWD=;"; 


$dsn3 = "DRIVER={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DBQ=$directorio;" .  // Usar DBQ en mayúsculas
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .
       "DriverID=277;" .  // Cambiar a 277 para versiones recientes
       "Exclusive=No";
*/




$directorio = "C:\\vfox"; // Usar doble barra y asegurar permisos

// Configuración optimizada para evitar el error

/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
       "DriverID=533;" .                   // ID específico para dBASE
       "Dbq=$directorio;" .                // Ruta a los archivos
       "DefaultDir=$directorio;" .         // Directorio por defecto
       "FIL=dBASE 5.0;" .                 // Versión específica
       "MaxBufferSize=2048;" .            // Tamaño de buffer optimizado
       "PageTimeout=300;" .               // Timeout aumentado
       "Exclusive=No;" .                  // Compartir acceso
       "Collate=Machine;" .               // Ordenación máquina
       "UID=;PWD=;";                     // Autenticación vacía
*/
/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
         "Dbq=$directorio;" .                // Ruta a los archivos
         "UID=;PWD=;";                     // Autenticación vacía
*/


/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
         "Dbq=C:\\vfox;" .                // Ruta a los archivos
         "UID=;PWD=;";                     // Autenticación vacía
*/

//$dsn12 ="Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox;Exclusive=No";



//$conn = odbc_connect($dsn12, "", "");



//
$conn = odbc_connect("vfox2", "", ""); /// para odbc




//$query = "SELECT * FROM VENTA WHERE nrofactura ='0001-00000002'";

//$query = "SELECT TOP 2 * FROM TARJETAS ORDER BY id";



// Paginación básica
$page = 1;
$perPage = 3;

// Consulta paginada
$query = "SELECT TOP $perPage * FROM (
    SELECT TOP " . ($page * $perPage) . " * FROM VENTA ORDER BY ID
) AS tmp ORDER BY ID DESC";







//$query = "SELECT TOP 8 * FROM VENTA ORDER BY id";

$result = odbc_exec($conn, $query);





$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
   //  $data[] = array_map('utf8_encode', $row); // Conversión a UTF-8
}

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

odbc_close($conn);








header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene TARJETAS.DBF

// Configuración del DSN para ODBC
//$dsn = "odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";


//$dsn = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
//         "Dbq=C:\\vfox;" .           
 //        "UID=;PWD=;";  

 // Conexión PDO a través de ODBC

 $conn = new PDO("odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox;Exclusive=No");
 $conn = new PDO("odbc:Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=C:\\vfox;");

//$conn = new PDO($dsn);



    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    $stmt = $conn->prepare($query);
    $stmt->execute();

 
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Convertir a JSON
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);























/*

header('Content-Type: application/json; charset=utf-8');

$directorio11 = "C:\\vfox"; // Directorio con archivos .dbf (usar doble barra)

// Configuración óptima validada (64 bits)
$dsn11 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
       "DriverID=533;" .                   // ID específico para dBASE
       "Dbq=$directorio11;" .                // Ruta a los archivos
       "DefaultDir=$directorio11;" .         // Directorio por defecto
       "FIL=dBASE 5.0;" .                 // Versión específica
       "MaxBufferSize=2048;" .            // Tamaño de buffer optimizado
       "PageTimeout=300;" .               // Timeout aumentado
       "Exclusive=No;" .                  // Compartir acceso
       "Collate=Machine;" .               // Ordenación máquina
       "UID=;PWD=;";                     // Autenticación vacía

try {
    // 1. Establecer conexión
    $conn = odbc_connect($dsn11, "", "");
    if (!$conn) {
        throw new Exception("Error ODBC: " . odbc_errormsg());
    }

    // 2. Configuración adicional recomendada
   // odbc_exec($conn, "SET DELETED ON");    // Ignorar registros borrados
   // odbc_exec($conn, "SET EXCLUSIVE OFF"); // Compartir acceso
    
    // 3. Ejemplo de consulta parametrizada
    $tabla = "TARJETAS"; // Nombre sin extensión
    $limit = 10;
    $query = "SELECT TOP $limit * FROM `$tabla`";
    
    $result = odbc_exec($conn, $query);
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // 4. Procesar resultados
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        $data[] = array_map('utf8_encode', $row); // Conversión a UTF-8
    }

    // 5. Respuesta JSON
    echo json_encode([
        'success' => true,
        'data' => $data,
        'metadata' => [
            'count' => count($data),
            'driver' => 'dBASE 5.0 ODBC',
            'connection' => '64-bit'
        ]
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);





} catch (Exception $e) {
    // Manejo profesional de errores
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'suggestions' => [
            "Verificar permisos en $directorio",
            "Ejecutar como Administrador si es necesario",
            "Confirmar que los archivos no estén bloqueados"
        ]
    ]);
} finally {
    // Cierre garantizado de conexión
    if (!empty($conn)) {
        odbc_close($conn);
    }
}


*/























/*
header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene TARJETAS.DBF

// Configuración del DSN para ODBC
$dsn = "odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";

try {
    // Crear conexión PDO con ODBC
    $conn = new PDO($dsn);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Consulta preparada
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    $stmt = $conn->prepare($query);
    $stmt->execute();

    // Obtener resultados como array asociativo
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Convertir a JSON
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (PDOException $e) {
    // Manejo de errores
    http_response_code(500);
    echo json_encode([
        'error' => 'Error de base de datos',
        'message' => $e->getMessage()
    ]);
}

*/




















/*

header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF



//driver={{Microsoft dBase Driver (*.dbf)}}

// Configuración corregida del DSN
$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio;Exclusive=No";

$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => 'Error de conexión']));

// PARA 0DBC 64 BITS ELEGIR MICROSOFT ACCESS DBASE DRIVER     VERSION DBASE 5.0

//$conn = odbc_connect("vfox", "", "") or die(json_encode(['error' => 'Error de conexión']));

// Paginación básica
$page = isset($_GET['page']) ? (intval($_GET['page'])) : 1;
$perPage = isset($_GET['per_page']) ? (intval($_GET['per_page'])) : 100;

// Consulta paginada

$query = "SELECT * FROM VENTA WHERE nrofactura ='0001-00000002'";


$result = odbc_exec($conn, $query) or die(json_encode(['error' => 'Error en consulta']));

// Obtener datos
$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
}

// Obtener total (forma sencilla)
$countResult = odbc_exec($conn, "SELECT COUNT(*) AS total FROM VENTA");
$totalRow = odbc_fetch_array($countResult);
$total = $totalRow ? $totalRow['total'] : 0;

// Respuesta JSON
echo json_encode([
    'page' => $page,
    'per_page' => $perPage,
    'total' => $total,
    'data' => $data
]);

odbc_close($conn);


*/





//header('Content-Type: application/json; charset=utf-8');

//$directorio = "C:\\vfox";  // Carpeta que contiene tus archivos .dbf



// Configuración para 32 bits
   // $dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;SourceType=DBF;SourceDB=$directorio";



  //$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio";





// Configuración corregida del DSN
//$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio;Exclusive=No";





/*


header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Directorio que contiene los archivos .dbf

// Configuración óptima para dBASE 5.0 (64 bits)
$dsn = "Driver={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DriverID=533;" .
       "SourceDB=$directorio;" .
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .  // Especificamos versión dBASE 5.0
       "MaxBufferSize=4096;" .  // Tamaño de buffer aumentado para dBASE 5.0
       "PageTimeout=600;" .
       "Exclusive=No;" .
       "Collate=Machine;";

try {
    // Establecer conexión ODBC
    $conn = odbc_connect($dsn, "", "");
    
    if (!$conn) {
        throw new Exception("Error de conexión ODBC: " . odbc_errormsg());
    }

    // Configuración adicional para dBASE 5.0
    odbc_exec($conn, "SET DELETED ON");
    odbc_exec($conn, "SET EXCLUSIVE OFF");
    odbc_exec($conn, "SET LOCK ON");

    // Consulta de ejemplo
    $tabla = "TARJETAS"; // Nombre del archivo sin extensión .dbf
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    
    $result = odbc_exec($conn, $query);
    
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // Procesar resultados
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        $data[] = array_map(function($value) {
            if (is_string($value)) {
                // Conversión de caracteres para dBASE 5.0
                return iconv('ISO-8859-1', 'UTF-8//TRANSLIT', trim($value));
            }
            return $value;
        }, $row);
    }

    // Respuesta JSON
    echo json_encode([
        'success' => true,
        'driver' => 'dBASE 5.0',
        'data' => $data,
        'count' => count($data)
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'dsn_used' => $dsn
    ]);
} finally {
    if (isset($conn) && $conn) {
        odbc_close($conn);
    }
}



*/
















/* BIENNNNNNNN
header('Content-Type: application/json');

$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => 'Error de conexión']));



// Consulta paginada
$query = "SELECT TOP 100 * FROM VENTA WHERE ID > 10 ORDER BY ID";

$result = odbc_exec($conn, $query) or die(json_encode(['error' => 'Error en consulta']));

// Obtener datos
$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
}


// Respuesta JSON
echo json_encode([
       'data' => $data
]);

odbc_close($conn);

*/






/* BIENNNNNNNN
header('Content-Type: application/json');

function getBatch($conn, $table, $lastId = 0, $batchSize = 100) {
    $query = "SELECT TOP $batchSize * FROM $table WHERE ID > $lastId ORDER BY ID";
    $result = odbc_exec($conn, $query);
    
    $data = [];
    $lastId = $lastId;
    while ($row = odbc_fetch_array($result)) {
        $data[] = $row;
         // Asume que existe campo ID
    }
    
    return ['data' => $data];
}

// Uso
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => odbc_errormsg()]));

$batch = getBatch($conn, 'VENTA', isset($_GET['last_id']) ? $_GET['last_id'] : 0);
echo json_encode($batch);
odbc_close($conn);

*/











/* BIENNNNNNN

// Configurar cabecera JSON primero
header('Content-Type: application/json; charset=utf-8');

// Configuración de conexión (corregido el SourceDB)
$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";

// Establecer conexión con manejo de errores
try {
    $conn = odbc_connect($dsn, "", "");
    if (!$conn) {
        throw new Exception("Error de conexión ODBC: " . odbc_errormsg());
    }

    // Consulta con manejo de errores
    $query = "SELECT * FROM VENTA WHERE estado like '%POR COBRAR%'";
    $result = odbc_exec($conn, $query);
    
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // Recoger datos y convertirlos a UTF-8
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        // Convertir valores a UTF-8 si es necesario
        foreach ($row as $key => $value) {
            if (is_string($value)) {
                $row[$key] = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
            }
        }
        $data[] = $row;
    }

    // Salida JSON con opciones para mejor legibilidad
    echo json_encode([
        'success' => true,
        'data' => $data,
        'count' => count($data)
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // Manejo de errores en formato JSON
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ], JSON_PRETTY_PRINT);
} finally {
    // Cerrar conexión si está abierta
    if (isset($conn) && $conn) {
        odbc_close($conn);
    }
}



*/



















/* BIENNNNNNN

header('Content-Type: application/json');

// Configuración para usar menos memoria
ini_set('memory_limit', '128M');
ob_implicit_flush(true);
ob_start();

$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => odbc_errormsg()]));

// Stream JSON manualmente
echo '{"data":[';

$first = true;
$result = odbc_exec($conn, "SELECT * FROM VENTA WHERE estado like '%POR COBRAR%'");
while ($row = odbc_fetch_array($result)) {
    if (!$first) echo ',';
    $first = false;
    echo json_encode($row);
    ob_flush();
    flush();
}

echo ']}';
odbc_close($conn);

*/








?><?php


ini_set('memory_limit', '256M');

header('Content-Type: application/json; charset=utf-8');

/*
$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";
*/



/*
Connection string for connecting to DBASE files in TestStand 64 bit
Syntax: Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=<Directory of dbf file>
Example: Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=C:\TestFolder  
*/










$directorio = "C:\\vfox";  // Directorio que contiene los archivos .dbf

// Configuración óptima para dBASE 5.0 (64 bits)

/*
$dsn3 = "Driver={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DriverID=533;" .
        "Dbq=$directorio;" .
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .
       "MaxBufferSize=2048;" .
       "PageTimeout=300;" .
       "Exclusive=No;" .  
       "Collate=Machine;" .
       "UID=;PWD=;"; 


$dsn3 = "DRIVER={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DBQ=$directorio;" .  // Usar DBQ en mayúsculas
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .
       "DriverID=277;" .  // Cambiar a 277 para versiones recientes
       "Exclusive=No";
*/




$directorio = "C:\\vfox"; // Usar doble barra y asegurar permisos

// Configuración optimizada para evitar el error

/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
       "DriverID=533;" .                   // ID específico para dBASE
       "Dbq=$directorio;" .                // Ruta a los archivos
       "DefaultDir=$directorio;" .         // Directorio por defecto
       "FIL=dBASE 5.0;" .                 // Versión específica
       "MaxBufferSize=2048;" .            // Tamaño de buffer optimizado
       "PageTimeout=300;" .               // Timeout aumentado
       "Exclusive=No;" .                  // Compartir acceso
       "Collate=Machine;" .               // Ordenación máquina
       "UID=;PWD=;";                     // Autenticación vacía
*/
/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
         "Dbq=$directorio;" .                // Ruta a los archivos
         "UID=;PWD=;";                     // Autenticación vacía
*/


/*
$dsn12 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
         "Dbq=C:\\vfox;" .                // Ruta a los archivos
         "UID=;PWD=;";                     // Autenticación vacía
*/

//$dsn12 ="Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox;Exclusive=No";



//$conn = odbc_connect($dsn12, "", "");



//
$conn = odbc_connect("vfox2", "", ""); /// para odbc




//$query = "SELECT * FROM VENTA WHERE nrofactura ='0001-00000002'";

//$query = "SELECT TOP 2 * FROM TARJETAS ORDER BY id";



// Paginación básica
$page = 1;
$perPage = 3;

// Consulta paginada
$query = "SELECT TOP $perPage * FROM (
    SELECT TOP " . ($page * $perPage) . " * FROM VENTA ORDER BY ID
) AS tmp ORDER BY ID DESC";







//$query = "SELECT TOP 8 * FROM VENTA ORDER BY id";

$result = odbc_exec($conn, $query);





$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
   //  $data[] = array_map('utf8_encode', $row); // Conversión a UTF-8
}

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

odbc_close($conn);








header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene TARJETAS.DBF

// Configuración del DSN para ODBC
//$dsn = "odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";


//$dsn = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
//         "Dbq=C:\\vfox;" .           
 //        "UID=;PWD=;";  

 // Conexión PDO a través de ODBC

 $conn = new PDO("odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox;Exclusive=No");
 $conn = new PDO("odbc:Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};Dbq=C:\\vfox;");

//$conn = new PDO($dsn);



    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    $stmt = $conn->prepare($query);
    $stmt->execute();

 
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Convertir a JSON
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);























/*

header('Content-Type: application/json; charset=utf-8');

$directorio11 = "C:\\vfox"; // Directorio con archivos .dbf (usar doble barra)

// Configuración óptima validada (64 bits)
$dsn11 = "Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};" .
       "DriverID=533;" .                   // ID específico para dBASE
       "Dbq=$directorio11;" .                // Ruta a los archivos
       "DefaultDir=$directorio11;" .         // Directorio por defecto
       "FIL=dBASE 5.0;" .                 // Versión específica
       "MaxBufferSize=2048;" .            // Tamaño de buffer optimizado
       "PageTimeout=300;" .               // Timeout aumentado
       "Exclusive=No;" .                  // Compartir acceso
       "Collate=Machine;" .               // Ordenación máquina
       "UID=;PWD=;";                     // Autenticación vacía

try {
    // 1. Establecer conexión
    $conn = odbc_connect($dsn11, "", "");
    if (!$conn) {
        throw new Exception("Error ODBC: " . odbc_errormsg());
    }

    // 2. Configuración adicional recomendada
   // odbc_exec($conn, "SET DELETED ON");    // Ignorar registros borrados
   // odbc_exec($conn, "SET EXCLUSIVE OFF"); // Compartir acceso
    
    // 3. Ejemplo de consulta parametrizada
    $tabla = "TARJETAS"; // Nombre sin extensión
    $limit = 10;
    $query = "SELECT TOP $limit * FROM `$tabla`";
    
    $result = odbc_exec($conn, $query);
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // 4. Procesar resultados
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        $data[] = array_map('utf8_encode', $row); // Conversión a UTF-8
    }

    // 5. Respuesta JSON
    echo json_encode([
        'success' => true,
        'data' => $data,
        'metadata' => [
            'count' => count($data),
            'driver' => 'dBASE 5.0 ODBC',
            'connection' => '64-bit'
        ]
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);





} catch (Exception $e) {
    // Manejo profesional de errores
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'suggestions' => [
            "Verificar permisos en $directorio",
            "Ejecutar como Administrador si es necesario",
            "Confirmar que los archivos no estén bloqueados"
        ]
    ]);
} finally {
    // Cierre garantizado de conexión
    if (!empty($conn)) {
        odbc_close($conn);
    }
}


*/























/*
header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene TARJETAS.DBF

// Configuración del DSN para ODBC
$dsn = "odbc:Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";

try {
    // Crear conexión PDO con ODBC
    $conn = new PDO($dsn);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Consulta preparada
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    $stmt = $conn->prepare($query);
    $stmt->execute();

    // Obtener resultados como array asociativo
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Convertir a JSON
    echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (PDOException $e) {
    // Manejo de errores
    http_response_code(500);
    echo json_encode([
        'error' => 'Error de base de datos',
        'message' => $e->getMessage()
    ]);
}

*/




















/*

header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF



//driver={{Microsoft dBase Driver (*.dbf)}}

// Configuración corregida del DSN
$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio;Exclusive=No";

$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => 'Error de conexión']));

// PARA 0DBC 64 BITS ELEGIR MICROSOFT ACCESS DBASE DRIVER     VERSION DBASE 5.0

//$conn = odbc_connect("vfox", "", "") or die(json_encode(['error' => 'Error de conexión']));

// Paginación básica
$page = isset($_GET['page']) ? (intval($_GET['page'])) : 1;
$perPage = isset($_GET['per_page']) ? (intval($_GET['per_page'])) : 100;

// Consulta paginada

$query = "SELECT * FROM VENTA WHERE nrofactura ='0001-00000002'";


$result = odbc_exec($conn, $query) or die(json_encode(['error' => 'Error en consulta']));

// Obtener datos
$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
}

// Obtener total (forma sencilla)
$countResult = odbc_exec($conn, "SELECT COUNT(*) AS total FROM VENTA");
$totalRow = odbc_fetch_array($countResult);
$total = $totalRow ? $totalRow['total'] : 0;

// Respuesta JSON
echo json_encode([
    'page' => $page,
    'per_page' => $perPage,
    'total' => $total,
    'data' => $data
]);

odbc_close($conn);


*/





//header('Content-Type: application/json; charset=utf-8');

//$directorio = "C:\\vfox";  // Carpeta que contiene tus archivos .dbf



// Configuración para 32 bits
   // $dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;SourceType=DBF;SourceDB=$directorio";



  //$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio";





// Configuración corregida del DSN
//$dsn = "Driver={Microsoft dBase Driver (*.dbf)};DriverID=533;SourceType=DBF;SourceDB=$directorio;Exclusive=No";





/*


header('Content-Type: application/json; charset=utf-8');

$directorio = "C:\\vfox";  // Directorio que contiene los archivos .dbf

// Configuración óptima para dBASE 5.0 (64 bits)
$dsn = "Driver={Microsoft Access dBASE Driver (*.dbf,*.ndx,*.mdx)};" .
       "DriverID=533;" .
       "SourceDB=$directorio;" .
       "DefaultDir=$directorio;" .
       "FIL=dBASE 5.0;" .  // Especificamos versión dBASE 5.0
       "MaxBufferSize=4096;" .  // Tamaño de buffer aumentado para dBASE 5.0
       "PageTimeout=600;" .
       "Exclusive=No;" .
       "Collate=Machine;";

try {
    // Establecer conexión ODBC
    $conn = odbc_connect($dsn, "", "");
    
    if (!$conn) {
        throw new Exception("Error de conexión ODBC: " . odbc_errormsg());
    }

    // Configuración adicional para dBASE 5.0
    odbc_exec($conn, "SET DELETED ON");
    odbc_exec($conn, "SET EXCLUSIVE OFF");
    odbc_exec($conn, "SET LOCK ON");

    // Consulta de ejemplo
    $tabla = "TARJETAS"; // Nombre del archivo sin extensión .dbf
    $query = "SELECT TOP 5 * FROM TARJETAS ORDER BY id";
    
    $result = odbc_exec($conn, $query);
    
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // Procesar resultados
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        $data[] = array_map(function($value) {
            if (is_string($value)) {
                // Conversión de caracteres para dBASE 5.0
                return iconv('ISO-8859-1', 'UTF-8//TRANSLIT', trim($value));
            }
            return $value;
        }, $row);
    }

    // Respuesta JSON
    echo json_encode([
        'success' => true,
        'driver' => 'dBASE 5.0',
        'data' => $data,
        'count' => count($data)
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage(),
        'dsn_used' => $dsn
    ]);
} finally {
    if (isset($conn) && $conn) {
        odbc_close($conn);
    }
}



*/
















/* BIENNNNNNNN
header('Content-Type: application/json');

$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => 'Error de conexión']));



// Consulta paginada
$query = "SELECT TOP 100 * FROM VENTA WHERE ID > 10 ORDER BY ID";

$result = odbc_exec($conn, $query) or die(json_encode(['error' => 'Error en consulta']));

// Obtener datos
$data = [];
while ($row = odbc_fetch_array($result)) {
    $data[] = $row;
}


// Respuesta JSON
echo json_encode([
       'data' => $data
]);

odbc_close($conn);

*/






/* BIENNNNNNNN
header('Content-Type: application/json');

function getBatch($conn, $table, $lastId = 0, $batchSize = 100) {
    $query = "SELECT TOP $batchSize * FROM $table WHERE ID > $lastId ORDER BY ID";
    $result = odbc_exec($conn, $query);
    
    $data = [];
    $lastId = $lastId;
    while ($row = odbc_fetch_array($result)) {
        $data[] = $row;
         // Asume que existe campo ID
    }
    
    return ['data' => $data];
}

// Uso
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => odbc_errormsg()]));

$batch = getBatch($conn, 'VENTA', isset($_GET['last_id']) ? $_GET['last_id'] : 0);
echo json_encode($batch);
odbc_close($conn);

*/











/* BIENNNNNNN

// Configurar cabecera JSON primero
header('Content-Type: application/json; charset=utf-8');

// Configuración de conexión (corregido el SourceDB)
$directorio = "C:\\vfox";  // Carpeta que contiene VENTA.DBF
$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=$directorio;Exclusive=No";

// Establecer conexión con manejo de errores
try {
    $conn = odbc_connect($dsn, "", "");
    if (!$conn) {
        throw new Exception("Error de conexión ODBC: " . odbc_errormsg());
    }

    // Consulta con manejo de errores
    $query = "SELECT * FROM VENTA WHERE estado like '%POR COBRAR%'";
    $result = odbc_exec($conn, $query);
    
    if (!$result) {
        throw new Exception("Error en consulta: " . odbc_errormsg());
    }

    // Recoger datos y convertirlos a UTF-8
    $data = [];
    while ($row = odbc_fetch_array($result)) {
        // Convertir valores a UTF-8 si es necesario
        foreach ($row as $key => $value) {
            if (is_string($value)) {
                $row[$key] = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
            }
        }
        $data[] = $row;
    }

    // Salida JSON con opciones para mejor legibilidad
    echo json_encode([
        'success' => true,
        'data' => $data,
        'count' => count($data)
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // Manejo de errores en formato JSON
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ], JSON_PRETTY_PRINT);
} finally {
    // Cerrar conexión si está abierta
    if (isset($conn) && $conn) {
        odbc_close($conn);
    }
}



*/



















/* BIENNNNNNN

header('Content-Type: application/json');

// Configuración para usar menos memoria
ini_set('memory_limit', '128M');
ob_implicit_flush(true);
ob_start();

$dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\vfox";
$conn = odbc_connect($dsn, "", "") or die(json_encode(['error' => odbc_errormsg()]));

// Stream JSON manualmente
echo '{"data":[';

$first = true;
$result = odbc_exec($conn, "SELECT * FROM VENTA WHERE estado like '%POR COBRAR%'");
while ($row = odbc_fetch_array($result)) {
    if (!$first) echo ',';
    $first = false;
    echo json_encode($row);
    ob_flush();
    flush();
}

echo ']}';
odbc_close($conn);

*/








?> 

Comentarios

Entradas populares de este blog

NUMEROS SERIE DE DISCO RIGIDO Y PENDRIVER USB CON PHP

INSERTAR Y UPDATE FECHA CON PHP MYSQL EN FORMULARIO METODO POST CON JQUERY ETIQUETA DATE

Copia de Seguridad de Archivo MS Access (.mdb) a Pendrive con VB6