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
Publicar un comentario