Access - problema con base de datos access 97

 
Vista:

problema con base de datos access 97

Publicado por soncillo (1 intervención) el 13/04/2005 14:19:18
El problema es el siguiente, aca les dejo uno bien complicado:

Yo abro 1 base de datos(access97) desde un modulo que tiene 2 Tablas, las variables Recorset de dichas tablas son gobales y en el FORM que uso esas tablas hago "Set Data1.recordser = DATA1" por ejemplo para hacignarle a un control Data esa tabla, todo anda muy lindo modifico, agrego, borto, etc.

El codigo para abrir las bases de datos es:

Global Base_general As Database
Global Tabla1 As Recordset
Global Tabla2 As Recordset

Function abrirBase(pathdatabase As String)

Set Base_general = Workspaces(0).OpenDatabase(pathdatabase)
Set Tabla1 = Base_general.OpenRecordset("Tabla")
Set Tabla2 = Base_general.OpenRecordset("Tabla2")
End Function
'---------

Hasta aca todo andaba de marabilla, perooooo al hacer una consulta tengo que crear una base de datos temporal que despues sel almacenara etc etc, pero tengo que crear esa base temporal, leyendo un poco de la ayuda del VB no encuentro dificultades y la creo de la siguiente manera:

Private Sub Guardar_Click()
Dim wrkPredeterminado As Workspace
Dim dbsNueva As Database
Dim CompExis As String

Set wrkPredeterminado = DBEngine.Workspaces(0)

CompExis = App.Path & "\MDB\" & Text1.Text

Set dbsNueva = wrkPredeterminado.CreateDatabase(CompExis, _
dbLangGeneral, dbEncrypt)

dbsNueva.Close
wrkPredeterminado.Close

Call Crear_Tablas(CompExis) ' ACA LLAMO AL SUB QUE SIGUE
End Sub
'-------------------------------
Sub Crear_Tablas(CompExis As String)

Dim tdfNuevo As TableDef
Dim fldBucle As Field
Dim dbsNeptuno As Database

Set wrkPredeterminado = DBEngine.Workspaces(0)
Set dbsNeptuno = wrkPredeterminado.OpenDatabase(CompExis)

Set tdfNuevo = dbsNeptuno.CreateTableDef("Tabla")

With tdfNuevo
.Fields.Append .CreateField("Ncheque", dbText, 15)
'Etc... aca van mas campos pero bue
End With
dbsNeptuno.TableDefs.Append tdfNuevo

Set tdfNuevo = dbsNeptuno.CreateTableDef("Tabla2")
With tdfNuevo
.Fields.Append .CreateField("Fecha", dbText, 10)
'Etc... aca van mas campos pero bue
End With

dbsNeptuno.TableDefs.Append tdfNuevo
dbsNeptuno.Close
'---------------------------------------------------------
Y aca se hace lio, por alguna razon, supongo que tiene que ver con el "Workspaces(0)" pero eso me lo dira alguien q la tenga clara, llamo otro procedimiento igual al primero para abrir esta base que cree y hacer una serie de consultas, antes que digan algo, ovbio que uso variables Database y Recordset diferentes para esta base de datos, pero por alguna razon que desconosco, pierdo la base anterior, osea que los controles DATA y cualquier SUB que utilice la 1ra base de datos que abri deja de funcionar, el error es que ya no esta cargada o que no tiene un valor, no se por que al abrir una base de datos pierdo la otra, esa es mi consulta puntual y cual podria ser la solucion! Ahora bien, perdi la 1ra base de datos pero me quedo abierta la 2da base, esta que recien cree, y si vuelvo abrir la 1ra base de datos entonces si anda... extraño no?

Desde ya que el que me diga le voy a estar hagradecido de por vida
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al abrir múltiples bases de datos y perder referencia a la primera

Publicado por Alejandro (4142 intervenciones) el 31/05/2023 00:40:24
El problema que estás experimentando probablemente se debe al hecho de que estás utilizando una única instancia de la variable de Workspace (`wrkPredeterminado`) para abrir ambas bases de datos. Esto puede causar conflictos y pérdida de referencia a la primera base de datos abierta.

Para solucionar este problema, te sugiero hacer lo siguiente:

1. Utilizar instancias separadas de la variable de Workspace para cada base de datos:
En lugar de utilizar una única variable de Workspace (`wrkPredeterminado`), crea dos variables separadas, una para cada base de datos. Esto ayudará a evitar conflictos y pérdida de referencia.

Por ejemplo:
1
2
3
4
5
6
7
8
9
10
Dim wrkBase1 As Workspace
   Dim wrkBase2 As Workspace
   Dim dbsBase1 As Database
   Dim dbsBase2 As Database
 
   Set wrkBase1 = DBEngine.Workspaces(0)
   Set dbsBase1 = wrkBase1.OpenDatabase("ruta_base1.mdb")
 
   Set wrkBase2 = DBEngine.Workspaces(0)
   Set dbsBase2 = wrkBase2.OpenDatabase("ruta_base2.mdb")

2. Utilizar variables separadas para los objetos de base de datos y recordset:
Además de tener instancias separadas de Workspace, también asegúrate de utilizar variables separadas para los objetos de base de datos y recordset en cada base de datos. Esto garantizará que no se produzcan conflictos entre las bases de datos abiertas.

Por ejemplo:
1
2
3
4
5
6
7
8
9
10
Dim dbsBase1 As Database
   Dim rsTabla1 As Recordset
   Dim dbsBase2 As Database
   Dim rsTabla2 As Recordset
 
   Set dbsBase1 = wrkBase1.OpenDatabase("ruta_base1.mdb")
   Set rsTabla1 = dbsBase1.OpenRecordset("Tabla1")
 
   Set dbsBase2 = wrkBase2.OpenDatabase("ruta_base2.mdb")
   Set rsTabla2 = dbsBase2.OpenRecordset("Tabla2")

Al seguir estos pasos, deberías poder abrir y trabajar con múltiples bases de datos sin perder la referencia a la primera. Asegúrate de adaptar el código a tu estructura y nombres de bases de datos específicos.

Espero que esta solución te ayude a resolver el problema que estás enfrentando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar