Condividi tramite

Errore 3265

Anonimo
2012-06-08T16:10:20+00:00

Salve ragazzi, sto realizzando un'applicazione in Access 2010 divisa in FE e BE. Il BE contiene, oltre a tutte le tabelle dati, anche la tabella con i nomi delle tabelle da linkare. All'apertura della maschera di login dal FE, tramite chiamata a funzione, carico i link. Ho creato un modulo "basGLOBAL" in cui ho inserito il seguente codice:

Public Const strLnkTab As String = "tabLnkTables"

Public Const DB_SERVER As String = "SERVER.accdb"

Public Function getConnection() As String

    getConnection = CurrentProject.Path & "" & DB_SERVER

End Function

Public Function OpenConnection()

    On Error GoTo ERR_LINKED

    Dim strTabName As String

    Dim strPathBE As String

    Dim dbOpenConn As DAO.Database

    Dim rsOpenConn As DAO.Recordset

    strPathBE = getConnection()

    Set dbOpenConn = DBEngine.OpenDatabase(getConnection())

    Set rsOpenConn = dbOpenConn.OpenRecordset(strLnkTab, dbOpenDynaset, dbReadOnly)

    rsOpenConn.MoveFirst

    Do Until rsOpenConn.EOF

        strTabName = rsOpenConn.Fields(0).Value

        CurrentDb.TableDefs.Delete strTabName

        DoCmd.TransferDatabase acLink, "Microsoft Access", strPathBE, acTable, strTabName, strTabName

        rsOpenConn.MoveNext

    Loop

EXIT_HERE:

    On Error Resume Next

    rsOpenConn.Close

    Set rsOpenConn = Nothing

    dbOpenConn.Close

    Set dbOpenConn = Nothing

    Exit Function

ERR_LINKED:

    MsgBox "Errore n° " & Err.Number & ": " & Err.Description, vbExclamation, "Errore di sistema"

    Resume EXIT_HERE

End Function

Poi nell'evento Open della maschera "frmLogin":

Private Sub Form_Open(Cancel As Integer)

    Call OpenConnection

End Sub

Purtroppo non vuol saperne di funzionare. Continua a restituirmi "errore 3265: Elemento non trovato in questo insieme". Ho consultato l'help del programma, controllato nomi di variabili, cercato in rete... ma niente. Sto uscendo pazzo, non so più che pesci pigliare. Spero che qualcuno possa darmi una mano.

Ciao Alberto

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-06-08T17:38:10+00:00

Ciao Alberto,

a prima vista direi che nella tabella tabLnkTables c'è un nome di tabella che non esiste nel database SERVER.accdb.

Comunque per essere sicuro remma o rimuovi momentaneamente la riga  On Error GoTo ERR_LINKED poi guarda su quale riga si interrompe il codice e controlla il contenuto delle variabili.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-06-10T09:59:47+00:00

    Ciao,

    ok, però tieni presente che non è matematicamente sicuro che la funzione CloseConnection venga eseguita, potrebbe verificarsi il caso che manchi la corrente elettrica o che l'utente spenga forzatamente il computer ecc. ecc.

    :-)

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-06-10T08:40:15+00:00

    Ciao Giorgio,

    ti confermo che tutto funziona a meraviglia. Per quanto riguarda altri possibili errori ero comunque dell'idea di farne una gestione ad hoc. Piuttosto pensavo che forse sarebbe opportuno rimuovere i collegamenti alle tabelle alla chiusura dell'applicazione. A tal proposito avevo pensato a qualcosa di simile:

    Public Function CloseConnection()

        Dim strClose As String

        Dim rsCloseConn As DAO.Recordset

        Set rsCloseConn = CurrentDb.OpenRecordset("SELECT MSysObjects.Connect, MSysObjects.Name" & " FROM MSysObjects" & " WHERE (MSysObjects.Connect) Is Not Null")

        If rsCloseConn.EOF Then

            Exit Function

        Else

            Do While Not rsCloseConn.EOF

                strClose = rsCloseConn!Name

                CurrentDb.TableDefs.Delete strClose

                rsCloseConn.MoveNext

            Loop

        End If

    EXIT_HERE:

        On Error Resume Next

        rsCloseConn.Close

        Set rsCloseConn = Nothing

        Exit Function

    ERR_LINKED:

        MsgBox "Errore n° " & Err.Number & ": " & Err.Description, vbExclamation, "Errore di sistema"

        Resume EXIT_HERE

    End Function

    Ciao Alberto.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-06-09T09:11:22+00:00

    Ciao,

    io userei la 2 ripristinando l'On error subito dopo

    On Error Resume Next

    CurrentDb.TableDefs.Delete strTabName

    On Error GoTo ERR_LINKED

    così se ci sono altri broblemi vengono notificati.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-06-09T07:36:19+00:00

    Ciao Giorgio,

    ti ringrazio per la dritta. Nella tabella tabLnkTables non manca alcun nome di tabella, piuttosto il problema nasce da questa riga di codice:

    CurrentDb.TableDefs.Delete strTabName

    poichè (giustamente) non essendoci ancora nessun nome di tabella, non trova nulla da cancellare. Avevo inserito questa riga nel mio codice per eccesso di zelo, in modo da cancellare un eventuale collegamento (se fosse presente) prima di ricrearlo. A questo punto direi che il problema si può risolvere in due modi:

    1. Elimino quella riga di codice ed implemento una nuova funzione che alla chiusura dell'applicazione mi rimuove i collegamenti.
    2. Lascio tutto com'è e vado ad inserire un "On Error Resume Next" prima del ciclo Do.

    Cosa mi consigli?

    La risposta è stata utile?

    0 commenti Nessun commento