Ciao a tutti.
Come suggeritomi apro un nuovo thread relativo al collegamento ODBC delle tabelle.
Sto cercando di preparare un DB di prova prima di distribuirlo agli utenti, il DB lavora su tabelle collegate con ODBC oracle, per ovviare al problema di installare DSN con lo stesso nome su tutte le macchine, ho optato per una connessione in modalità DNS-less e ho accrochiato il codice qui di seguito, basandomi su qualcosa che ho trovato in rete e su miei lavori precedenti.
Per il momento connetto delle tabelle da una maschera con un pulsante che usa la sub qui sotto, poi la connessione dovrà essere fatta in automatico.
Sub MakeConnection_R2()
On Error GoTo Err_MakeConnection_R2
Dim db As Database
Dim td As TableDef
Dim count As Integer
Dim tabOr As String
Dim tabDe As String
Dim strSQL As String
Dim contTot As Integer
Dim cont As Integer
Set db = CurrentDb
cont = 0 'inizializzo un contatore
strSQL = "SELECT tabOrigine, TabDestinazione, flag FROM elencoTab WHERE (((flag)=True))"
Set rst = CurrentDb.OpenRecordset(strSQL)
contTot = rst.RecordCount
Debug.Print "totale tabelle da collegare: " & contTot
Forms![maschera1].Testo3.Value = "Tabelle: " & contTot
rst.MoveFirst
Do Until rst.EOF
cont = cont + 1
strsourcename = rst.Fields("tabOrigine")
strlocalname = rst.Fields("TabDestinazione")
Set tdf = db.CreateTableDef(strlocalname)
tdf.Connect = "ODBC;DRIVER={Oracle in OraClient11g_home1};DBQ=nomedb;UID=nomeutente;PWD=password"
tdf.SourceTableName = strsourcename
Forms![maschera1].Testo1.Value = "Sto collegando la tabella: " & strsourcename & " in -> " & strlocalname & " - " & cont & "/" & contTot
db.TableDefs.Append tdf
rst.MoveNext
Loop
Forms![maschera1].Testo1.Value = "Tutte le tabelle sono state collegate"
db.Close
Set db = Nothing
Exit_MakeConnection_R2:
Exit Sub
Err_MakeConnection_R2:
If Err.Number = 3010 Then
Forms![maschera1].Testo1.Value = "Tabella già collegata"
End If
Resume Exit_MakeConnection_R2
End Sub
sostanzialmente ho:
- creato una tabella di appoggio in cui elenco le tabelle da collegare, scelgo se la tabella è da collegare o meno con un campo "flag", come si vede da strSQL;
- ho creato una maschera con un pulsante che richiama la sub Make_connection_R2;
- cliccando sul pulsante le tabelle vengono connesse e in un controllo della maschera "dovrei" vedere il progresso dell'operazione.
Il tutto
essenzialmente funziona, ma ho i seguenti problemi:
- anche quando la procedura di collegamento è terminata, non vedo le tabelle nel pannello laterale (lo sto tenendo aperto per controllo, il db per gli utenti non lo avrà visibile);
- ho impostato la variabile contTot per contare quante tabelle devono essere collegate, ma restituisce sempre il numero 1 (ho inserito per prova 7 tabelle, quindi mi aspetterei questo numero nel contatore). Problema di poco conto visto che poi le tabelle sono realmente collegate;
- nel controllo non riesco a vedere la scritta: "collegamento della tabella x su y" ed il relativo contatore cont/contTot (anche questo è un problema di poco conto);
- nel controllo riesco a vedere il messaggio "tutte le tabelle sono collegate". Anche questo mi pare strano perché non riesco a vedere il progresso dell'operazione ma questo messaggio si ... (anche qui poco male).
Come dicevo il problema principale è dovuto al fatto che le tabelle si collegano ma non le vedo (nel pannello) per un bel po' (qualche minuto). Infatti se chiudo il db e lo riapro le tabelle sono visibili. Dopo che la sub ha collegato le tabelle ho provato a creare a mano una query e le tabelle non mi comparivano quando cercavo di selezionarle, quindi temo che se costruisco con questa logica il db, gli utenti non riescano a usufruire dei report, maschere ... e in generale tutti gli oggetti che hanno come base dati le tabelle collegate, se non dopo diversi minuti.
É un problema che altri hanno già avuto?
Il comportamento è simile su diversi sistemi operativi (ho provato win 7 pro 64 bit e win 10 pro 64 bit), con win 10 il tempo di "ritardo" è ancora più lungo.
Spero di essermi spiegato bene.
Grazie in anticipo a tutti per l'aiuto.