 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Mar 14 Jun, 2005 10:48 pm Asunto: Componentes Office_2k |
|
|
Buenas, necesito vuestra ayuda para solucionar un problema que tengo desde hace tiempo, ya puse varias consultas en el foro pero no recibí ninguna respuesta. A ver, como lo explico, me pasan unos datos en un Hoja de Excel y necesito importarlos a una tabla de Access.
A la base de datos me conecto mediante ADO, los componentes que utilizo (ADOQuery, ADOConnection) los tengo en un datamodule. La cuestión es que no consigo exportar los datos, probé automatizando excel, pero no lo conseguí. Creé una macro en la base de datos que servía para importar esos datos pero no consigo invocarla de ningún modo. Cuando intento automatizar Access e intento abrir la base de datos que el usuario ha seleccionado, me sale un error al utilizar el método Open:
| Código: |
Variant AccessApp = CreateOleObject("Access.Application");
AccessApp.GetActiveObject("Access.Application");
AccessApp.OlePropertySet("Visible", true);
AccessApp.OleFunction("Open", nombreBD);
|
Se abre Access pero cuando llega al método Open me sale un error :
"EOleSysError: Nombre Desconocido".
Con lo cual ni siquiera logro acceder a la base de datos, ¿cómo debería hacerlo?
Por todo ello empecé a pensar en utilizar los componentes Office_2k, donde aparecen "AllMacros", "AllModules" etc etc, pero no sé utilizarlos, no encuentro información por ningún sitio, y además en cuanto coloco uno de esos componentes en mi programa e intento compilar me encuentro con lo siguiente:
[C++ Error] Datamodule.h(55): E2015 Ambiguity between 'Error' and 'Dao_2k::Error'
Y tampoco sé como se puede solucionar esto, el error viene porque existe ambigüedad entre cosas definidas en ADODB.hpp y lo que define la directiva: #pragma link "Access_2K_SRVR"
Podeis explicarme algo de todo esto??, me podeis indicar algún modo de exportar los datos de excel a Access??, sea como sea, por favor necesito solucionar esto para poder entregar mi proyecto final de carrera a tiempo.
Muchas gracias a todos...  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 15 Jun, 2005 9:59 am Asunto: |
|
|
A ver si te sirve este pequeño ejemplo:
| Código: | Variant AccessApp = CreateOleObject("Access.Application");
AccessApp.GetActiveObject("Access.Application");
AccessApp.OlePropertySet("Visible", true);
// Quitamos las preguntas sobre seguridad
const int msoAutomationSecurityLow = 1;
AccessApp.OlePropertySet("AutomationSecurity", msoAutomationSecurityLow);
// Abrimos la base de datos
WideString nombreBD = "D:\\datos\\bd1.mdb";
AccessApp.OleProcedure("OpenCurrentDatabase", nombreBD);
// Ejecutamos el siguiente metodo de ejemplo contenido en un modulo:
// Sub MostrarTexto(texto As String)
// MsgBox texto
// End Sub
AccessApp.OleFunction("Run", "MostrarTexto", "texto de prueba");
AccessApp.OleProcedure("CloseCurrentDatabase");
AccessApp.OleProcedure("Quit"); |
|
|
| Volver arriba |
|
 |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Mie 15 Jun, 2005 6:34 pm Asunto: |
|
|
Vale _Leo, eres un as!!, he conseguido hacer lo que quería, aunque he tenido que quitar el trozo de:
| Código: | // Quitamos las preguntas sobre seguridad
const int msoAutomationSecurityLow = 1;
AccessApp.OlePropertySet("AutomationSecurity", msoAutomationSecurityLow);
|
Ya que con eso me sale el mismo error que con el método Open: "Nombre desconocido".
Pero no importa porque no aparece ninguna pregunta de seguridad.
Y la cuestión es que ahora ya no me parece tan difícil, pero me había obcecado en seguir caminos oscuros....
Muchas muchas gracias.  |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Mie 24 Sep, 2014 6:12 am Asunto: |
|
|
El Access se cierra...
| Código: |
Variant AccessApp = Variant::CreateObject("Access.Application");
AccessApp.GetActiveObject("Access.Application");
AccessApp.OlePropertySet("Visible", true);
// Quitamos las preguntas sobre seguridad
const int msoAutomationSecurityLow = 1;
AccessApp.OlePropertySet("AutomationSecurity", msoAutomationSecurityLow);
// Abrimos la base de datos
WideString nombreBD = ExtractFilePath(Application->ExeName)+"BD.mdb";
//AccessApp.OleProcedure("OpenCurrentDatabase", nombreBD);
AccessApp.OleFunction("OpenCurrentDatabase", nombreBD, false, "mypassword");
AccessApp.OleProcedure("CloseCurrentDatabase");
AccessApp.OleProcedure("Quit");
AccessApp = Unassigned;
|
¿cómo puedo hacer para que el Access se mantiene abierto?
Gracias! |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|