Newsgroup: it.comp.lang.delphi
Titolo: Errore disco

Salve a tutti,
scusate l'ignoranza ma, creando un'applicazione dal disco C e poi avendo la 
necessitą di spostarla per esempio nel disco D, questa all'avvio da errore.
Come posso risolvere?
Grazie. 

 
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

 Grazie.
Verifica quanto ti hanno già suggerito ma eventualmente posta il tipo di
errore.
Ciao
Valter

 la necessità di spostarla per esempio nel disco D, questa all'avvio da 


 l'unità disco e quindi la relativa tabella associata).
*Mai* usare path assoluti, in nessun caso. Come hai imparato, non è 
affatto detto che un utente faccia girare l'applicazione dove tu 
pensavi, così come non è detto che l'utente abbia il drive C.
Utilizza path relativi alla tua applicazione, o leggi le posizioni delle 
cartelle di sistema dal registry.
Nel tuo caso, puoi ovviare utilizzando l'evento OnWillConnect del 
TADOConnection:
procedure TdmData.dbConnWillConnect(Connection: TADOConnection;
   var ConnectionString, UserID, Password: WideString;
   var ConnectOptions: TConnectOption; var EventStatus: TEventStatus);
var
   sConnStr: String;
begin
   sConnStr: String = 'Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=%sdata.mdb;Persist Security Info=False';
   ConnectionString := Format(sConnStr, [ExtractFilePath(ParamStr(0))]);
end;
In pratica, copia in sConnStr la tua ConnectionString a design-time, e 
sostituisci il percorso del db (non il nome del file) con %s, e usando 
la Format sostituisci il %s con il percorso che vuoi (in questo caso, il 
percorso dell'applicazione stessa).
-- 
Jax

   ConnectionString := Format(sConnStr, [ExtractFilePath(ParamStr(0))]);
Meglio:
ConnectionString := Format(sConnStr, 
  [IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))]);

   [IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))]);
IncludeTrailingPathDelimiter? E sticazzi, più lunga no? :)
Scherzi a parte, anch'io all'inizio usavo la mia funzione "Slash" (che 
faceva la stessa identica cosa di ITPD), ma dopo un po' di tempo ho 
smesso di usarla perché ho notato che ExtractFilePath restituisce sempre 
la \ finale... o sono solo stato fortunato fino ad ora?
-- 
Jax

 la  finale... o sono solo stato fortunato fino ad ora?
ExtractFilePath estrae semplicemente il path e quindi lo slash finale, se
lo slash finale c'č.  La procedura corretta da seguire, se si vuole SEMPRE
lo slash finale, č di usare IncludeTrailingPathDelimiter.
Difatti il path estratto da: "C:pippo" č "C:", non "C:\".
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Difatti il path estratto da: "C:pippo" è "C:", non "C:\".
Certo, questo è ovvio; ma (in questo caso) quand'è che ParamStr(0) 
restituirebbe C:pippo.exe?
Ho provato a simulare vari lanci, anche mettendo l'eseguibile in C:, 
anche creando un collegamento ad esso mettendo la cartella di lavoro C: 
anziché C:\, mettendo destinazione C:\project1.exe ma ParamStr(0) 
restituisce sempre C:\project1.exe.
Comunque sono quisquilie, la mia era più una curiosità... e sicuramente 
è meglio usare una funzione in più che una in meno :)
-- 
Jax

 IncludeTrailingPathDelimiter? E sticazzi, più lunga no? :)
Con tutto quello che ci costa il Code Completation,
lo vogliamo usare o no?
:-)
Comunque, a proposito di questo, sto preparando una cosina ... 
un paio di smussate e poi la posto sul NG (sperando che nessuno
si innervosisca).
Ciao
ACSH


 restituirebbe C:pippo.exe?
Personalmente non uso mai ParamStr(0), ma Application.ExeName, quindi non
mi sono mai preoccupato di sapere cosa contenga quel parametro.  Causa
anche la deformazione professionale nell'uso del C/C++, in cui argv[0] non
necessariamente contiene il path dell'applicazione, da una piattaforma
all'altra.  In ogni caso, è bene non adottare due tecniche diverse: meglio
non doversi ricordare che con Paramstr(0) lo slash c'è, mentre con
Application.ExeName potrebbe non esserci; è meglio semplificare la vita,
ricondursi a una sola logica e usare IncludeTrailingPathDelimiter.
