Newsgroup: it.comp.lang.delphi
Titolo: Persistent fields

Ho un componente Query nel mio form a cui non riesco a design time a 
definire i campi con il field editor. Infatti come tento di eseguire 'Add 
all fields' oppure anche 'Add field' ricevo una finestrella intitolata 
'Error' che riporta il seguente messaggio:
Invalid parameter
File or directory does not exist.
File C.\Windows\system32\_QSQL000.DBF
Tbale does not exists.
Permission denied.
File C.\Windows\system32\_QSQL000.DBT
Uso Delphi 2007 e il BDE. Se aggiungo come componente la corrispondente 
Table, a designtime posso tranquillamente definire tutti i suoi campi.
La query punta al percorso corretto (databaseneame) e nella property SQL 
contiene la stringa 'select * from MyTable'.
Ho provato a definire nella stringa tutti i campi e il percorso intero alla 
tablella senza nessun risultato.
Devo definire i campi della query perch� debbo definire un campo calcolato. 
Il campo calcolato lo riesco a definire tranquillamente, ma poi se non ho 
definiti gli altri campi in modo persistente , la quey li segnala come 
mancanti.
Che sia un problema di Delphi2007 ?

 tablella senza nessun risultato.
Il tuo problema credo che non abbia soluzione: suppongo che la presenza 
dei campi calcolati imponga al DBE di crearsi delle tebelle di appoggio 
il cui nome viene determinato al momento in cui servono, ossia runtime, 
e non credo che sia predicibile. Questo comporta che tu non possa fare 
uso dei campi persistenti per il campo calcolato.
Credo che sia inutile suggerirti di cercare al piï¿œ presto un sostituto 
della base dati attuale del tuo progetto:
http://kylecordes.com/bag/
ciao
-- 
Morde

 File C.\Windows\system32\_QSQL000.DBT
Magari è una stupidaggine: perché il punto invece di due punti come ci 
si aspetterebbe in c:\blabla?
Inoltre: da quel che ricordo (è tanto che non uso BDE e ti consiglio 
caldamente di migrare ^_^) ma quelel query sono temporanee e vengono 
create dal BDE per fare le cose sue.
-- 
byez
Piero


E' un programma che ha più di 10 anni. E' monoutente e stand alone. Il BDE 
non ha mai dato alcun problema e rifare tutto sarebbe troppo costoso, io 
penso. Il problema che sto avendo (volendo aggiungere una funzionalità 
all'applicazione) non l'ho mai avuto fino a poco tempo fa, quando lavoravo 
con Delphi 6.

 io penso
Credo che devi riconsiderare bene questo punto: analizza a cosa sono 
legati i costi di sostituzione del motore DB, alla luce di un passaggio 
ad un motore SQL based, ad esempio firebird.
Il tuo software con che struttura e' disegnato: pesante uso di oggetti 
dbaware ? Classi che incapsulano i dati ? Wrapper grafici di classi ?
Ad ogni modo, se proprio non ne esci, ritorna a D6 : al limite 
installalo in una macchina virtuale fatta apposta per la manutenzione 
del tuo programma vecchio.
ciao
-- 
Morde

 Piero
Scusa, ma ho semplicemente battuto male. Comunque ho verificato e il 
problema si verifica con Delphi 2007 ma non si verifica con Delphi 6 ... 

 ha scritto nel messaggio 
news:4c07...@news.x-privat.org...

Non ho idea dello sforzo implicito in un cambio verso Firebird. Uso si molti 
oggetti DBAware, ma i soliti: cioè un pò tutti i tipi di grids, DBEdits.. 
Non ho idea di cosaa intendi per wrapper grafici di classi o clasi che 
incapsulano i dati ..

 File C.\Windows\system32\_QSQL000.DBT
Mi sembra di ricordare che nel bdeadmin ci fosse modo di
impostare la cartella in cui il BDE mette questi file
temporanei. Forse se non e' specificato nulla le due
versioni si comportano in modo diverso (anche se mi pare
strano perche il BDE e' sempre quello)
ciao
Giacomo

 strano perche il BDE e' sempre quello)
nel sorgente del modulo dati si deve inserire nella procedura
DataModuleCreate
Session.PrivateDir := 'C:\TEMP';
ciao Brunello

 ha scritto nel messaggio 
news:74bffdbf-cf54-45ea...@j4g2000yqh.googlegroups.com...

Penso che siamo vicini alla soluzione.. ma devo capire meglio.
Cosa intendi per "sorgente del modulo dati" ?
Se intendi un form di classe TDataModule, in questa applicazione io non lo 
uso.
Comunque ho provato in un altra dove ho un form TDataModule e ho provato a 
creare nell'evento OnCreate le istruzioni che mi indichi.
procedure TBfDM.DataModuleCreate(Sender: TObject);
begin
   Session.PrivateDir := 'C:\TEMP';
end;
Ma  PrivateDir risulta un 'undeclared identifier'. Forse dovrei qualificarlo 
in altro modo, ma come avrai capito, non ne so abbastanza.
E comunque se non ho un DataModule ? O non ho capito niente del tuo 
suggerimento ?
PS: A suo tempo avevo modificato con il BDE Administrator la definizione 
della NETDIR per non farla puntare alla root del C:\ e questa funziona ...

 ha scritto nel messaggio 
news:74bffdbf-cf54-45ea...@j4g2000yqh.googlegroups.com...

Ho provato ad inserire le istruzioni precedenti semplicemente nell'On Create 
del form e la compilazione va bene.
A design time però, se uso il field editor per definire i campi della query, 
ricevo sempre lo stesso messagggio di errore.
Assumo che il componente Query non vada associato esplicitamente in qualche 
modo a Session ... E' giusto ? 

 qualche modo a Session ... E' giusto ?
Direi di verificare tramite il BDEAdmin (dal pannello di controllo) dove 
punta la "NET DIR" (Configuration->Native->Paradox) e farla puntare in 
una directory esistente e dove si hanno di sicuro i diritti di scrittura.
Ciao.

 Ciao.
Allora, la NETDIR punta su una dir c:\temp e va bene, perch� Vista non 
consente di puntare alla ubicazione che prenderebbe di default che sarebbe 
c:\. E questa l'avevo gi� cambiata. Adesso il problema era un altro: e cio� 
un componente TQuery a cui si volessero definire a designtime (ma il 
problema c'� anche a runtime) dei campi persistenti non lo consente e d� il 
messaggio di errore descritto nel mio primo messaggio.
Stimolato dal suggerimento di Brunello, ha fatto un testo di prova mettendo 
in un form i componenti TSession, TDatabase e TQuery. Legandoli 
opportunamente e ridefinendo la property PrivateDir del TSession in c:\tmp, 
a questo punto riesco a definire i miei campi usandi il Fields editor.
Non avevo mai usato i componenti TSession e TDatabase, (che penso possano 
servire quando si vogliano avere Dataset connessi a sessioni diverse), e 
naturalmente sono una complicazione inutile in pi�, visto che finora, almeno 
in Delphi 7, mi bastava definire il mio TQuery.
E non � detto che non ci sia una soluzione pi� semplice.. Aspetto che 
Brunello magari mi dia qualche commento in pi� sul suo originario 
suggerimento. Magari ho complicato inutilmente le cose ... 

 ha scritto nel messaggionews:4c093154$0$18652$4faf...@reader3.news.tin.it...

primo mi scuso per il ritardo
secondo nei miei progetti utilizzo sempre un datamodule nel quale
colloco tutti i componenti per la connessione al database ed i vari
TQuery che utilizzo dai vari form del progetto, e piu' di una volta lo
stesso datamodule l'ho riutilizzato in piu' progetti che accedono allo
stesso database. Quello che vedi una complessita' in piu' in realta'
nel tempo ti permette una gestione molto semplice di progetti da
rielaborare o adattare a nuove esigenze.
Io mi definisco un programmatore a pane e mortadella essendo arrivato
a Delphi dalla programmazione in asm poi nel tempo a quick basic e
clipper ed il mio approccio alla programmazione ad oggetti e' sempre
stato molto marginale, pur comprendendone le effettive potenzialita'
non riesco ancora a staccarmi da vecchie abitudini, per quanto
riguarda i datamodule se ci sono arrivato io ci arrivano tutti. vie
piu' semplici di questa che ti ho tracciato non  ne vedo, ciao e buon
lavoro

 ha scritto nel messaggio 
news:904cb80f-9a36-41e2...@k31g2000vbu.googlegroups.com...

Io sono siuramente un programmatore più scarso di te, quindi ti chiedo 
ancora se ho capito bene quello che fai. Mettiamo pure di usare un 
DataModule. Per definire come suggerisci la property PrivateDir, quali altri 
componenti presupponi di utilizzare e come li leghi l'uno all'altro 
(immagino bene se imaggino che usi TSession, TDatabase e TQuery ? Mi puoi 
fare un esempio delle principali properties che usi per legarli insieme ?)
Grazie e scusa l'insistenza. Se non hai tempo, non importa. Cercherò di 
arrivarci in qualche altro modo.
usi per 

 ha scritto nel messaggionews:74bffdbf-cf54-45ea...@j4g2000yqh.googlegroups.com...

Nella unit del DataModule devi aggiungere alla uses il file DBTables,

 
Io direi che per un soft. monoutende potrebbe molto + semplicemente 
migrare al motore (motorino a 2 tempi...) Jet presente gia' in windows 
xp, con semplici tabelle .MDB, mediadiante i componenti ADO di Delphi.
Diventa tutto molto semplice, non hai nulla da installare salvo il tuo 
eseguibile ed il file database .mdb. Le tabelle le crei con Acess XP del 
2002, estremamente semplice da usare.
I componenti sono i soliti: query e table..., solo che devi inserire un
TConnection dove in maniera guidata imposti "quattro parametri" tra i 
quali il percorso del file database .mdb.
Niente BDE e file di configurazione, nel TConnection c'e' tutto quel che 
serve e gran parte dei parametri devi lasciarli come proposti per 
default, salvo il motore ed il percorso ovviamente.
In pratica i Tquery e compagnia si legano al Tconnection dal quale 
ottengono le informazioni sul database, le tabelle contenute ed i vari 
campi.
ciao Giorgio