Leer los nombres de worksheets usando ODBC

30/05/2005 - 16:07 por weboweb | Informe spam
Hola!

Es la primera vez que mando un mensaje a este grupo.
Estoy tratando de leer informacion de archivos excel usando ODBC.
Puedo leer sin problemas en el caso que sepa de antemano el nombre del
"worksheet" (no se como se dice en español). Pero si un archivo tiene
uno o mas worksheets y no se los nombres de antemano, necesito una
forma de obtener la lista de estos nombres.

He intentado usando el siguiente codigo en C que es parte de una
aplicacion MFC mas grande, pero el problema que tengo es que me
devuelve el SQL_NO_DATA ( o sea que no puede leer los nombres de
worksheets). Si alguien tiene alguna idea por favor avisarme.

Por favor noten que no quiero usar Excel ni Excel automation, este
programa sera instalado en computadoras que no tienen Excel.

Gracias!

webOweb

SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
char dsn[] = "Driver={Microsoft Excel Driver
(*.xls)};Dbq=C:\estemp\\Book­­1.xls";
SQLTCHAR outdsn[1024];
SQLSMALLINT outdsnlen;
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,
SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
int rc = SQLDriverConnect(hdbc, NULL, (SQLTCHAR*)dsn,
strlen(dsn),outdsn, sizeof(outdsn), &outdsnlen, SQL_DRIVER_NOPROMPT);
if(rc==SQL_SUCCESS)
{
printf("OUT: %s",outdsn);
SQLAllocHandle(SQL_HANDLE_STMT­­, hdbc,&hstmt);
//rc = SQLTables(hstmt,0,0,0,0,0,0,(S­­QLCHAR*)"SYSTEM
TABLE",SQL_NTS);
rc SQLTables(hstmt,0,0,0,0,0,0,(S­­QLCHAR*)"TABLE",SQL_NTS);
if(rc==SQL_SUCCESS)
{
printf("SQLTables OK");
while(SQLFetch(hstmt)==0) //SQL_NO_DATA retorna esto
{
printf("sheet found",rc);
}
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);



}


SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv
 

Leer las respuestas

#1 Emilio
30/05/2005 - 20:16 | Informe spam
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
Hola !
mira a ver si aquí encuentras lo que necesitas, lo podrías hacer mediante el
ISAM instalable para Excel
http://mvp-access.com/softjaen/arti...tm#Index13

Saludos a desde Huelva
Emilio
miliuco56 ALGARROBA hotmail.com

http://www.mvp-access.com/foro
http://www.mvp-access.com/emilio

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/defaul...newsreglas

escribió en el mensaje
news:
Hola!

Es la primera vez que mando un mensaje a este grupo.
Estoy tratando de leer informacion de archivos excel usando ODBC.
Puedo leer sin problemas en el caso que sepa de antemano el nombre del
"worksheet" (no se como se dice en español). Pero si un archivo tiene
uno o mas worksheets y no se los nombres de antemano, necesito una
forma de obtener la lista de estos nombres.

He intentado usando el siguiente codigo en C que es parte de una
aplicacion MFC mas grande, pero el problema que tengo es que me
devuelve el SQL_NO_DATA ( o sea que no puede leer los nombres de
worksheets). Si alguien tiene alguna idea por favor avisarme.

Por favor noten que no quiero usar Excel ni Excel automation, este
programa sera instalado en computadoras que no tienen Excel.

Gracias!

webOweb

SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
char dsn[] = "Driver={Microsoft Excel Driver
(*.xls)};Dbq=C:\estemp\\Book­­1.xls";
SQLTCHAR outdsn[1024];
SQLSMALLINT outdsnlen;
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,
SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
int rc = SQLDriverConnect(hdbc, NULL, (SQLTCHAR*)dsn,
strlen(dsn),outdsn, sizeof(outdsn), &outdsnlen, SQL_DRIVER_NOPROMPT);
if(rc==SQL_SUCCESS)
{
printf("OUT: %s",outdsn);
SQLAllocHandle(SQL_HANDLE_STMT­­, hdbc,&hstmt);
//rc = SQLTables(hstmt,0,0,0,0,0,0,(S­­QLCHAR*)"SYSTEM
TABLE",SQL_NTS);
rc SQLTables(hstmt,0,0,0,0,0,0,(S­­QLCHAR*)"TABLE",SQL_NTS);
if(rc==SQL_SUCCESS)
{
printf("SQLTables OK");
while(SQLFetch(hstmt)==0) //SQL_NO_DATA retorna esto
{
printf("sheet found",rc);
}
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);



}


SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv

Preguntas similares