La Web del Programador: Comunidad de Programadores
 
    Pregunta:  3487 - CONEXIÓN VÍA OLE DESDE ORACLE CON MICROSOFT OFFICE
Autor:  Diego Cabero Lorenzana
Tengo un problema para cerrar el Excel desde el Developer Forms, ya que consigo trabajar con él, pero a la hora de limpiar los handles de los objetos creados para trabajar con el Excel (RELEASE) no me destruye el proceso, y cada vez que abro el Excel desde el Developer Forms y lo cierro desde el mismo Excel me queda el proceso en memoria. Utilizo el Windows NT y el Forms 6.0i.
Si alguien sabe como poder "matar" el proceso desde el Developer si hace el favor que me indique los pasos. Ahí va la forma que utilizo para abrir y cerrar el Excel:

application := OLE2.CREATE_OBJ(´Excel.Application´);
OLE2.SET_PROPERTY(application,´Visible´,´True´);

workbooks := OLE2.GET_OBJ_PROPERTY(application,´Workbooks´);

MY_ARGLIST := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(MY_ARGLIST,archivo);
workbook := OLE2.INVOKE_OBJ(workbooks,´Open´,MY_ARGLIST);
OLE2.DESTROY_ARGLIST(MY_ARGLIST);

worksheets := OLE2.GET_OBJ_PROPERTY(workbook,´Worksheets´);

MY_ARGLIST := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(MY_ARGLIST,1);
worksheet := OLE2.GET_OBJ_PROPERTY(worksheets,´Item´,MY_ARGLIST);
OLE2.DESTROY_ARGLIST(MY_ARGLIST);

indice := 1;
MY_ARGLIST := OLE2.CREATE_ARGLIST;
OLE2.ADD_ARG(MY_ARGLIST,1);
OLE2.ADD_ARG(MY_ARGLIST,1);
cell := OLE2.GET_OBJ_PROPERTY(worksheet,´Cells´,MY_ARGLIST);
OLE2.DESTROY_ARGLIST(MY_ARGLIST);
OLE2.SET_PROPERTY(cell,´Value´,"Hola mundo");
indice := indice + 1;

OLE2.RELEASE_OBJ(cell);
OLE2.RELEASE_OBJ(

  Respuesta:  Alejandro Vallecillo Rodriguez
Amigo listero Diego.

Trabajo en OLE con objetos COM (entre otras cosas) hace un tiempo, la instancia del objeto te queda pegada porque tienes que tratar que la destruya el mismo form que la define esto es:

El las variable locales del form tienes que definir el objeto hamdle y no tendras problemas con el release_obj.

Si tienes más dudas al respecto, quedo a tu dispocición en lo que pueda ayudarte.