Newsgroup: it.comp.appl.access
Titolo: Modificare in Vba il collegamento ad 1 tabella

Ciao a tutti,
questo il problema:
ho una tabella collegata in un db access, il cui percorso è del tipo:
C:\\percorso\cartella1\file.txt
Ho la necessità, in una macro, di impostare un comando che, dopo aver
eseguito 1 query, modifichi il collegamento trasformandolo in:
C:\\percorso\cartella2\file.txt
per poi eseguire di nuovo la query e cambiare di nuovo collegamento.
Mi aiutate per favore?
Grazie

 ha scritto nel messaggio 
news:0ff524a1-ddfe-4975...@l6g2000vbn.googlegroups.com...



Mi aiutate per favore?
Grazie
Questa una funzione generica che si applica a tutte le tabelle del db, gli 
devi passare il nuovo percorso:
Public Function CambiaPercorso(path2 As String)
On Error Resume Next
Dim miatable As TableDef
Dim miodb As Database
Dim path As String
Dim i As Integer
path = path2
Set miodb = CurrentDb()
For i = 0 To miodb.TableDefs.Count - 1
    Set miatable = miodb.TableDefs(i)
    If miatable.Connect <> "" Then
       miatable.Connect = ";DATABASE=" & path
       miatable.RefreshLink
    End If
Next i
End Function
Dovresti riuscire a farlo per una sola tabella.
Ciao, Carlo 


Oltre al suggerimento di Carlo, io fossi in te valuterei l'uso di
Trasfertext.... ovviamente in accompagnamento con DeleteObject sulla
tabella precedente...!
@Alex

Grazie Carlo,
ho provato ad adattare i comandi che mi hai dato alla mia circostanza,
ma devo sbagliare qualcosa perchè in realtà il collegamento non si
aggiorna.
Come ti dicevo, devo accodare pezzi di files con lo stesso nome ma
contenuti in cartelle diverse,una per provincia.
Ho una tabella con i nomi delle cartelle, in modo che per ogni record,
possa passare quella stringa all'interno del percorso del collegamento
del file (tabella PROV).
Ho poi la tabella collegata ad un file .txt (output_data2) e una query
di accodamento che si apre dopo che il collegamento è stato
aggiornato.
La macro gira, non dà errori, ma non aggiornandomi il collegamento mi
accoda sempre lo stesso file :(
Dove sbaglio? :(
Sub itera_collegamento()
On Error Resume Next
Dim PROV As TableDef
Dim OUTPUT_DATA2 As TableDef
Dim Estrai_output2 As Database
Dim percorso As String
Dim siglaprov As String
Dim i As Integer
percorso = Application.CurrentProject.path & "\Elaborazioni Finali\"
With CurrentDb.TableDefs("PROV").OpenRecordset
        .MoveLast
        .MoveFirst
        R = .RecordCount
    For i = 1 To R
       siglaprov = .Fields(0)
       If OUTPUT_DATA2.Connect <> "" Then
       CurrentDb.TableDefs("OUTPUT_DATA2").Connect = ";DATABASE=" &
percorso & siglaprov
       ' oppure CurrentDb.TableDefs("OUTPUT_DATA2").Connect =
";DATABASE=" & percorso & siglaprov & "\OUTPUT_DATA2.txt"
       CurrentDb.TableDefs("OUTPUT_DATA2").RefreshLink
       End If
       DoCmd.OpenQuery "Accoda_dettaglio_bacino", acViewNormal, acEdit
       DoCmd.Close acQuery, "Accoda_dettaglio_bacino"
       .MoveNext
    Next i
   End With
End Sub
 Grazie anche a te Ale, anche se non ho bel compreso il tuo aiuto
(sono alle prime armi...)


 ha scritto nel messaggio 
news:9100243f-0e88-4596...@bl1g2000vbb.googlegroups.com...
Grazie Carlo,
ho provato ad adattare i comandi che mi hai dato alla mia circostanza,
ma devo sbagliare qualcosa perchè in realtà il collegamento non si
aggiorna.
Come ti dicevo, devo accodare pezzi di files con lo stesso nome ma
contenuti in cartelle diverse,una per provincia.
Ho una tabella con i nomi delle cartelle, in modo che per ogni record,
possa passare quella stringa all'interno del percorso del collegamento
del file (tabella PROV).
Ho poi la tabella collegata ad un file .txt (output_data2) e una query
di accodamento che si apre dopo che il collegamento è stato
aggiornato.
La macro gira, non dà errori, ma non aggiornandomi il collegamento mi
accoda sempre lo stesso file :(
Dove sbaglio? :(
Sub itera_collegamento()
On Error Resume Next
Dim PROV As TableDef
-----------------------------------
Se Prov esiste nel db non ti serve questa dichiarazione, basta aprire il 
recordset
--------------------------------------
Dim OUTPUT_DATA2 As TableDef
-------------------
Non dovrebbe servire questa dichiarazione per la stessa ragione di sopra
-----------------------------







---------------------------------------------
Mi pare ci siano degli errori. Prima fra tutti l'impossibilità di fare il 
connect e quindi il RefreshLink
verso un file txt che, se non vado errato, non esiste.
Non puoi fare il RefreshLink se la tabella è aperta.
Non ti serve il With, ti basta il ciclo di For.
Una possibile riscrittura della funzione potrebbe essere questa, sempre 
ammesso che le tabelle allegate PROV e OUTPUT_DATA2 esistano:
Public Sub itera_collegamento()
Dim percorso As String
Dim siglaprov As String
Dim i As Integer
Dim rcs As Recordset
percorso = Application.CurrentProject.Path & "\Elaborazioni Finali\"
Set rcs = CurrentDb.OpenRecordset("PROV")
rcs.MoveLast
rcs.MoveFirst
    For i = 1 To rcs.RecordCount
    siglaprov = rcs!NomePrimaColonnaCampo '(il nome del campo che contiene 
la PR)
        If CurrentDb.TableDefs("OUTPUT_DATA2").Connect <> "" Then
            CurrentDb.TableDefs("OUTPUT_DATA2").Connect = ";DATABASE=" & _
            percorso & siglaprov & "\OUTPUT_DATA2.txt"
            CurrentDb.TableDefs("OUTPUT_DATA2").RefreshLink
            DoCmd.SetWarnings False
            DoCmd.OpenQuery "Accoda_dettaglio_bacino", acViewNormal, acEdit
            DoCmd.SetWarnings True
        End If
rcs.MoveNext
    Next i
End Sub
Controlla bene il risultato di percorso & siglaprov & "\OUTPUT_DATA2.txt"
 se esiste.
Ciao, Carlo