Newsgroup: it.comp.appl.access
Titolo: Codice per creare Tabelle collegate (ODBC e non), lunghetto.

Ho un problemino un po' seccante.
Non so se sia una cosa normale con le tabelle ODBC collegate o se sia
colpa del driver ODBC per il DB custom che devo usare.
Insomma, io sviluppo un progetto Access che deve accedere ad un DB non
access (è un prodotto custom) usando il driver odbc fornitoci dalla
ditta produtrice del DB.
Quindi creo delle tabelle collegate e poi realizzo le query ed i
report che mi servono.
Provo il tutto e la cosa funziona perfettamente.
Il problema si presenta quando devo spostare il file .mdb da me creato
su una nuova macchina (ad esempio spedire, via email, il lavoro ad una
persona per il test su un altro DB della stessa famiglia).
Ovviamente sulla nuova macchina c'è installato il driver ODBC che
serve ed è stato creato un DSN che ha lo stesso nome di quello che uso
io sulla mia macchina. 
Il file mdb sulla nuova macchina farà una delle seguenti 3 cose:
1) Funzionerà esattamente come sulla mia macchina. E questo secondo me
dovrebbe essere il comportamento atteso. Ma ultimamente comincio a
pensare che rientrare nel punto uno sia + un fattore di fortuna.
2) Non andrà per niente, perchè nessuna tabella odbc linkata fornirà
dati. Aprendole si vedrà solo un #Elimimato# in tutti i campi di tutti
i record
3) Funzionerà male perchè alcune tabelle forniranno i dati ed altre no
(o peggio ancora forniranno dati senza senso), di conseguenza le
query e i report forniranno risultati che sembrano corretti ma che in
realtà non lo sono.
Situazione molto pericolosa, immaginate il caso di un calcolo incassi
di un supermercato (in realtà non c'entra nulla con il mio lavoro, ma
è per fare un esempio) che a causa del problema somma tutte le casse
tranne 2.
A prima vista il report incasso globale potrebbe sembrare corretto (ci
sono pur sempre gli incassi delle altre casse) ma fidandosi del report
si commette un errore nel dichiarare la contabilità.
I problemi spariscono facendo le seguenti semplici operazioni (da
eseguirsi  sulla nuova macchina su cui viene installato il file):
a) Entrare nella struttura del progetto access, ed esattamente
nell'elenco tabelle
b) Cancellare tutte le tabelle collegate
c) Relinkarle di nuovo (con gli stessi nomi)
La soluzione è semplice, ma scomoda sia perchè magari il numero di
tabelle collegate è alto, sia perchè spesso lo devo far fare
(assistendoli via telefono) a persone poco pratiche di computer.
Quindi io avrei pensato alla seguente soluzione che usa 2 moduli VBA
(da realizzare):
M1) Scandisce il DB alla ricerca di tutte le tabelle che sono
collegamenti a tabelle esterne (sia ODBC che non) e crea un nuova
tabella access (ad esempio di nome tblTabelleLinkate) con tutti i dati
necessari.
M2) Cancella tutte le tabelle collegate che trova nel DB e poi crea
nuove tabelle collegate partendo dai dati registrati in
tblTabelleLinkate
Sperando che questo sia esattamente equivalente alla procedura fatta a
mano (e che di solito risolve il problema).
Avendo le due funzioni i farei cosi':
Lavorerei normalmente (linkando a mano le tabelle che mi servono) ed
una volta completato il lavoro, eseguirei  M1 per creare (o
aggiornare) la tblTabelleLinkate.
Nella maschera per il pannello di comando del progetto ci sarebbe un
pulsante che esegue M2.
In modo che chi riceve il progetto non deve fare altro che cliccarci
almeno una volta prima di cominciare ad usare il resto.
Purtroppo la mia conoscenda di VBA e degli oggetti di sistema è troppo
limitata e non saprei come realizzare M1 ed M2.
Quindi chiedo un aiutino.
Ciao.
Fabrizio

 Fabrizio
Prova con  una funzione tipo questa (aggiornare il link)
Function AggiornaLink()
dim dbs as database
dim tbf as tabledef
    set dbs = currentdb
    for each tbf in dbs.TableDefs
        if tbf.connect <> vbnullstring then
            tbf.refreshlink
        end if
    next
End Function
Se continui ad avere problemi, puoi anteporre a
            tbf.refreshlink
lo statement
            tbf.connect = "ODBC;DSN...."
(vedi l'help)
Spero di esserti stato d'aiuto
Michele Amato
--
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
Sulla mia pagina personale
http://utenti.worldonline.it/micheleamato
è possibile trovare una add-in per Access97:
          Access Navigator 30
comincia a esserci anche un pò di documentazione...
ho pubblicato anche la prima parte di un TUTORIAL
sull'uso di questo strumento
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}