Errore Access: il database include già un oggetto denominato 'tabella'

di Anonimizzato23179 il
9 risposte
Buonasera
mi sono appena iscritto a questo forum, premetto che sono un autoditatta, ho un problema che non riesco a risolvere:
ho creato un programma di creazione fatture, con tabelle collegate in un un'altro file, quindi un file fe e be, siccome devo lavorare su pc diversi ho creato una macro che all'apertura verifica il percorso e mi aggiorna le tabelle.
Per farlo funzionare ho creato una tabella nel front end con tutti i nomi delle tabelle collegate, tutto funzionava correttamente, all'improvviso mi è sparita la tabella creata nel fe, se provo a ricrearla con lo stesso nome ricevo un messaggio di errore, come è riportato nel titolo.
Utilizzo access 2016.
Ho verificato un pò da per tutto ma non riesco a capire dove è andata a finire.
Grazie per l'aiuto

9 Risposte

  • Vai nelle proprietà degli oggetti con right click sulla navigationbar e seleziona visualizza oggetti nascosti... sono quasi certo che hai impostato il flag Nascosto sulla tabella... a quel punto seleziona l'oggetto che apparirà in semitrasparenza e con il rigbtclick accedi alla sue proprietà... togli il flag.
  • Grazie della risposta
    lo avevo già verificato ma non esiste.
    Sono andato anche in (opzione di spostamento)
  • Hai una sub oppure una funzione o un modulo che ha quel nome... peraltro riservato...?
  • In aggiunta a quanto già espresso, se può essere utile, indico una scaletta delle operazioni da condurre:
    - effettuare una compilazione del codice ed una compattazione del FE e BE (in modo da controllare che i db non siano corrotti)
    https://social.msdn.microsoft.com/Forums/office/en-US/0ae36cd3-3f91-4c13-b219-daae0a933b9d/table-already-exists-but-it-not-in-access-database?forum=accessdev
    - verificare che vengano mostrati tutti gli oggetti nascosti
    https://www.techonthenet.com/access/database/view_hiddentbls2007.php
    - accertare la presenza della tabella (qui di seguito si trova del codice pronto a ciò):
    https://stackoverflow.com/questions/3350645/how-to-check-if-a-table-exists-in-ms-access-for-vb-macros
    https://stackoverflow.com/questions/2985513/check-if-access-table-exists
    - controllare di non avere due istanze sul pc che puntano al medesimo database
    https://answers.microsoft.com/en-us/msoffice/forum/msoffice_access-mso_winother-mso_2013_release/in-ms-access-when-i-choose-database-documentor-i/4ccfe176-a3fd-4f96-b301-85cca852b510?auth=1
    - esaminare di non impiegare tabelle Temporanee che possano fornire la erronea presenza dell'oggetto
    https://stackoverflow.com/questions/18321245/temporary-table-in-sql-server-causing-there-is-already-an-object-named-error
    - ricercare il termine "Tabella" all'interno del codice e degli oggetti creati
    https://stackoverflow.com/questions/1093475/search-for-field-references-within-a-microsoft-access-application
    - rinominare la table denominata "Tabella" in quanto "Table" è una parola riservata che corrisponde a medesimo termine nella conversione dei nomi in italiano
    https://support.office.com/en-us/article/Access-2007-reserved-words-and-symbols-e33eb3a9-8baa-4335-9f57-da237c63eabe
  • Grazie a tutti dell'aiuto
    comunque lo risoltro creando una tabella salvaldola in modo diverso
  • Magari fornire qualche precisazione in più, su come hai risolto, potrebbe essere utile ad un futuro lettore.
  • vito1976 ha scritto:


    Grazie a tutti dell'aiuto
    comunque lo risoltro creando una tabella salvaldola in modo diverso
    In sostanza non hai risolto, ma ByPassato...
    Personalmente avrei provato ad IMPORTARE tutto in un Nuovo DB, con il Wizzard avresti visto gli Oggetti presenti e ti saresti liberato del problema.

    Fai in ogni caso attenzione al NOME che attribuisci agli Oggetti, se sono Parole Riservate il sistema può fare Brutti scherzi.
  • Come avevo già scritto il problema non lo risolto lo solo bypassato.
    Sinceremante cerco un comando che automaticamente mi aggiornasse le tabelle collegate ed ho trovato il seguente:

    Public Const fForm = "Forms"
    Public Const fReport = "Reports"
    Public Const fMacro = "Scripts"
    Public Const fModulo = "Modules"
    Public Const fTabella = "Tables"
    Public Const fQuery = "Queries"

    Private Const cLnkTbl As String = "_LinkedTables1"

    Public Function LinkTbl() As Boolean
    On Error GoTo Err_LinkTbl
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim dbCurr As DAO.Database
    Dim S As String
    LinkTbl = False
    Set dbCurr = CurrentDb
    strSQL = cLnkTbl
    dbCurr.TableDefs.Refresh
    nomefileini = CurrentProject.Path & "\nometabella_Tabelle.accdb"
    percorso = ";DATABASE=" & nomefileini
    Dim Connessione As String
    Dim Tabella As TableDef
    Connessione = CurrentDb.TableDefs("Acconti").Connect
    If Connessione = percorso Then
    Else

    Set rs = CurrentDb.OpenRecordset(strSQL)
    rs.MoveFirst
    Do Until rs.EOF
    S = rs.Fields(0).Value
    If Esiste_Oggetto(S, fTabella) Then _
    CurrentDb.TableDefs.Delete S
    DoCmd.TransferDatabase acLink, "Microsoft Access", _
    nomefileini, acTable, S, S
    rs.MoveNext
    Loop
    DoCmd.Quit
    End If
    LinkTbl = True
    Exit_Here:
    rs.Close
    Set rs = Nothing
    Exit Function
    Err_LinkTbl:
    LinkTbl = False
    End Function


    Public Function Esiste_Oggetto(ByVal Nome_Ogg As String, _
    Typ_Ogg As String, Optional ByVal Nome_Dbs As String = "") As Boolean

    Dim dbs As Database
    Dim tdf As TableDef
    Dim qdf As QueryDef
    Dim X, num_ogg As Integer
    If Nome_Dbs = "" Then
    Set dbs = CurrentDb
    Else
    Set dbs = OpenDatabase("nometabella.accdb")
    End If
    Select Case Typ_Ogg
    Case fTabella
    For Each tdf In dbs.TableDefs
    If tdf.Name = Nome_Ogg Then
    Esiste_Oggetto = True
    dbs.Close
    Set dbs = Nothing
    Exit Function
    End If
    Next tdf
    Case fQuery
    For Each qdf In dbs.QueryDefs
    If qdf.Name = Nome_Ogg Then
    Esiste_Oggetto = True
    dbs.Close
    Set dbs = Nothing
    Exit Function
    End If
    Next qdf
    Case fForm, fModulo, fMacro, fReport
    num_ogg = dbs.Containers(Typ_Ogg).Documents.Count
    For X = 0 To num_ogg - 1
    If dbs.Containers(Typ_Ogg).Documents(X).Name = Nome_Ogg Then
    Esiste_Oggetto = True
    dbs.Close
    Set dbs = Nothing
    Exit Function
    End If
    Next
    End Select
    Esci:
    Esiste_Oggetto = False
    dbs.Close
    Set dbs = Nothing
    End Function

    Inizialmete funzionava bene, nel momento in cui gli ho modificato il nome del file e non l'ho modificato all'interno della funzione mi è sparita la tabella "_LinkedTables" e non è stato più possibile inserirla, quindi ho corretto la funzione e creato una nuova tabella "_LinkedTables1"
  • Chissà dove lo hai trovato, mi pare di conoscerlo..., invece di riportare il codice, inserisci il Link.
    Usa i TAG CODE altrimenti non si legge.
Devi accedere o registrarti per scrivere nel forum
9 risposte