Ver Mensaje Individual
  #7 (permalink)  
Antiguo 11/11/2003, 16:38
Avatar de acervantes
acervantes
 
Fecha de Ingreso: agosto-2003
Ubicación: Madrid
Mensajes: 311
Antigüedad: 20 años, 9 meses
Puntos: 1
Problema y Solución al detalle

Problema : Tengo una tabla en foxpro 2.x (o visual foxpro 6.x, se aplica a ambas versiones) con la siguiente estructura (o diseño de registro):

campo tipo longitud
codrut caracter 6 posiciones
refrut caracter 20 posiciones
desrut memo ? posiciones (4 ó 10)

esta tabla guarda rutas de servicio de transporte urbano; el campo desrut, contiene la ruta por calles que seguira cada línea de transporte urbano (supongamos que el tamaño oscila entre 100 y 1000 caracteres). Ahora, necesito pasar el contenido de esta tabla a MySql; para tales efectos utilizo los siguientes comandos en FoxPro:

Código PHP:
use tabladerutas 
copy to rutasparamysql sdf
close data 
el problema es que el archivo de texto creado no tiene el campo desrut (de vital importancia en esta tabla).

Solución :
creo una tabla (.dbf) intermedia con la siguiente estructura:

campo tipo longitud
codrut caracter 6 posiciones
refrut caracter 20 posiciones
desru1 caracter 250 posiciones
desru2 caracter 250 posiciones
desru3 caracter 250 posiciones
desru4 caracter 250 posiciones

nota : sólo 4 campos porque el campo dsrut nunca excede 1000 caracteres.

Código PHP:
set memowidth to 125  && el ancho que tendrá cada línea extraída del campo memo (125 caracteres ¿quién sabe por qué?, a 250 se truncaban algunas palabrasa 125 hay que crear un pequerño artificio/algoritmo pero funciona bien).
set path to caminotablas
use interm_rutas exclusive
zap
appe from original_rutas 
for !empty(cdemp)  && en las tablas que usaba existían algunos campos cdemp en blanconormalmente no debe de darse al ser clave de la tablaen fin pregunten al área de sistemas
scan    
&& examinar registro a registro toda la tabla
   c 
&& para usar los campos dsru1, ..., dsru4
   a 
&& 125 car 125 car 250 caracteres
   
for x=1 to memlines(dsrut)  && cuantas líneas de memo hay (de 1 a 4 mínimo 100máximo 1000 caracteres)
       if 
3
          c 
1
          a 
1
          d 
""  && concatena contenido de campos dsru"x"
       
endif
       
campo "ds"+alltrim(str(c))   && campo dsru"x" a actualizar
       d 
alltrim(mline(dsrut,x)) + " "   && espacio en blanco al final para separar palabras
       a 
1   && necesita comentario?, es un contador de cocina
       replace 
&campowith d   && reemplaza de memo a dsru"x"
   
next
endscan

copy to txt_rutas_paraMySql sdf
clos all 
luego desde mysql admin:

Código PHP:
load data local infile 'txt_rutas_paraMySql.txt' into table rutas fields terminated by ''
pero eso es tema de otro foro...

PD: es una solución académica, de cocina o como la quieran llamar; mi consulta estaba orientada a no usar este metodo sino de frente una sola instrucción COPY TO :::: SDF...

(SE ENTIENDE????)
__________________
ACervantes

[El éxito dura hasta que alguien las caga; los errores son eternos]