PDA

Ver la Versión Completa : Función convert() y substring() dentro de un ADOQuery


marcocd
27-04-2018, 21:35:47
buenas tardes. el problema que tengo es con el componente ADOQuery en delphi.
necesito crear una consulta sql utilizando el componente adoquery, pero al compilar mi programa me marca error en la función convert() y en la funcion substring(), la consulta es la siguiente:

SELECT 'S00'+CONVERT(CHAR,CONVERT(INT,SUBSTRING([Clave_Libro],2,6))-2) AS [Clave del Libro]
FROM TABLA

el campo [Clave_Libro] esta definido en la tabla como varchar de 6, lo que deseo hacer es cambiar el valor de la [Clave_Libro] a menos 2. por ejemplo:

si en la tabla en el campo [Clave_Libro] tengo el valor S00425, el resultado de mi consulta quiero que se visualice S00423, esta operacion quiero que la haga para todos los datos de este campo.

si esta consulta la ejecuto directamente en sql server, meda correctamente los resultados que deseo, pero al poner la consulta sql dentro de un componente adoquery en delphi me marca error al compila mi aplicación.

espero que me puedan ayudar a resolver este error, o como lo aria para obtener estos resultados.
gracias, espero que haya una solución a mi problema, me urge.

orodriguezca
27-04-2018, 22:16:58
Y el error de compilación es ???. y en que línea del código fuente???

marcocd
27-04-2018, 22:32:26
el error se origina cuando compilo mi aplicación, con el siguiente error: la función convert no esta definida en la expresión, esta funcion la pongo en una consulta sql, utilizando el componente adoquery en delphi

ecfisa
27-04-2018, 22:44:36
Hola.

Aunque por la función CONVERT pareciera que se trata de MS-SQL Server, ¿ Podrías confirmar que DBMS estas usando ?

Por favor no utilices el foro Trucos para publicar tus consultas, este está para presentar soluciones novedosas o interesantes. Si no estas seguro donde ubicarlo usa siempre el foro Varios, ya lo moví a este.

Saludos y gracias por tu colaboración :)

orodriguezca
27-04-2018, 23:02:58
error: la función convert no esta definida en la expresión, esta funcion la pongo en una consulta sql, utilizando el componente adoquery en delphi

Es muy extraño. Ese mensaje de error lo arroja MSACCESS y solo cuando se intenta ejecutar la consulta, no en tiempo de compilación. Entiendo, por lo que comentas, que tu base de datos es SQL SERVER, por tanto sugiero que verifiques la cadena de conexión a la base de datos; quizás estás apuntando a MSACCESS en lugar de SQL SERVER.

De otra parte sería bueno que nos mostrarás algo de tu código y así no jugamos al adivino.

Casimiro Notevi
28-04-2018, 01:06:50
Además de la recomendaciones aportadas por los compañeros, no olvides tampoco poner el código fuente siempre entre sus etiquetas, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

marcocd
28-04-2018, 01:09:23
una disculpa, me falto aclarar que la consulta la estoy efectuando sobro los datos de un archivo de excel, es decir, utilizo el componente adoquery para conectarme con el archivo de excel y utilizo el siguiente codigo para conectarme con el archivo :

'Provider=Microsoft.ACE.OLEDB.12.0;' +
'Data Source='+archivo+';' +
'Extended Properties="Excel 12.0"';

y despues ya ya escribo la consulta utilizado el componente adoquery

orodriguezca
28-04-2018, 15:08:41
una disculpa, me falto aclarar que la consulta la estoy efectuando sobro los datos de un archivo de excel, es decir, utilizo el componente adoquery para conectarme con el archivo de excel y utilizo el siguiente codigo para conectarme con el archivo :

'Provider=Microsoft.ACE.OLEDB.12.0;' +
'Data Source='+archivo+';' +
'Extended Properties="Excel 12.0"';

y despues ya ya escribo la consulta utilizado el componente adoquery

Efectivamente, esa es una conexión al motor de base de datos "Microsoft ACE" (reemplazo del motor JET), que permite manipular bases de datos de escritorio tales como ACCESS y archivos de formato tabular como Excel. En este motor, que yo sepa, no están incorporadas funciones como Convert y SubString. Una lista de las funciones soportadas por el motor ACE pueden ser consultadas aquí (https://support.office.com/en-us/article/access-functions-by-category-b8b136c3-2716-4d39-94a2-658ce330ed83?ui=en-US&rs=en-US&ad=US).

Por el contrario SQL SERVER si incorpora las funciones Convert y SubString y por eso te funciona correctamente la consulta cuando la ejecutas directamente en SQL SERVER.

Neftali [Germán.Estévez]
30-04-2018, 10:09:08
SELECT 'S00'+CONVERT(CHAR,CONVERT(INT,SUBSTRING([Clave_Libro],2,6))-2) AS [Clave del Libro]
FROM TABLA



¿Puedes poner el código exacto que estás utilizando en Delphi?
Que no sea que las comillas estén mal y te esté dando un error referente a Delphi y no a la Base de Datos.