Comprobar en Access VBA si tenemos una tabla vinculada
Resuelto
artamys
Mensajes publicados
122
Fecha de registro
Estado
Miembro
Última intervención
-
yakov Mensajes publicados 115 Estado Miembro -
yakov Mensajes publicados 115 Estado Miembro -
Hola,
he creado una base Access en multiusuario.
El problema es que he encontrado dificultades debido a las tablas enlazadas. En efecto, el método seek primarykey no funciona para las tablas enlazadas y el método find no funciona para las tablas no enlazadas.
Por lo tanto, me gustaría saber si es posible en VBA probar si una tabla está enlazada o no para integrar esta noción en una base que pueda duplicar indefinidamente en lugar de necesitar cambiar el código al menos dos veces cada modificación.
Gracias.
he creado una base Access en multiusuario.
El problema es que he encontrado dificultades debido a las tablas enlazadas. En efecto, el método seek primarykey no funciona para las tablas enlazadas y el método find no funciona para las tablas no enlazadas.
Por lo tanto, me gustaría saber si es posible en VBA probar si una tabla está enlazada o no para integrar esta noción en una base que pueda duplicar indefinidamente en lugar de necesitar cambiar el código al menos dos veces cada modificación.
Gracias.
Configuración: Windows XP Internet Explorer 6.0
3 respuestas
te entrego aquí el pequeño código que uso para actualizar las tablas relacionadas de mi base de datos según la tienda afectada.
debería ayudarte
en dao es la sintaxis siguiente para saber si una tabla está relacionada.
dim db as dao.database
dim tb as dao.tabledef
set db=opendatabase(.......)
for each tb in db.tabledefs
if tb.attributes and dbattachedtable then
........
End If
Next
BDDClose '
db.Close
Set db = Nothing
Set tb = Nothing
espero que te sirva
debería ayudarte
en dao es la sintaxis siguiente para saber si una tabla está relacionada.
dim db as dao.database
dim tb as dao.tabledef
set db=opendatabase(.......)
for each tb in db.tabledefs
if tb.attributes and dbattachedtable then
........
End If
Next
BDDClose '
db.Close
Set db = Nothing
Set tb = Nothing
espero que te sirva
Gracias a ti, encontré otra solución, pero voy a probar la tuya.
En realidad pasa por una consulta que va a calcular el número de msysobjects. Como en las tablas vinculadas no figuran (son virtuales) si busco una tabla en particular y no está la encuentro y adapto el código en consecuencia.
Adjunto el código.
Gracias a ti.
en mi consulta titulada NatureTableRequete
SELECT Msysobjects.Name, Msysobjects.Name
FROM Msysobjects
WHERE (((Msysobjects.Name)="TB_Projet") AND ((Msysobjects.Type)=1))
ORDER BY Msysobjects.Name;
en mi código :
Dim NatureT As Integer
Dim NatureTable As Integer
NatureT = DCount("*", " NatureTableRequete")
If NatureT = 1 Then NatureTable = 1
If NatureT <> 1 Then NatureTable = 2
Set db = CurrentDb()
Set Base_modifProjet = db.OpenRecordset("TB_DEI")
If NatureTable = 2 Then Base_modifProjet.FindFirst ("NumDEI=" & ListeNumDEI & "")
If NatureTable = 1 Then Base_modifProjet.Index = "primarykey"
If NatureTable = 1 Then Base_modifProjet.Seek "=", ListeNumDEI
En realidad pasa por una consulta que va a calcular el número de msysobjects. Como en las tablas vinculadas no figuran (son virtuales) si busco una tabla en particular y no está la encuentro y adapto el código en consecuencia.
Adjunto el código.
Gracias a ti.
en mi consulta titulada NatureTableRequete
SELECT Msysobjects.Name, Msysobjects.Name
FROM Msysobjects
WHERE (((Msysobjects.Name)="TB_Projet") AND ((Msysobjects.Type)=1))
ORDER BY Msysobjects.Name;
en mi código :
Dim NatureT As Integer
Dim NatureTable As Integer
NatureT = DCount("*", " NatureTableRequete")
If NatureT = 1 Then NatureTable = 1
If NatureT <> 1 Then NatureTable = 2
Set db = CurrentDb()
Set Base_modifProjet = db.OpenRecordset("TB_DEI")
If NatureTable = 2 Then Base_modifProjet.FindFirst ("NumDEI=" & ListeNumDEI & "")
If NatureTable = 1 Then Base_modifProjet.Index = "primarykey"
If NatureTable = 1 Then Base_modifProjet.Seek "=", ListeNumDEI