Pregunta

Cuando se usa consultas SQL Pass-Thru en MS Access, hay un tiempo de espera predeterminado de 60 segundos, momento en el que se envía una instrucción al servidor remoto para cancelar la solicitud. ¿Hay alguna forma de enviar este comando desde el teclado similar a la operación de acceso "CTRL + Break" de acceso?

¿Fue útil?

Solución

En primer lugar, comprender cómo el control-C cancela la ejecución. Probablemente atrapan esa secuencia clave y hacen algo especial. Sospecho firmemente que las aplicaciones de clientes de Oracle (SQL*Plus et al) llaman a Ocibreak () detrás de escena y pasan al mango al servidor que obtuvieron cuando ejecutaron la consulta con una llamada OCI anterior.

También sospecho que el acceso no está haciendo nada activamente después de 60 segundos; Ese es solo el tiempo de espera que solicita al momento de la consulta de ejecución. Aún más, estoy empezando a preguntarme si el acceso incluso está solicitando ese tiempo de espera; Todo lo que he leído dice que el controlador ODBC no admite un tiempo de espera de la consulta, lo que me hace pensar que es solo un tiempo de espera del lado del cliente, pero estoy divagando ...

Entonces, de vuelta a esta llamada ocibreak (). Aquí están las malas noticias: no creo que ODBC implementa estas llamadas. Para estar 100% seguro, tendría que echar un vistazo al controlador ODBC para las fuentes de Oracle, pero todo lo que he leído indica que la llamada API no está expuesta.

Como referencia, he estado buscando en Google estos términos de búsqueda en combinación con "OBDC":

ORA-01013  (error when a user cancelled an operation, or when an operation times out)
OCIBreak   (OCI function which cancels a pending operation)

--- Editar #1 ---

Como nota al margen, realmente creo que el acceso se está dando por vencido y no envía ningún tipo de comando de cancelación cuando se excede el tiempo de espera de transferencia. Si echas un vistazo a este artículo de KB, El controlador ODBC ni siquiera admite un tiempo de espera de consultas:

PRB: tiempo de espera de conexión y tiempo de consulta no es compatible con el controlador de Microsoft Oracle ODBC y el proveedor de OLE DB

Después de la hora transcurrida, el acceso probablemente simplemente deje de escuchar los resultados. Si le pidiera a Oracle una lista de consultas que aún se están ejecutando, sospecho firmemente que aún vería la suya en la lista.

--- Editar #2 ---

En cuanto a implementar su propia "cancelar", que no es realmente una cancelación, más "mantenga la UI receptiva independientemente del estado de una consulta", la palabra clave aquí será asíncrona. Querrá reescribir su código para ejecutar asíncronamente para que no esté bloqueando la bomba de mensajes para su interfaz de usuario. Comenzaría a buscar en Google para "Acceso de consulta de Async" y vería qué aparece. Surgió un resultado así:

Ejecución de consultas asíncronas en MS Access

así como un punto de partida decente en XtremevBtalk.com:

http://www.xtremevbtalk.com/showthread.php?t=82631

En efecto, en lugar de disparar el código que bloquea la ejecución hasta que ocurra un tiempo de espera o se devuelva un conjunto de resultados, pedirá que el acceso inicie el código detrás de escena. Luego establecerá un evento que dispara cuando algo más ocurre, como dejar que el usuario sepa que ocurrió el tiempo de espera (falla del tiempo de espera), poblando una cuadrícula con resultados (éxito), etc.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top