Problema limite numero tabelle collegate da BE a FE

di il
20 risposte

Problema limite numero tabelle collegate da BE a FE

Salve a tutti, implementando un applicativo con ulteriori tabelle, ho notato che mi segnala errore su tabelle presenti nel BE ma che nel FE non riesce a collegare...contando il numero di tabelle che riesce a collegare, me ne risultano 50, è una coincidenza o effettivamente il limite è di 50 tabelle collegabili?

EDIT:
Se le collego in maniera manuale vengono tutte importate senza problemi...il problema è dovuto ad altro? Eppure i nomi tabella sono corretti...

20 Risposte

  • Re: Problema limite numero tabelle collegate da BE a FE

    Non ho trovato un dato esatto ufficiale, ma languida dice che supporta 1048 tabelle aperte invlude le linked table...
    Di fatto non è certamente 50 il limite.

    Come effettui la routine di linked...?
  • Re: Problema limite numero tabelle collegate da BE a FE

    @Alex ha scritto:


    Non ho trovato un dato esatto ufficiale, ma languida dice che supporta 1048 tabelle aperte invlude le linked table...
    Di fatto non è certamente 50 il limite.

    Come effettui la routine di linked...?
    Ciao Alex, grazie per la risposta.
    Per linkare le tabelle, utilizzo una tabella cui contiene tutti i nomi tabelle e tramite una routine vado ad individuare il BE per poi eseguire il loop di collegamento, finora mai avuto problemi...chiudendo il FE un'altra routine va ad eliminare tutte le tabelle linkate
    
    Public Const fTabella = "Tables"
    Private Const cLnkTbl As String = "TTabelleCollegate"
    
    Public Function LinkTbl() As Boolean
    Dim TLink As String
    Dim LinkBE As String
    Dim strPercorso As String
    Dim db As database
    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
    Set rs = CurrentDb.OpenRecordset(strSQL)
    strPercorso = CurrentProject.Path & "\"
    LinkBE = strPercorso & "FE.accdb"
    Set db = OpenDatabase(LinkBE, False, False, "MS Access;PWD=password")
    rs.MoveFirst
    
    Do Until rs.EOF
    S = rs.Fields(0).Value
    
    DoCmd.TransferDatabase acLink, "Microsoft Access", _
    LinkBE, acTable, S, S
    rs.MoveNext
    Loop
    LinkTbl = True
    Exit_Here:
    
    rs.Close
    Set rs = Nothing
    Exit Function
    
    Err_LinkTbl:
        LinkTbl = False
        MsgBox "Impossibile connettersi al Server"
    Resume Exit_Here
    
    LblErr:
    If Err.Number = "0" Then Resume Next
    If Err.Number = "20" Then Resume Next
    If Err.Number <> "0" Then
        MsgBox Err.Number & " " & Err.Description
    End If
  • Re: Problema limite numero tabelle collegate da BE a FE

    Io uso un metodo diverso... lo avevo pubblicato per intero su MD ma non c'è più
    Ho riscritto a braccio il codice... ma è sostanzialmente corretto.
    Innanzitutto spero che da qualche parte alla chiusura ci sia la Routine che le cancella... in ogni caso, ho inserito il controllo nel codice sotto:
    
    Function RELINK()
    Dim strPathwithPWD As String
    Dim rs As DAO.Recordset
    
    Set rs= DbEngine(0)(0).OpenRecordset(strSQL) ' elenco tabelle da collegare
    If Not rs.BOF AND rs.EOF Then
        Do Until rs.Eof
            If TableExist(DBEngine(0)(0),rs.Fields(0).Value) Then
    	    DBEngine(0)(0).TableDefs.Delete rs.Fields(0).Value
            end if
            Set tdf = DbEngine(0)(0).CreateTableDef(rs.Fields(0).Value)
    	
            With tdf
                .Connect = ";DATABASE=" & strPathwithPWD
                .SourceTableName = rs.Fields(0).Value
            End With
            DbEngine(0)(0).TableDefs.Append tdf
            rs.Movenext
        Loop
    End if
    End Function
    
    Public Function TableExist(mDB As DAO.Database, NomeTabella As String) As Boolean
        On Error Resume Next
        Dim varName As Variant
        varName = mDB.TableDefs(NomeTabella).Name
        TableExist = Err.Number = 0
    End Function
    
    Manca la parte di gestione errori in caso di mancanza del BE o del Server o altre anomalie che condizionano il risultato... ma prova, poi la aggiusti.
  • Re: Problema limite numero tabelle collegate da BE a FE

    Alex ti ringrazio per il tuo prezioso aiuto, purtroppo avevo reso io fallace il tutto valorizzando una tabella di appoggio per la gestione client quindi andavo a puntare ad un vecchio db non implementato delle nuove tabelle.
    Ti chiedo di scusarmi per il tempo dedicatomi però volevo fare delle valutazioni

    Il mio codice però risulta lentino nell'importazione delle tabelle mentre, provando il codice trovato qui https://answers.microsoft.com/it-it/msoffice/forum/all/collegare-via-codice-tabelle-di-un-db-diviso-in-be/e1e9f55b-8318-42ce-b131-ee85c6f59c63 il collegamento dura meno di un secondo rispetto ai 5/6 secondi del mio.

    Provando lo stralcio del tuo codice, sto apportando delle modifiche ma mi da problema qui poichè non riesco ad interpretare la seguente variabile strPathwithPWD

    il patch del BE lo trasferisco tramite
    strPercorso = CurrentProject.Path & "\"
    LinkBE = strPercorso & "BE.accdb"
    Set db = OpenDatabase(LinkBE, False, False, "MS Access;PWD=password")
    mentre come devo impostarla per strPathwithPWD?
                .Connect = ";DATABASE=" & strPathwithPWD
                .SourceTableName = rs.Fields(0).Value
    mi da errore sul codice sopra riportato, poichè assegnando a strPathwithPWD la password mi segnala errore che non trova la tabella "password" nel be
  • Re: Problema limite numero tabelle collegate da BE a FE

    Si se hai MsAccess penso sia da scrivere così:
    
    "DATABASE=C:\Tuodb.mdb;UID=Admin;PWD=tuapassword"
    Non ricordo bene la struttura corretta non usando più da parecchio JET come BE, ma se apri la Tabella MsysObjects, con le Tabelle LINKATE, trovi in chiaro la stringa alla Colonna CONNECT, devi ricostruire quella...!
  • Re: Problema limite numero tabelle collegate da BE a FE

    @Alex ha scritto:


    Si se hai MsAccess penso sia da scrivere così:
    
    "DATABASE=C:\Tuodb.mdb;UID=Admin;PWD=tuapassword"
    Non ricordo bene la struttura corretta non usando più da parecchio JET come BE, ma se apri la Tabella MsysObjects, con le Tabelle LINKATE, trovi in chiaro la stringa alla Colonna CONNECT, devi ricostruire quella...!
    Grazie mille, ho imparato un altra cosa
    1 piccolo problema fa in modo che la funzione non prosegua...
    If Not rs.BOF And rs.EOF Then
    BOF significherebbe che siamo sul record precedente al primo della tabella mentre EOF che siamo nella tabella sul record dopo l'ultimo valorizzato...lo scrivo se può servire ad altri ma ho dovuto commentarlo perchè uso una DummyConnection sempre da te consigliatomi tempi addietro che velocizza di tantissimo le operazioni di BE-FE

    ora il problema resta su
    DBEngine(0)(0).TableDefs.Append tdf
    in quanto mi dice che argomento valido...perchè?

    Cosa differisce tra il tuo codice rispetto a questo?
    https://answers.microsoft.com/it-it/msoffice/forum/all/collegare-via-codice-tabelle-di-un-db-diviso-in-be/e1e9f55b-8318-42ce-b131-ee85c6f59c63
    La cosa magari potrebbe darti noia quindi era giusto per imparare altro altrimenti amen
  • Re: Problema limite numero tabelle collegate da BE a FE

    Era da scrivere così, è il controllo che il Rs non sia vuoto... se non ha dati non linki nulla...
    
    If Not (rs.BOF And rs.EOF) Then
    Sostanzialmente non cambia molto ma se usi DAO sono 3 righe di codice... è difficile inventarsi cose nuove...

    Puoi provare, ma non deve cambiare nulla con:
    
    CurrentDb.TableDefs.Append tdf
  • Re: Problema limite numero tabelle collegate da BE a FE

    Perfetto...penso che mi sto perdendo perchè ora mi segnala Loop senza Do ed invece è stato inserito
    Private Const cLnkTbl As String = "TTabelleCollegate"
    Public Function LinkTbl() As Boolean
    
    Dim strPathwithPWD As String
    Dim rs       As DAO.Recordset
    Dim tdf      As DAO.TableDef
    
    Dim strSQL As String, strPercorso As String, LinkBE As String
    strSQL = cLnkTbl
    LinkTbl = False
    
    strPercorso = CurrentProject.Path & "\"
    LinkBE = strPercorso & "BE.accdb"
    
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL) ' elenco tabelle da collegare
        Do Until rs.EOF
            If TableExist(DBEngine(0)(0), rs.Fields(0).Value) Then
            DBEngine(0)(0).TableDefs.Delete rs.Fields(0).Value
            End If
            Set tdf = DBEngine(0)(0).CreateTableDef(rs.Fields(0).Value)
        
            With tdf
                .Connect = "MS Access;PWD=password;"
                .SourceTableName = rs.Fields(0).Value
            End With
            If Not (rs.BOF And rs.EOF) Then
            rs.MoveNext
        Loop
    End If
    LinkTbl = True
    Exit_Here:
    
    rs.Close
    Set rs = Nothing
    Exit Function
    
    Err_LinkTbl:
        LinkTbl = False
        MsgBox "Impossibile connettersi al Server"
    Resume Exit_Here
    
    
        SysCmd acSysCmdSetStatus, "Connessione al server eseguita con successo!"
    
    LblErr:
    If Err.Number = "0" Then Resume Next
    If Err.Number = "20" Then Resume Next
    If Err.Number <> "0" Then
        MsgBox Err.Number & " " & Err.Description
    End If
    End Function
    
  • Re: Problema limite numero tabelle collegate da BE a FE

    Penso che tu non stia facendo attenzione a cosa stessi scrivendo... controlli il Rs vuoto alla fine invece che all'inizio, non passi il percorso del DB, non aggiungi la Tabella alla collection... insomma direi che questi errori devi trovarli da solo.
    
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL) ' elenco tabelle da collegare
    If Not (rs.BOF And rs.EOF) Then
    	Do Until rs.EOF
    		If TableExist(DBEngine(0)(0), rs.Fields(0).Value) Then
    			DBEngine(0)(0).TableDefs.Delete rs.Fields(0).Value
    		End If
    		Set tdf = DBEngine(0)(0).CreateTableDef(rs.Fields(0).Value)
    	
    		tdf.Connect = "DATABASE=c:\percorso\tuo.mdb;PWD=password;"
    		tdf.SourceTableName = rs.Fields(0).Value
    		DBEngine(0)(0).Tabledefs.append tdf
    		
    		rs.MoveNext
    	Loop
    End If
  • Re: Problema limite numero tabelle collegate da BE a FE

    Mi rendo conto di essermi attorcigliato da solo

    ho inserito il tuo codice ma mi segnala "Impossibile trovare ISAM installabile...e vorrei capire in cosa mi perdo
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL) ' elenco tabelle da collegare
    If Not (rs.BOF And rs.EOF) Then
    	Do Until rs.EOF											'prosegui finchè non termina la lista tabelle
    		If TableExist(DBEngine(0)(0), rs.Fields(0).Value) Then			'se esiste già la tabella 
    			DBEngine(0)(0).TableDefs.Delete rs.Fields(0).Value		'eliminala
    		End If
    		Set tdf = DBEngine(0)(0).CreateTableDef(rs.Fields(0).Value) 	
    	
    		tdf.Connect = "DATABASE=c:\percorso\tuo.mdb;PWD=password;"	'collegamento al BE
    		tdf.SourceTableName = rs.Fields(0).Value					'selezionare la tabella impostata da rs
    		DBEngine(0)(0).Tabledefs.append tdf
    		
    		rs.MoveNext
    	Loop
    mi stò trovando seriamente in difficoltà perchè non stò riuscendo ad andare avanti...in cosa potrei fermarmi per iniziare a ragionare in maniera lucida? Ho provato a commentare in maniera grossolana le operazioni per capire se le "leggo" corretamente
  • Re: Problema limite numero tabelle collegate da BE a FE

    Quando riesco faccio un test e ti dico meglio... ma ho pochissimo tempo.
  • Re: Problema limite numero tabelle collegate da BE a FE

    @Alex ha scritto:


    Quando riesco faccio un test e ti dico meglio... ma ho pochissimo tempo.
    Te ne sarei infinitamente grato
  • Re: Problema limite numero tabelle collegate da BE a FE

    zio Ken ha scritto:


    @Alex ha scritto:


    Quando riesco faccio un test e ti dico meglio... ma ho pochissimo tempo.
    Te ne sarei infinitamente grato
    Manca un PUNTOVIRGOLA nella ConnectionString prima di DATABASE
    
    tdf.Connect = ";DATABASE=c:\percorso\tuo.mdb;PWD=password;"
    Da me funziona tutto.
  • Re: Problema limite numero tabelle collegate da BE a FE

    @Alex ha scritto:


    zio Ken ha scritto:


    @Alex ha scritto:


    Quando riesco faccio un test e ti dico meglio... ma ho pochissimo tempo.
    Te ne sarei infinitamente grato
    Manca un PUNTOVIRGOLA nella ConnectionString prima di DATABASE
    
    tdf.Connect = ";DATABASE=c:\percorso\tuo.mdb;PWD=password;"
    Da me funziona tutto.
    ciao Alex, ho modificato aggiungendo il ";" ed ora funge soltanto che esegue il linkaggio solo sulla prima tabella per poi entrare in un look infinito dove la linka e cancella senza mai passare alla tabella successiva, in questo caso, come si può passare alla tabella successiva?
Devi accedere o registrarti per scrivere nel forum
20 risposte