MySQL Forums
Forum List  »  Spanish

Re: errores al exportar datos numericos a txt
Posted by: Gonzalo Garcia Correas
Date: November 17, 2010 12:43PM

Me asalta una pregunta: Si el Postgre espera puntos decimales, y el MySQL devuelve los decimales con punto... ¿Por qué le cambias e punto por la coma?

En realidad me parece que tu problema no se está produciendo en el MySQL. Tu bien podrías dejar sin realizar el CAST que usas en la consulta y aún así podrías obtener un resultado perfecto.

Tu problema es estrictamente de regionalización de la aplicación. El inconveniente se produce en el segmento de tu código que genera el archivo que luego será leido:
Quote

on error resume next
intCount = rs.Fields.Count - 1
do while not rs.eof 'loop to cycle through the table
   tmpString = Null
   for i = 0 to intCount
      tmpString = rs.fields.item(i) & vbTab
      if isnull(tmpString) then tmpString = vbTab
      objOutFile.Write tmpString
      tmpstring = Null
   next
   objOutFile.WriteLine 'newline
   rs.MoveNext
loop
ad.close
El problema es que en ningún momento estás administrando el tipo de dato que te está llegando, de modo que si te llega nativamente como Double (lo que normalmente devolvería MySQL), situ PC está corriendo con la regionalización es-ES, por ejemplo, a los decimales los representará con comas, pero si está corriendo con regionalización neutra o en-US puede que los ponga con punto.
El tema allí es más bien controlar el modo en que interpreta los datos decimales la aplicación. No tanto la forma en que los pone MySQL.

Te recalco que el resultado final no es producto de MySQL sino de la aplicación, por lo que la importación posterior es más bien responsabilidad de lo que el Visual Basic está haciendo...

Mi experiencia es más en VB.Net que en VB clásico.
Respecto al nul que mencionas en el primer post, el problema está dado por el LEFT JOIN, que está permitiendo la devolución de datos como NULL y que el conector convierte a nul.
A mi entender eso se podría resolver usando funciones que eviten que la tabla venga con NULL, y que los cambie por 0, o vacío. Algo así:

Quote

SELECT
    numeropedido,
    tipopedido,
    fecha,
    oiddestino,
    destino,
    oidpais,
    pais,
    IFNULL(ped.oidproveedor,0) oidproveedor,
    IFNULL(ped.proveedor,'') proveedor,
    oidstock,
    stock,
    oidproducto,
    productolargo,
    producto,
    cajaspedido, 
    confeccion,
    calibre,
    marca,
    npiezas,
    REPLACE(CAST(pesoconfeccion AS CHAR),'.',','),
    cajasxpalet,
    gama,
    IFNULL(ped.plataformaorigen,'') plataformaorigen,
    oidpedidoexport, 
    IFNULL(pr.oidzona,0) oidzona,
    IFNULL(z.zona, '') zona 
FROM 
    temp_pedido ped LEFT JOIN 
    proveedor pr ON pr.oidproveedor=ped.oidproveedor LEFT JOIN 
    zona z ON z.oidzona=pr.oidzona;

Aunque yo intentaría hacer esto:
Quote

SELECT
    'numeropedido',
    'tipopedido',
    'fecha',
    'oiddestino',
    'destino',
    'oidpais',
    'pais',
    'oidproveedor',
    'proveedor',
    'oidstock',
    'stock',
    'oidproducto',
    'productolargo',
    'producto',
    'cajaspedido', 
    'confeccion',
    'calibre',
    'marca',
    'npiezas',
    'pesoconfeccion',
    'cajasxpalet',
    'gama',
    'plataformaorigen',
    'oidpedidoexport', 
    'oidzona',
    'zona' 
UNION
SELECT
    numeropedido,
    tipopedido,
    fecha,
    oiddestino,
    destino,
    oidpais,
    pais,
    IFNULL(ped.oidproveedor,0) oidproveedor,
    IFNULL(ped.proveedor,'') proveedor,
    oidstock,
    stock,
    oidproducto,
    productolargo,
    producto,
    cajaspedido, 
    confeccion,
    calibre,
    marca,
    npiezas,
    pesoconfeccion,
    cajasxpalet,
    gama,
    IFNULL(ped.plataformaorigen,'') plataformaorigen,
    oidpedidoexport, 
    IFNULL(pr.oidzona,0) oidzona,
    IFNULL(z.zona, '') zona 
FROM 
    temp_pedido ped LEFT JOIN 
    proveedor pr ON pr.oidproveedor=ped.oidproveedor LEFT JOIN 
    zona z ON z.oidzona=pr.oidzona
INTO OUTFILE 'c:\\CarpetaDeGuardado\\\NombreArchivo.txt'
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';

Eso debería dar por resultado el volcado de la consulta a disco sin necesidad de otros procesos. "c:\\CarpetaDeGuardado\\\NombreArchivo.txt", con las barras escapadas, es el nombre que debería adicionarse programáticamente según lo que desees poner y a dónde.
Estoy haciendo un UNION para hacer que salgan los encabezados de la tabla. SI no los necesitas simplemente eliminas el primer select y el UNION y deja el resto.

¿Te animarías a probarlo?

Options: ReplyQuote


Subject
Views
Written By
Posted
Re: errores al exportar datos numericos a txt
1430
November 17, 2010 12:43PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.