Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Modificare in Vba il collegamento ad 1 tabella

493 views
Skip to first unread message

Giuls

unread,
Apr 14, 2011, 12:02:20 PM4/14/11
to
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

Carlo Costarella

unread,
Apr 14, 2011, 12:58:04 PM4/14/11
to

"Giuls" <antonia...@gmail.com> 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


@Alex

unread,
Apr 15, 2011, 5:42:24 AM4/15/11
to

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

@Alex

Giuls

unread,
Apr 15, 2011, 10:39:32 AM4/15/11
to
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...)

Carlo Costarella

unread,
Apr 15, 2011, 1:27:49 PM4/15/11
to

"Giuls" <antonia...@gmail.com> 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


0 new messages