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
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
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...)
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