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 -
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.
Configuración: Windows XP Internet Explorer 6.0

3 respuestas

  1. yakov Mensajes publicados 115 Estado Miembro 77
     
    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
    0
  2. artamys Mensajes publicados 122 Fecha de registro   Estado Miembro Última intervención   7
     
    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
    0
  3. yakov Mensajes publicados 115 Estado Miembro 77
     
    bien... mais plus compliqué quand même....
    0