Foros del Web » Programando para Internet » PHP »

dbf a mysql mediante php

Estas en el tema de dbf a mysql mediante php en el foro de PHP en Foros del Web. Hola Tengo unas tablas en .dbf y me gustaria de manera automatica insertar el contenido en tablas con los mismo campos pero en mysql , ...
  #1 (permalink)  
Antiguo 08/09/2005, 13:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 12 años, 8 meses
Puntos: 1
dbf a mysql mediante php

Hola
Tengo unas tablas en .dbf y me gustaria de manera automatica insertar el contenido en tablas con los mismo campos pero en mysql , existe alguna manera de hacerlo?
Gracias de antemano
paloclanweb
  #2 (permalink)  
Antiguo 08/09/2005, 15:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tiene que ser un script en PHP que haga ese proceso regulamente? .. o podría ser una aplicación (GUI) que lo haga (tu lo tendrías que hacer como "administrador")?

Te hago el comentario por qué existen muchos GUI's que permiten conectarte a diferentes BD (por ODBC la mayoría) y así por otro lado conectarte a Mysql para hacer todo tipo de replicamientos, trasnferencias y sincronizaciones.

Por ejemplo ..
usa google "dbf to mysql" veras muchas propuestas.

Un saludo,
  #3 (permalink)  
Antiguo 08/09/2005, 15:19
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 12 años, 8 meses
Puntos: 1
Mira la idea es que me llegan a manera de ficheros, tres tablas que desconozco todavia el formato pero son parte de una BD Foxpro(por eso supongo que sean .dbf) y mi objetivo es leerlas e incorporar sus datos en tablas que son identicas(los mismos campos) en mysql, de todas maneras voy a probar la variante que me planteas de replicar mediante una GUI
Muchas gracias..voy a intertalo
Saludos
  #4 (permalink)  
Antiguo 08/09/2005, 15:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si lo quieres hacer con PHP .. tendrías que usar ODBC (www.php.net/odbc) crear tu DSN de sistema (apuntando a tu BD FoxPro), eso por un lado .. luego usar las funciones de Mysql para conectarte a ella e ir traspasando registro a registro entre ambas BD ...

Un saludo,
  #5 (permalink)  
Antiguo 13/09/2005, 08:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 12 años, 8 meses
Puntos: 1
Cluster
Mi interes era lograr trabajar directamente con un fichero dbf y mediante una herramienta vieja, el XtreeGold logre captar el ascii que me brinda informacion sobre el comienzo de los datos, el numero de campos , la longitud de los campos, ect..usando esto logre captar toda la informacion del dbf, ahora teniendo un arreglo de los datos es facil pasarla a una tabla en mysql, aqui te pongo el script, pruebalo y dime que te parece
Saludos
Paloclanweb
<?


$fp = fopen("C:\a\XAC_SIST.dbf",r);
$cascara=fgets($fp,5);//mE MUEVO HASTA EL BYTE 5 Y TODA ESA CASCARA LEIDA NO LA USO
$cant=fgets($fp,5);//Leo 4 Bytes desde la posicion 5 este me dice la cantidad de articulos del dbf

$CantArticulos=DameNumero($cant);//Cantidad de Articulos
$cant=fgets($fp,3);//Leo 2 Bytes desde la posicion 11 Inicio de Datos,Ojo recordar que siempre es cantidad Leer + 1
$InicioDatos=DameNumero($cant);//Me da el byte donde empiezan los datos
$cant=fgets($fp,5);//Leo 4 Bytes desde la posicion 14 Longitud del articulo, la suma de los caracteres predefinidos de toso los campos.
$LongArticulo=DameNumero($cant);//Me da la longitud total del articulo

$cascara=fgets($fp,19);//me posiciono en el primer campo
$listado=array();
$CantidadCampos=ContarCampos($fp,$LongArticulo,$li stado);

$diferencia=($InicioDatos-gztell($fp))+1;//gztell me dice donde esta actualmente el puntero
if ($diferencia >1 )
{
$cascara=$fgets($fp,$diferencia); //Leer desde donde esta actualmente el puntero hasta donde debe de empezar los datos y esa difrenecia es la que debo leer
//ya tengo el puntero al inicio de los datos
}//si no es diferente de 1 es porque el puntero esta donde me interesa

//aqui logro exponer la informacion indexada, en fila, clolumna
//lo que me permite agarrarlo y tirar cada dato por separadao para donde quiera

for ($i=1; $i <= $CantArticulos ; $i++)
{
$linea=fgets($fp,$LongArticulo);
echo $i.') '.$linea.'<br>';
for ($m=1 ; $m<=$CantidadCampos ; $m++)
{
$fila[$i][$m]=substr($linea,$listado[$m]['Pos'],$listado[$m]['Long']);
echo '----- '.$m.' ----- '.$fila[$i][$m]."<br>";
}
echo '<br>';
}

fclose($fp);
exit();
//************************************************** *************
function DameNumero ($cant1)
//************************************************** *************
{
$pila="";
For($j=strlen($cant1); $j>=1 ;$j--)
{
$byte=substr($cant1,$j-1,1);//Agarro Byte por Byte
$pila=$pila.dechex(ord($byte));//Cada uno lo llevo de ASCII a decimal y luego a hex y los voy concatenando
}
return $pila=hexdec($pila);//Los llevo a decimal

}
//************************************************** *************
function ContarCampos($fp,$LongArticulo,&$listado)
//************************************************** *************
{
$stop=false;


While (!$stop)
{

$campos=fgets($fp,2);//leo el primer campo
$Caracter1=ord(substr($campos,0,1));//lo llevamos a ascii
if ($Caracter1==13)//13 es el ascii de 0D que es el valor del byte que indica que se acabaron los campos
{
$stop=true;

$listado[$a+1]['Pos']=$LongArticulo;//la ultima posicion que la asumo como la longitud total
for ($j=1; $j<=$a ; $j++)
{
$listado[$j]['Long']=$listado[$j+1]['Pos'] - $listado[$j]['Pos'];
echo $listado[$j]['Long'].'<br>';
}

return $a;
}
else
{
$campos=$campos.fgets($fp,32);//leo el primer campo, los campos van de 32 en 32 bytes
$NombreCampo=substr($campos,0,10);
$TipodeCampo=substr($campos,11,1);
$PosicionenBytesdelArticulo=ord(substr($campos,12, 1));
$a++;
$listado[$a]['Pos']=$PosicionenBytesdelArticulo;
$listado[$a]['NombreCampo']=$NombreCampo;

}
}
}

?>
  #6 (permalink)  
Antiguo 13/09/2005, 15:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No tengo oportunidad de probarlo .. pero si funciona, te invito a que realizes una FAQ'a al respecto indicando tus esperiencias con el tema y el código que propones .. así nos servirá a todos por si lo necesitamos.

Un saludo,
  #7 (permalink)  
Antiguo 14/09/2005, 07:45
 
Fecha de Ingreso: marzo-2005
Mensajes: 116
Antigüedad: 12 años, 8 meses
Puntos: 1
Ok... el codigo lo mejore, por ejemplo la funcion fgets me paraba en los cambios de linea.Acabo de entrar a Faqs del Web, gracias por tu sugerencia.
Saludos
paloclanweb
  #8 (permalink)  
Antiguo 15/09/2005, 13:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por paloclanweb
Ok... el codigo lo mejore, por ejemplo la funcion fgets me paraba en los cambios de linea.Acabo de entrar a Faqs del Web, gracias por tu sugerencia.
Saludos
paloclanweb
Me refería simplemente a las FAQ's de este foro PHP por el momento, aquí .. en este mensaje:

http://www.forosdelweb.com/showthread.php?t=101546

Ahí simplemente publica tu mensaje nuevo (en ese mensaje) con el formato que veras de otras FAQ's ahí mencionadas (o indicaciones del primer mensaje) .. así quedará bajo tu usuario por si alguien gusta de hacerte preguntas o agradecimientos.

Un saludo,
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.
Respuesta




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