quindi supponendo che il mio eseguibile si trovi in una cartella "Assicurazione" e il db nella cartella "Assicurazione\db\"
il percorso relativo sarà semplicemente "db\assicurazione.mdb", giusto???
ciao!
quindi supponendo che il mio eseguibile si trovi in una cartella "Assicurazione" e il db nella cartella "Assicurazione\db\"
il percorso relativo sarà semplicemente "db\assicurazione.mdb", giusto???
ciao!
Esattamente.
La soluzione più sicura in assoluto è quella di utilizzare sempre un percorso - appunto - assoluto, nel caso in cui la directory a cui devi accedere sia una sottodirectory della cartella in cui si trova l'applicazione.
Prendendo il tuo caso come esempio, puoi ottenere il percorso del file eseguibile attraverso l'istruzione
Questo ti restituisce il percorso in cui si trova il file eseguibile della tua applicazione (quindi è insensibile a quella che è la cartella corrente, che potrebbe variare durante l'esecuzione del programma stesso). Unendo questo percorso a "db\assicurazione.mdb", otterrai un percorso assoluto in grado di condurti con sicurezza al database in ogni occasione (ammesso che il percorso e il file siano sempre in quella posizione!).codice:ExtractFilePath(Application.ExeName)
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
si ma posso inserire questo codice nella connection string???
quindi diventa:
giusto???codice:ExtractFilePath(Application.ExeName)\db\assicurazione.mdb
Calma, ExtractFilePath è una funzione API. Devi costruire la tua stringa di connessione unendo tra di loro le stringhe fisse dei parametri di connessione con il valore restituito dalla funzione attraverso il simbolo +.
Un esempio:
Si tratta di un semplice concatenamento di stringhe in cui la parte relativa al percorso del database non viene esplicitata, ma ottenuta dall'unione del valore restituito da ExtractFilePath(Application.ExeName), che è la parte variabile, dinamica.codice:'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=' + ExtractFilePath(Application.ExeName) + 'db\assicurazione.mdb;Mode=Share Deny None;Extended Properties=...';
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
si ma, poichè ho utilizzato la Adoconnection la connection string è stata definita tramite l'object inspector, come faccio a modificarla come mi hai detto??? Nella unit non compare...
ciao!!
La proprietà ConnectionString del componente ADOConnection non è altro che una stringa. Il package di componenti ADO contiene un editor di proprietà che ti permette, attraverso un wizard, di costruire "visualmente" il contenuto della proprietà ConnectionString, ma il risultato che si ottiene è sempre e solo una stringa risultante che contiene tutti i parametri di connessione; il wizard aiuta solo il programmatore a definire velocemente i parametri senza dover scrivere manualmente l'intera stringa, col rischio di commettere errori, vista la sua complessità.
Tu dovrai specificarla a runtime, copiandola dall'Object Inspector e incollandola nel codice, sostituendo successivamente la parte che specifica il percorso del database come indicato nella risposta precedente e impostando tale valore per la proprietà ConnectionString prima di aprire la connessione alla base dati.
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
capito. Ma dove devo "incollarla" esattamente???
Te l'ho detto, forse ti è sfuggito.
Devi aprire la connessione a runtime. Prima di aprirla, modifica la proprietà ConnectionString:
Esegui questo codice prima di utilizzare in qualsiasi modo la base dati, ad esempio scrivendolo nell'evento OnCreate() del Form o del DataModule nel quale è contenuto il componente.codice:ADOConnection1.ConnectionString := 'parametri di connessione modificati'; ADOConnection1.Open;
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
grazie mille!!! un'altra domanda: quali sono i file necessari per l'esecuzione del mio programma dopo la compilazione del file .exe???
Le unit credo siano superflue...
ciao!
Le unit sono inutili poichè confinate solamente alla compilazione del file eseguibile. Nativamente, il programma non necessità di alcuna libreria da installare diversa da quelle di sistema presenti in Windows. Nel tuo caso, ti serve sicuramente che nella macchina di destinazione sia installato ADO. Apparentemente, non dovrebbe essere necessario altro, a meno che tu non abbia fatto uso di librerie di terze parti, o di componenti che fanno riferimento a librerie di terze parti.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...