| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | |  | | |
 | 
17-07-2008, 21:47:38
| | Buena Participación en el Foro | | Registrado: mar 2007 Posts: 91
| | Procedimientos no funcionan si Access está cerrado Hola
Sucede que tengo dos botones: Importar y Exportar, procedimientos bastante largos porque no solo Importa y Exporta, respectivamente, sino, realizan otras funciones antes y después.
Estos procedimientos los he probado paso a paso y funcionan perfectamente. Sin embargo, sucede que, cuando lo pruebo con el programa en ejecución y tengo abierta previamente la base de datos, los procedimientos funcionan, PERO… si la base de datos está cerrada (que es como realmente debe estar), entonces los procedimientos no funcionan, o sea, no se exporta el fichero, o si se exporta, lo hace mal, o no se importa.
Realmente, no sé qué tiene que ver que la base de datos esté o no abierta si existe una conexión entre ella y el programa.
¿Alguien puede darme alguna pista? Gracias.
__________________
Saludos
Desde La Habana
Cuba
| 
17-07-2008, 23:22:16
|  | Moderador | | Registrado: nov 2007 Ubicación: Argentina Posts: 408
| | Re: Procedimientos no funcionan si Access está cerrado Hola,justamente porque la base de datos esta conectada,no se puede realizar lo que vos queres,cuando abris la base se genera un archivo de bloqueo en la carpeta de la base...es como para bloquear las operaciones de escritura sobre la misma..proba desconectarte y realizar el procedimiento y despues conectarte devuelta...
saludos.
__________________ Todos somos ignorantes; lo que pasa es que no todos ignoramos las mismas cosas - Albert Einstein | 
18-07-2008, 14:41:03
| | Buena Participación en el Foro | | Registrado: mar 2007 Posts: 91
| | Re: Procedimientos no funcionan si Access está cerrado Hola
Gracias por la respuesta, pero justamente ahora no entiendo absolutamente nada.
¿Cómo voy a desconectarme si necesito esa conexión para realizar algunas operaciones con el método ‘Execute’ como conexión con ADO a través de su objeto ‘Connection’ (cnn). Por ejemplo, en ese procedimiento hay operaciones de borrado de registros a través de:
cnn.Execute "Delete…
ó, la misma exportación:
cnn.Execute "SELECT * INTO…
¿Cómo logro esto desconectándome?
__________________
Saludos
Desde La Habana
Cuba
| 
18-07-2008, 16:15:45
|  | Administrador | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.490
| | Re: Procedimientos no funcionan si Access está cerrado Amigo Medardo: Cuando tratas de realizar tareas con una base de datos puedes emplear funciones que actuarán mediante resordsets que tengas lógicamente abiertos, o directamente sobre la base de datos; funciones que exigen que la base esté cerrada. Tal es el caso de las Copias, por ejemplo.
Como no has facilitado el código que está creándote el conflicto, nadie puede informarte con garantía sobre si ese código exige cerrar previamente la conexión, o por el contrario es indispensable que la conexión esté establecida. Creo que debes poner las líneas de código que te crean el error y espero que podamos ayudarte entre todos. | 
18-07-2008, 16:22:24
|  | Moderador | | Registrado: nov 2007 Ubicación: Argentina Posts: 408
| | Re: Procedimientos no funcionan si Access está cerrado ahora lo leo un poco mejor al mensaje y entiendo...si esta abierta la base todos esos procedimientos los haces sin problemas,pero vos lo queres hacer mientras esta cerrada...me gustaria ver o comentame que es lo que hace el proceso de importar y exportar...
saludos.
__________________ Todos somos ignorantes; lo que pasa es que no todos ignoramos las mismas cosas - Albert Einstein | 
18-07-2008, 18:26:19
| | Buena Participación en el Foro | | Registrado: mar 2007 Posts: 91
| | Re: Procedimientos no funcionan si Access está cerrado Bueno, ante todo, gracias Movilla y Seba.
El procedimiento es bastante largo porque realiza algunas cosas antes y después de realizar la exportación, al igual que la importación. No obstante, las partes que más me interesan y que usan la conexión, son las siguientes:
Eliminar registros de una tabla:
cnn.Execute "Delete * From [" & Provin & "] Where Prov <> '" & Provin & "'"
Exportar:
cnn.Execute "SELECT * INTO [TEXT;DATABASE=" & App.Path & "].[" & ProvSel & "] FROM [" & Provin & "]"
Como ven, tengo que utilizar el objeto de conexión (cnn) para realizar estas operaciones.
No sé si con eso aclaro.
__________________
Saludos
Desde La Habana
Cuba
| 
18-07-2008, 22:15:59
|  | Administrador | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.490
| | Re: Procedimientos no funcionan si Access está cerrado Para ejecutar ambas instrucciones SQL tienes que tener, lógicamente, abierta LA CONEXIÓN cnn. PERO debes tener CERRADOS los recordsets referidos a las tablas afectadas por los Execute (Provin y no sé si alguna más...)
También es obligado que la base de datos no esté abierta por otra aplicación externa, por ejemplo Access. | 
21-07-2008, 14:16:47
| | Buena Participación en el Foro | | Registrado: mar 2007 Posts: 91
| | Re: Procedimientos no funcionan si Access está cerrado Gracias Movilla por la respuesta, pero parece estoy “tupido”, no entiendo.
En el momento de realizar alguna operación con la conexión, no tengo abierto ningún recordset afectado por éste.
Resulta que tengo un formulario para exportar e importar. Al abrir este formulario no tengo necesidad de abrir ningún recordset, ni mediante el procedimiento.
Voy a exponer algunas partes más del código que quizás tenga que ver:
Primero:
Para poder ejecutar acciones de Access desde Visual Basic, hice lo siguiente:
En las referencias agregué:
“Microsoft Access 10.0 Object Library”
Antes de comenzar este hilo no tenía esto, pero ahora, en un módulo, declaré la siguiente variable:
Public appAccess As New Access.Application
Acciones que realizo con código VBA:
'impedir mensaje propio de Access al eliminarse registros
appAccess.DoCmd.SetWarnings False
'copiar los registros de una tabla hacia otra
appAccess.DoCmd.CopyObject , "Planes " & ElementoSeleccionado & "", acTable, "tabPlanes"
‘importar
appAccess.DoCmd.TransferText acImportDelim, , "TabCapturaVinculada", App.Path & "\" & ProvSel, True, ""
'ejecutar consulta de datos anexados
appAccess.CurrentDb.Execute "ConsultaDatosAnexados"
'eliminar tabla
appAccess.DoCmd.DeleteObject acTable, NombreTabla
Lo que he mostrado hasta ahora, son las acciones más importantes en el procedimiento; el resto son validaciones y verificaciones.
Si hago referencia al código a través de la variable ‘appAccess’, se muestra el “Error 2486: No se puede ejecutar esta acción ahora.”, esté abierta o cerrada la base de datos.
Si no utilizo esa variable y mantengo la base de datos abierta, se ejecuta la acción sin error, y si está cerrada, no da error, pero no hace nada.
Casi siempre, la primera vez que trato de ejecutar el programa, se bloquea, a partir de la segunda vez, no.
Ojalá haya aportado algo más en el esclarecimiento. Lo cierto es que estoy “contra reloj” con este programa. Creo que nunca había sentido tanta presión por la importancia que reviste en estos momentos. Si no lo termino antes del próximo día 7, será el mayor “chasco” de mi vida.
__________________
Saludos
Desde La Habana
Cuba
| 
21-07-2008, 15:52:03
|  | Administrador | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.490
| | Re: Procedimientos no funcionan si Access está cerrado Ahora sí que me has dejado chafado totalmente... Resulta que nos has estado orientando hacia funciones SQL en Visual, y ahora veo que estás ejecutando comandos de Access... Yo, al menos, no te sigo; no lo entiendo... | 
22-07-2008, 13:55:23
| | Buena Participación en el Foro | | Registrado: mar 2007 Posts: 91
| | Re: Procedimientos no funcionan si Access está cerrado Bueno, no tengo ninguna objeción en exponer todo el código, pero les digo, es muy largo. De todas formas, veré si puedo ser más claro.
Se trata de un procedimiento que hace referencia a una lista de municipios en un ListBox. Al seleccionar un elemento (un municipio) de la lista (ListBox) y hacer clic en un botón, se exporta la tabla correspondiente a ese elemento seleccionado. Lo mismo ocurre con la importación, pero solo voy a exponer el procedimiento de exportación, obviando algunos pasos de validaciones que –supongo- no tienen significación para el caso. Obviaré también las declaraciones de variables para ahorrar espacio y concentrarnos en lo principal, solo uno:
En un módulo para variables públicas:
Public appAccess As New Access.Application
Sub Exportar()
On Error Resume Next
Provin = "" 'nombre del elemento seleccionado
ProvSel = "" 'nombre del elemento seleccionado con extensión .txt
'inicializar a cero (0) la cantidad de elementos seleccionadas
CantProvSel = 0
CantElemSeleccionados 'procedimiento que verifica la cantidad de elementos seleccionados en el ListBox
For i = 0 To ListTerritorio.ListCount - 1
'para los elementos seleccionados
If ListTerritorio.Selected(i) Then
'almacenar el nombre del elemento seleccionado
Provin = ListTerritorio.List(ListTerritorio.ListIndex)
'almacenar nombre del fichero que se importará
'con el mismo nombre del elemento seleccionado
'más la extensión '.txt'
ProvSel = Provin + ".txt"
'comprobar si el elemento a importar existe en
'la carpeta actual
ValProv = Dir(App.Path & "\" & ProvSel)
cnn.Execute "Delete * From TabCaptura Where Mcpio = '" & Provin & "'"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.TransferText acImportDelim, , "TabCapturaVinculada", App.Path & "\" & ProvSel, True, ""
'consulta de datos anexados
appAccess.CurrentDb.Execute "ConsultaDatosAnexados"
NombreTab = "TabCaptura"
NombreArch = "TabCaptura.txt"
Valor = Dir(App.Path & "\" & NombreArch)
If Valor <> "" Then
'elimino el archivo
Kill App.Path & "\" & Valor
End If
'exportar la tabla TabCaptura
cnn.Execute "SELECT * INTO [TEXT;DATABASE=" & App.Path & "].[" & NombreArch & "] FROM [" & NombreTab & "]"
'eliminar todos sus registros
cnn.Execute "Delete * From TabCaptura"
'procedimiento para modificar la clave principal
Modificar
'importamos la tabla
appAccess.DoCmd.TransferText acImportDelim, , "tabCaptura", App.Path & "\TabCaptura.txt", True, ""
'elimino el archivo
Kill App.Path & "\" & NombreArch
Next
End Sub
Estos son las principales acciones que realiza este procedimiento; el resto, repito, son validaciones o verificaciones.
__________________
Saludos
Desde La Habana
Cuba
| | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | La franja horaria es GMT. Ahora son las 05:31:26.
Powered by vBulletin® Version 3.6.8 Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design
|  |