Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   No lee caracteres numericos como alfa en columnas de excel mediante ADO (https://www.clubdelphi.com/foros/showthread.php?t=79641)

Combat-F2D 25-07-2012 09:09:21

No lee caracteres numericos como alfa en columnas de excel mediante ADO
 
tengo problemas en lo siguiente:

estoy cargando mediante ADO un tabla de excel para importacion en FB tal que en la consulta empleo un script sencillo:

Código SQL [-]
SELECT
    *
FROM
    Hoja$1

(creo que es asi, pero esto no es el problema)

esta consulta la he estado empleando bastante tiempo sin problema..., en una de las columnas figura un codigo de artículo tal que 'A99999' ó 'AYYYYY....'; bien, a partir de ahora en dicha columna intercalan codigo como los anteriores 'Ayyyyyyyy' otros nuevos tal que '9999998888777....', pues bien, observo que la consulta anterior los valores 'AXXXXX', si me los devuelve correctamnete, pero los nuevos como '9999....', me arroja un resultado en blanco; eso si, si edito la tabla e inicio delante del '999999...', una comilla simple, no hay problema, si se carga.

problema, el usuario debería tunnear antes la tabla de excel, y eso no es del todo correcto para mí, y menos para él

como podría solvertarle y decirle al motor de JET que ese valor '99999...' no es numerico, sino alfa???
hay que tocar algo de los prarametros???

si alguíen puede darme alguna solucion sin tener que meterme en codigo nuevo (un poquito si) se lo agradecería

olbeup 26-07-2012 11:03:54

Cuando tú pones en una celda A999999 y mas abajo pones de la misma columna 999999, ambas celdas son diferentes, uno es alfa y el otro es numérico, lo que tienes que hacer es en la columna es que sea toda de texto, selecciona toda la columna con el botón derecho del ratón y picar en Formato de celda, una vez echo esto todas la columna es alfa.

Un saludo.

Combat-F2D 26-07-2012 14:25:23

en efecto tienes razon, pero queria evitar ese paso, ya comente que no es lo que pretendo,

por cierto, en efecto, es alfa, pero de aqui en adelante, me explico, hasta que no se reediten las celdas numericas, estas no adquieren el tipo alfa.

fjcg02 26-07-2012 14:50:37

Casualmente es el mismo problema que tengo yo, y que he preguntado en este hilo...

http://clubdelphi.com/foros/showthread.php?t=79649

Saludos

olbeup 26-07-2012 15:02:29

Alfa = Alfanumérico, si sabes la columna puedes pasarla a alfanumérico, es la solución que veo.

Un saludo.

roman 26-07-2012 18:04:02

He buscado información al respecto y parece que no hay mucho que hacer. Al parecer, no hay manera de decirle al motor cuál es el tipo de datos de la columna y éste se determina examinando las primeras ocho filas y se establece aquel que tenga la mayoría de celdas. En caso de empate se toma como numérica.

Una manera de lograr esto es, como han indicado, cambiando el formato de la columna a texto, pero tiene el incoveniente, como también han indicado, de forzar al usuario hacerlo. Aunque, por otra parte, no me parece tan malo pedir al usuario un conjunto de especificaciones de cómo llenar el archivo. Sin embargo, podemos hacerlo nosotros mismos, antes de abrir la hoja, por ejemplo, en el evento BeforeOpen del DataSet:

Código Delphi [-]
procedure TForm1.ADOTable1BeforeOpen(DataSet: TDataSet);
var
  Excel, Libro, Hoja: OleVariant;

begin
  Excel := ComObj.CreateOleObject('Excel.Application');

  try
    Libro := Excel.Workbooks.Open('c:\ruta\al\archivo.xlsx');
    Hoja := Libro.Worksheets['Hoja1'];
    Hoja.Columns['A:A'].NumberFormat := '@';
    Libro.Save;
  finally
    Excel.Quit;
  end;
end;

// Saludos

Combat-F2D 26-07-2012 20:41:43

una buena solucion.... se agradece


La franja horaria es GMT +2. Ahora son las 10:42:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi