Foros del Web » Programando para Internet » PHP »

PHP y Tablas DBF

Estas en el tema de PHP y Tablas DBF en el foro de PHP en Foros del Web. Buenas tardes, Espero que alguien me pueda ayudar a resolver mi problema, quiero desarrollar una pagina en php que tenga conexión con unas tablas dbf ...
  #1 (permalink)  
Antiguo 04/03/2009, 16:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
PHP y Tablas DBF

Buenas tardes,

Espero que alguien me pueda ayudar a resolver mi problema, quiero desarrollar una pagina en php que tenga conexión con unas tablas dbf que pertenecen a un sistema llamado AdminPaq, al parecer las tablas se encuentran bloqueadas por que no puedo abrir la base de datos, me manda un error como el siguiente:

Warning dbase_open()[function.dabase-open]: Cannot open database tabla.dbf in "ruta" on line 3

o al menos que la tabla tenga alguna restricción el cual impide el acceso o comunicación con ella.

espero que puedan ayudarme a resolver este problema

Gracias
  #2 (permalink)  
Antiguo 04/03/2009, 16:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: PHP y Tablas DBF

Prueba entrar por ODBC.

Saludos
  #3 (permalink)  
Antiguo 04/03/2009, 17:12
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: PHP y Tablas DBF

GatorV me puedes explicar como puedo hacer eso atravez del php, no estoy muy familiarizada con esto muy a fondo. Lo que quiero hacer son solo consultas a las tablas dbf desde php para poder presentar informaciòn almacenada.

Gracias...
  #4 (permalink)  
Antiguo 04/03/2009, 18:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: PHP y Tablas DBF

En www.php.net/odbc puedes ver la referencia de las funciones.

Tienes que configurar el driver ODBC para poder leer las tablas de AdminPaq, esto lo tienes que ver en la documentación una vez que lo tengas activado solamente usa ODBC para hacer querys.

Saludos
  #5 (permalink)  
Antiguo 04/03/2009, 20:00
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 8 meses
Puntos: 4
Respuesta: PHP y Tablas DBF

Por experiencia propia te digo que php (o la libreria dbf) en windows no deja acceder a archivo .dbf que estan en otra PC ni a traves de rutas tipo \\maquina\carpeta\archiv.dbf ni con unidades asignadas (hasta donde entiendo es algo de que el usuario utilizado por php no tiene esos permisos en windows).

Lo que me lleva a la otra hipótesis: Quiza el tema sea por los permisos en windows o en linux. Recuerda que apache y php no se ejecutan con tu propio usuario.

Solo por probar: deja una copia del dbf en una carpeta muy accesible (en windows seria la carpeta de localhost y en linux seria esa o /tmp) y ve si puedes acceder al archivo en esa locación. Antes de intentar la conexión usa la funcion if(file_exists($ruta.$tabla)){ ... }

Aca te dejo un ejemplo de como conectar usando usando ODBC y un dsn "DE SISTEMA"

Código PHP:
// consulta SQL a nuestra tabla 

$sql="SELECT * FROM facturas WHERE ((fecha>={ts '2007-01-01 00:00:00'}) and ".
     
"((ret_mn_cr>0) or ((retencion>0) and (fecha>={ts '2007-09-11 00:00:00'}))) ".
     
") ORDER BY fecha, serfact, factura; ";

// Conectar 
$dsn "nombredelDSNdeSISTEMA";
$cid=odbc_connect($dsn$usuario$clave);

if (!
$cid){
    exit(
"<strong>Error tratando de conectar con el origen de datos.</strong>");
}    

// generamos la tabla 
@$result=odbc_exec($cid,$sql);
if(
$result) {

  
// Cargar a un array ...
  
while($dat odbc_fetch_row($result)) {
    
$datos[] = array(
      
"factura" => odbc_result($result,'serfact').'-'.odbc_result($result,'factura'),  
      
"cliente" => odbc_result($result,'cliente'),
      
"moneda" => odbc_result($result,'moneda'),
      
"total" => odbc_result($result,'total')+0
    
);
        
//depurar te puede servir para ver los tipos::: echo ">>".odbc_result($result,'ret_mn_cr').">".gettype(odbc_result($result,'ret_mn_cr'));

  
}
  
odbc_close($cid);
} else {
  if(
odbc_error()=='S1000') {
    echo 
"<b>ERROR:</b> La tabla de facturas está bloqueada en exclusividad por un ".
         
"proceso del Sistema, por favor espere o notifique al usuario que está ".
         
"llevando a cabo ese proceso.";
  } else {
    echo 
"<b>ERROR: Por favor imprima esta página para soporte informático!</b> <br/>".
         
"Codigo: ".odbc_error()." - Mensaje: ".odbc_errormsg($cid)."<br/>".
         
"SQL: ".$sql."<br/>";
  }

__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #6 (permalink)  
Antiguo 04/03/2009, 21:57
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Respuesta: PHP y Tablas DBF

Muchas gracias por el ejemplo temaqueja! Justamente estuve teniendo unos problemas con unos dbf en un miniproyectito... el tema era que al grabar usando la extension de php se me rompia la base de datos.

Ahora estoy probando usar una clase que encontre en phpclasses.ogg, que se llama
PHPXBase (http://www.phpclasses.org/browse/package/2673.html). Aparentemente funciona bien pero tiene el inconveniente de ser bastante lenta (usa solo php y accede al archivo con fopen()).

Lo que me queda es el tema de los indices... tenia pensado caer en llamar con exec() al foxpro 2.x -que viejo jaja- que me los regenere... pero antes intento con ODBC. tenes alguna experiencia con esto?

Saludos
  #7 (permalink)  
Antiguo 05/03/2009, 12:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: PHP y Tablas DBF

Gracias por las respuestas que me han dado, pero el problema que presento ahora es que desconosco el connection_string, probe con este "Driver={Microsoft dBase Driver (*.dbf)};datasource=dBase Files;" pero no estoy segura si realmente me esta haciendo la coneccion cuando se ejecuta la sentencia odb_connect($connection_strin,$user,$pswd), asi que cuando trato de ejecutar una sentencia SELECT * from tabla.dbf dice que no encuentra el objeto tabla.dbf, espero que me puedan ayudar con mi problema

Saludos.
  #8 (permalink)  
Antiguo 05/03/2009, 14:41
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 8 meses
Puntos: 4
Respuesta: PHP y Tablas DBF

Cuando creaste el DSN de sistema le pusiste nombre, no escribas una conection string sino simplemente el nombre que le diste al dsn.
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #9 (permalink)  
Antiguo 05/03/2009, 14:44
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 8 meses
Puntos: 4
Respuesta: PHP y Tablas DBF

Cita:
Iniciado por fran86 Ver Mensaje
Muchas gracias por el ejemplo temaqueja! Justamente estuve teniendo unos problemas con unos dbf en un miniproyectito... el tema era que al grabar usando la extension de php se me rompia la base de datos.

Ahora estoy probando usar una clase que encontre en phpclasses.ogg, que se llama
PHPXBase (http://www.phpclasses.org/browse/package/2673.html). Aparentemente funciona bien pero tiene el inconveniente de ser bastante lenta (usa solo php y accede al archivo con fopen()).

Lo que me queda es el tema de los indices... tenia pensado caer en llamar con exec() al foxpro 2.x -que viejo jaja- que me los regenere... pero antes intento con ODBC. tenes alguna experiencia con esto?

Saludos
Sorry solo accedo las dbfs para leer información, yo que tu no intentaria escribir en las tablas dbf abiertas por otro sistema ya que aparte de tirarte los indices podrias dañar el archivo si ambos programas intentan grabar el mismo registro o este esta bloqueado...

por otro lado en el driver odbc de foxpro hay un apartado para usar indices pero no logré hacerlo andar.
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:49.