Newsgroup: it.comp.lang.delphi
Titolo: Collegamento a tabelle ACCESS

Ciao!
per uso personale ho scritto un programma che mi gestisce le mie leghe
di fantacalcio dato che per passione ci siamo personalizzati
completamente il regolamento fino a rendere inutilizzabile i programmi
esistenti (a pagamento e non).
Essendo  partito in modo molto pratico non ho cercato scorciatoie
arrivando alla meta in modo molto spedito e bypassando qualche
problema con scorciatoie praticabili conoscendo un minimo di ACCESS
che è il "database" utilizzato per comodità.
Così mi trovo che nel cambio di stagione sono costretto per non fare
gli aggiornamenti delle rose due volte a copiare le tabelle da un DB
all'altro. Cosa tranquilla ma fino a quando sarò io a fare tutto.
Nell'ipotesi che si voglia passare la gestione ad altri non c'è
completa indipendenza.
Il problema tecnico sarebbe risolvibile spostando le tabelle "comuni"
in un terzo file e colegandole nei due file delle LEGHE. Così
modificando per una delle due implicitamente si lavora anche
sull'altra. 
Dov'è il problema? Il problema è che il collegamento in access è con
PATH assoluto per cui quando spedirò il mio file access zippato ai
singoli presidenti per questi il collegamento non funzionerà !?!?!?
Come posso superare questa difficoltà?
Io avevo pensato ad un modo per modificare il collegamento da codice
delphi ma non ho trovato le istruzioni simil SQL per fare questo tipo
di operazione. Esistono?
Spero di aver spiegato bene il problema e che qualcuno abbia una
qualche idea per togliermi dalla "buca"
Grazie.
Luca Leoncavallo

 qualche idea per togliermi dalla "buca"
Evita di usare un path assoluto ma assegna il path a run time, 
calcolandolo magari partendo da Application.ExeName in modo che
sia sufficiente mettere il file mdb nella stessa cartella
del .exe per far funzionare tutto.
Naturalmente per poter assegnare a run time il path e' obbligatorio
che i componenti che usi partano con Active=False e che ci pensi
il tuo codice ad attivarli dopo aver assegnato il path.
Esempio (non testato)
procedure FantacalcioDatamodule.AttivaDatabase;
begin
   FantacalcioTable.TableName :=
     ExtractFilePath( Application.Exename ) +
     'fantacalcio.mdb';
   Fantacalcio.Active := True;
end;
ciao
Giacomo

del .exe per far funzionare tutto.
[...]
Temo di essermi spiegato male. Quanto tu mi suggerisci è una cosa che
io ho già fatto al termine della "fase 1" quando ho cominciato a
distribuire l'applicazione ai presidenti che componevano la lega al
fine di consultare i dati, risultati, ecc.
Così ho permesso loro di installare il programma sul drive e nel path
che più preferivano.
Il fatto è che data questa scelta ore che mi trovo a dover creare un
file ACCESS che raccolga le tabelle comuni a più leghe non so come far
funzionare i collegamenti dai file di lega a questo file comune anche
su path diversi da quello originale. Per fare un esempio, nella
struttura precedente avevo nei due file di lega (Lega_A.mdb e
Lega_B.mdb) una tabella GIOCATORE_A che raccoglie tutti i giocatori
della stagione in corso (quella del campionato 2006-07). Con
l'applicazione io aggiorno tale tabella coi movimenti di mercato
spostando i giocatori da una squadra all'altra. Questi aggiornamenti
ovviamente o li faccio con l'applicazione sui due file oppure lavoro
sempre su uno ed alla fine mi importo la tabella sull'altro. La cosa
va bene fino a quando sarò io a dover gestire le cose ma se mai
arriverà un presidente di lega non informatizzato saranno problemi.
Allora cosa ho pensato? Porto le tabelle comuni in un file SERIE_A.mdb
e nei due file di lega ci metto un bel collegamento. Il programma
funziona come prima senza modificare una sola riga di codice e
modificando su una lega in realtà si modifica in entrambe.
Con questa struttura, ed il problema sta qua, se sposto i due file che
sono nella stessa cartella da un path ad un altro mi da errore perchè
il path in access (a meno che non si possa fare diversamente con
procedure a me ignote) è assoluto. In generale i due mdb (lega + file
comune) devono essere sempre in una stessa sottocartella che però
potrà essere diversa da presidente a presidente.
Due soluzioni:
A) Esiste il modo di salvare path relativi?
B) Ricostruire i collegamenti in access da codice. Possibile?
Grazie.
Luca Leoncavallo

 potrà essere diversa da presidente a presidente.
C'e un'altra possibilita': puoi usare il file comune come supporto 
temporaneo e invece di fare un collegamento al file comune copi tutti i 
dati all'interno del file locale, a quel punto il file comune si puo'
anche buttare e i join sono tutti su tabelle dello stesso file mdb.
Chiaro che questo aggiornamento e' tutto da gestire, soprattutto se 
oltre ai dati decidi di cambiare anche la struttura.
ciao
Giacomo