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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 weboweb
30/05/2005 - 20:27 | Informe spam
Muchas gracias, estaba investiganto tambien usar ADO en vez de ODBC
directamente.
Encontre algo parecido y me funciono.

Si alguien quiere ver un ejemplo por favor avisar que lo pondre aqui.
Respuesta Responder a este mensaje
#3 Emilio
30/05/2005 - 22:16 | Informe spam
:-))

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:
Muchas gracias, estaba investiganto tambien usar ADO en vez de ODBC
directamente.
Encontre algo parecido y me funciono.

Si alguien quiere ver un ejemplo por favor avisar que lo pondre aqui.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida