View Full Version : ACCESS esperti cercasi!! HELP
ciao ragà...
so che se non trovo una risposta qui sono un po nei cazzi ;)
ho un problema enorme in access...
ho svariate decine di database di access i quali al loro interno hanno link a decine di fogli excel...
chiaramente questi fogli sono linkati con percorso tipo g:
al lavoro dobbiamo cambiare la mappatura dei dischi, per cui per esempio dobbiamo passare da g: a y:
come cavolo faccio a modificare in maniera rapida la mappatura delle tabelle linkate??
se devo farlo a mano ci metto circa 2 settimane :cry: :cry:
se uso il linked table manager mi chiede PER OGNI SINGOLO FILE di ricercare a mano il nuovo puntamento....
a me basterebbe modificare la letteraaaaaaaaaaaaaaaa
please help me
ilsensine
14-10-2003, 12:28
Se la lettera "g:" è disponibile (ad es. non è stata assegnata a un nuovo disco), puoi metterci una pezza con il comando subst, intanto che cambi con calma i tutti i riferimenti.
Originariamente inviato da ilsensine
Se la lettera "g:" è disponibile (ad es. non è stata assegnata a un nuovo disco), puoi metterci una pezza con il comando subst, intanto che cambi con calma i tutti i riferimenti.
grazie...ma il prob non è metterci una pezza...comunque possiamo tenere su le mappature ancora per un po...
ma volevo evitare di cambiare tutto a mano ;)
mercurio76
14-10-2003, 16:19
Beh..non si riesce a fare una query di UPDATE che ti sostituisca la g con la y? Secondo me se po fa...
Direi che quello suggerito è il modo migliore per farlo...
beh se mi aiutate pure a farla vi sono QUASI debitore ;)
UPDATE Tabella SET Campo = "y" & Right([Campo],Len([Campo])-1);
Originariamente inviato da cionci
UPDATE Tabella SET Campo = "y" & Right([Campo],Len([Campo])-1);
calma calma....non ci capisco molto ;)
che devo fare?????
anjoletto82
15-10-2003, 08:20
Ma devi cambiare l'origine della tabella collegata o devi cambiare dei dati all'interno delle tabelle collegate??
Originariamente inviato da zuper
che devo fare?????
Se devi cambiare il percorso all'interno di un campi di testo devi fare una query come questa...
Originariamente inviato da cionci
UPDATE Tabella SET Campo = "y" & Right([Campo],Len([Campo])-1);
calma calma....non ci capisco molto ;)
che devo fare?????
Originariamente inviato da anjoletto82
Ma devi cambiare l'origine della tabella collegata o devi cambiare dei dati all'interno delle tabelle collegate??
devo cambiare l'origine...
abbiamo replicato tutti i dati su un nuovo server...
l'alberatura delle directory è uguale, cambia solo la lettera con cui si mappa il disco.....
Te l'ho detto...devi usare la query che ti ho dato... Crei una nuova query in visualizzazione struttura...
Chiudi -> Visualizza -> Visualizzazione SQL -> incolal la query che ti ho dato io mettendo:
Al posto di Tabella il nome della Tabella con i dati da cambiare...e al posto dei vari "Campo" il nome del campo della tabella da cambiare...
File -> Salva -> metti il nome della Query -> doppio click sulla query...
Fai prima un b ackup della tabella: click con il sx sulla tabella -> copia -> click con il sinistro sullo sfondo della lista delle tabelle -> incolla -> metti un nome per la tabella di backup -> seleziona Struttura e dati -> ok
ma il fatto è che i dati che sevo cambiare non sono in una tabella...
sono proprio i link della tabella stessa...
se vedi in tools linked table manager ti fa vedere i link a fogli esterni, ma non sono in nessuna tabella....SONO le tabelle stesse....
mi sono spiegato?
anjoletto82
15-10-2003, 13:43
Vai nel tuo database dove ci sono le tabelle collegate. Vai su Strumenti -> Utilità database -> Gestione tabelle collegate. Si apre una finestra con tutte le tabelle collegate e il loror rispettivo path. Selezioni tutto o (a gruppi) tutte le tabelle appartenenti allo stesso file. Metti a Vero la chek sotto "Richiedi sempre nuovo percorso" e dai OK. Lui ti chiederà il path del nuovo file per ripristinare le tabelle.
Avvertici se è andato tutto a buon fine!!
lo so, ma così devo selezionare il percorso a mano di tutte le tabelle linkate.....e in totale saranno 500...
è questo che non volevo fare ;)
Ho scritto una routine che dovrebbe fare al caso tuo.
Questo codice và inserito in un modulo di Access e devi utilizzare i riferimenti per la libreria DAO (Microsoft DA0 3.x Object Lybrary).
L'ho scritto abbastanza in fretta e diciamo che in linea di massima scorre tutte le tabelle, se una tabella è linkata cerca di risalire tramite la sua connessione al percorso fisico.Se il drive del percorso è diverso da quello che hai impostato nella costante NEW_DRIVE_LETTER (Non avevo voglia di fare un'interfaccia grafica ...) viene modificato il percorso e aggiornato il link alla tabella.
E' tutto molto grezzo, ma se lo modifichi per le tue esigenze non dovresti avere problemi.
Option Compare Database
Option Explicit
Public Sub s_ChangeDriveForLinkedTable()
Const NEW_DRIVE_LETTER As String = "D" ' *** Nuova lettera del Drive da impostare!
Dim oTbl As TableDef
Dim eMsgResult As VbMsgBoxResult
Dim sName As String
Dim sConnect As String
Dim sMsg As String
Dim lTotModify As Long
Dim bDone As Boolean
Dim bError As Boolean
On Error GoTo lError
For Each oTbl In CurrentDb.TableDefs ' *** Scorro tutte le tabelle
If oTbl.Attributes And dbAttachedTable Then ' *** Verifico se è una tabella collegata
sConnect = oTbl.Connect ' *** Recupero stringa di connessione
' *** Cerco di modificare la stringa di connessione sostituendo la lettera del drive con quella specificata
' nella costante NEW_DRIVE_LETTER (Se l'operazione ha esito positivo, viene impostato il flag bDone) e la
' funzione restituisce la stringa di connessione modificata
'
sConnect = f_TableLinkChange(sConnect, NEW_DRIVE_LETTER, bDone)
If bDone Then
' *** Chiedo conferma all'utente prima di procedere con la sostituzione della connessione
'
sMsg = "Vuoi modificare la connessione della tabella collegata '" & oTbl.Name & "'" & vbCrLf & vbCrLf & _
"[Vecchia Connessione = " & oTbl.Connect & "]" & vbCrLf & _
"[Nuova Connessione = " & sConnect & "]"
eMsgResult = MsgBox(sMsg, vbYesNoCancel Or vbInformation)
Select Case True
Case eMsgResult = vbYes
oTbl.Connect = sConnect ' *** Imposto nuova connessione
bError = False
oTbl.RefreshLink ' *** Aggiorno la connessione della tabella
If Not bError Then lTotModify = lTotModify + 1
Case eMsgResult = vbCancel
Exit For
Case Else ' vbNo
' ***
End Select
End If
End If
If oTbl.Attributes And dbAttachedODBC Then
' *** tabella linkata via ODBC... (Da gestire se è il caso ...)
End If
Next oTbl
If lTotModify > 0 Then
MsgBox "Operazione Completata! (Modificate " & lTotModify & " tabelle)", vbInformation
Else
MsgBox "Operazione Completata! (Nessuna tabella modificata)", vbInformation
End If
Exit Sub
lError:
bError = True
MsgBox Err & " - " & Err.Description, vbExclamation
Resume Next
End Sub
Private Function f_TableLinkChange(ByVal sConnect As String, ByVal sNewDriveLetter As String, ByRef bDone As Boolean) As String
Const DBPATH_FIND_STRING = "DATABASE=" ' *** Prefisso che indica il percorso linkato nella connessione della tabella
Dim iPos1 As Integer
Dim iPos2 As Integer
Dim sPath As String
Dim iLenFindString As Integer
Dim sRet As String
bDone = False
iPos1 = InStr(1, sConnect, DBPATH_FIND_STRING, vbTextCompare)
If iPos1 > 0 Then
iLenFindString = Len(DBPATH_FIND_STRING)
iPos2 = InStr(iPos1, sConnect, ";", vbTextCompare) ' *** Potrebbero esserci altri parametri dopo il parametro DATABASE
' *** Recupero il percorso (Linkato)
'
If iPos2 > 0 Then
sPath = Mid(sConnect, iPos1 + iLenFindString, (iPos2 - (iPos1 + iLenFindString)))
Else
sPath = Mid(sConnect, iPos1 + iLenFindString)
End If
If Len(sPath) > 0 Then
' *** Modifico il percorso sostituendo la lettera del Drive
'
'
bDone = f_ChangeDriveLetter(sNewDriveLetter, sPath)
If bDone Then
' *** Ricompongo la stringa di connessione
'
sRet = Mid(sConnect, 1, iPos1 - 1) & DBPATH_FIND_STRING & sPath
If iPos2 > 0 Then
sRet = sRet & Mid(sConnect, iPos2)
End If
End If
End If
End If
f_TableLinkChange = sRet
End Function
Private Function f_ChangeDriveLetter(ByVal sNewDriveLetter As String, ByRef sPath As String) As Boolean
Dim sOldDriveLetter As String
Dim iPos As Integer
Dim bRet As Boolean
sPath = Trim(sPath)
' *** Se la prima lettera del percorso è un "\" significa che è un percorso di rete!
'
If Left(sPath, 1) <> "\" Then
iPos = InStr(1, sPath, ":", vbTextCompare)
If iPos > 0 Then
sOldDriveLetter = Left(sPath, 1)
If sOldDriveLetter <> sNewDriveLetter Then
sPath = sNewDriveLetter & Mid(sPath, iPos)
bRet = True
End If
End If
End If
f_ChangeDriveLetter = bRet
End Function
Ciao!
beh comunque grazie per lo sbatti ;);)
domani al lavoro provo e ti faccio sapere ù;)
scusa la mia ignoranza...
io ho creato un modulo nuovo in access e ci ho copiato la pappardella :) che hai scritto....
ho modificato i parametri...
ma come faccio a farlo andare??
non c'è un run o qualcosa del genere???
ho capito....l'ho lanciato direttamente da vb;)
FUNZIONA....sei un grande ;);)
Originariamente inviato da zuper
per cui per esempio dobbiamo passare da g:ay:
:eek: :eek: :eek:
Originariamente inviato da riaw
:eek: :eek: :eek:
se c'era la faccina che si faceva le canne te la mettevo subito
:D:D:D
C'è sempre questa !!!
:hic:
Originariamente inviato da cionci
C'è sempre questa !!!
:hic:
mmmm...non va bene...
riaw è proprio fuori :D:D
tipo questo
http://digilander.libero.it/jurada2003/422.gif
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.