2011-12-16 13 views
7

¿Cómo uso CAST en ADO para convertir los valores de Float a String?ADO Tipo de SQL fundido Float to String (Excel)

me trataron

SELECT CAST([Field] AS VARCHAR(20)) FROM ... 

y

SELECT CAST([Field] AS STRING) FROM ... 

y siempre obtendrá una excepción OLE (error desconocido).

La columna de la tabla contiene valores mixtos numéricos (justificados a la derecha) y alfanuméricos (justificados a la izquierda). Si solo hay valores alfanuméricos, el tipo de campo de consulta de ADO es Cadena.

Estoy utilizando Delphi 2009 ADO y Excel 2010.

Respuesta

2

Tal vez usando CStr quiere trabajar, es decir,

SELECT CStr([Field]) FROM... 
+0

El CSTR parece ser una función de conversión válida. Ahora da otro error: Campo "Campo" no encontrado. Supongo que la función CSTR cambia el nombre de la columna y. Por lo tanto, se necesita un nombre de campo de alias: SELECT CStr ([Field]) como [Field]. Solicitará ayuda a Google :) – mjn

+0

Incluso después del lanzamiento todavía hay un error al abrir el conjunto de resultados - "E_FAIL". No se da otra información. Me encanta Excel como un formato de intercambio de datos: P – mjn

+0

¿Quizás el CSTR falla si el campo ya es una cadena? Intenta lanzar solo aquellas filas que no tienen valor de tipo de cadena en el campo, algo como 'SELECT iif (fieldType ([field]) <> string, CStr ([field]), [field]) FROM'. No sé la sintaxis correcta en la parte superior de mi cabeza, pero entiendes ... – ain

4

CAST es la expresión de SQL Server. utilizar SELECT Field FROM...

en Delphi: ADOQuery.FieldByName('Field').AsString

no puede echarlo a través de instrucción SQL.

cuando se utiliza tipos de datos mixtos:

Leer this from MSDN (Una Precaución sobre tipos de datos mixtos):

ADO must guess at the data type for each column in your Excel worksheet or range. (This is not affected by Excel cell formatting settings.) A serious problem can arise if you have numeric values mixed with text values in the same column. Both the Jet and the ODBC Provider return the data of the majority type, but return NULL (empty) values for the minority data type. If the two types are equally mixed in the column, the provider chooses numeric over text.

tendrá que añadir IMEX=1 en la sección Propiedades extendidas de la cadena de conexión. el campo persistente será de TWideStringField.

La cadena de conexión debe ser algo como esto:

Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\MyFile.xls;Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";...

+0

La aplicación Delphi usa campos persistentes, por lo que el error ocurre al abrir el conjunto de resultados; esto significa que no puedo usar .AsString porque el Open ya falla – mjn

+0

¿falla aunque use una simple selección? es decir: "select * from $ sheet1" (sin fundición)?y qué quiere decir con "campos persistentes"? – kobik

+0

Los "campos persistentes" son como componentes que almacenan propiedades como tipo, tamaño, precisión, título, etc. para cada columna de la tabla. Una simple selección * funcionará. Pero si hay requisitos especiales, estos componentes de campo están ahí y si tienen un tipo que no coincide con el tipo de datos real, el componente Delphi ADO se queja y genera una excepción. – mjn

1

Trate

SELECT IIF([Field] IS NULL, NULL, CSTR([Field])) AS [Field] 
    FROM ...