Newsgroup: it.comp.lang.delphi
Titolo: Files ADTG - Aggiungere colonna a runtime

Ciao,
la mia domanda è la seguente: è possibile aggiungere una nuova colonna
ad un file adtg già popolato?
Sto provando in diversi modi ma non ci riesco....
Non vorrei dovermene creare da zero uno nuovo, aggiungere la colonna..
e copiare i valori precedenti...
Ciao e grazie
Davide

 ad un file adtg già popolato?
Dove si trova la specifica di questo file? Con cosa si usa?
ciao
-- 
morde
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database


Ciao, il file ADTG è un modo per salvare in fomato testuale un DataSet
di ADO.
E' una sorta di DB volante...
....

> Sto provando in diversi modi
..ad esempio?
A:


In fase di creazione utilizzo FFieldDef.Add .. per le colonne che mi
servono ed alla fine faccio un CreateDataSet e un Save..
Sto provando un pò con questo medoto e facendo l'update .. ma non
ottengo nessun risultato.
L'alternativa funzionante sarebbe di crearmi da zero un nuovo DataSet
con la colonna in più e copiarmi tutti i dati ma vorrei prima vedere
se è possibile trovare una soluzione più performante e flessibile
anche per il futuro.
Grazie
Davide

 E' una sorta di DB volante...
E se to lo carichi da codice in un TDataset descendant, dopo puoi 
manipolare il dataset runtime e risalvarlo.
Sule modifiche a runtime di un dataset ci sono diversi snippet di 
codice, basta cercare nei "soliti siti" (c)A.Salvati.


 servono ed alla fine faccio un CreateDataSet e un Save..
Vai una fielddef.add su COSA? Quando?
Perche' invece di farci fare il puzzle non speghi passo passo quello
che fai e con cosa lo fai?
E sopratutto, xche *devi* aggiungere delle colonne? E infine, devi x
forza di cose usare ADTG?
Aiutaci ad aiutarti... :-D
A.

Non sto facendo un puzzle :)
L'applicazione esiste da tempo con questi files.
E' un modo per bypassare l'utilizzo di un DataBase quando i tempi di
accesso non devono essere super performanti..
Ora non ho la possibilità di postare il codice e quindi ho scritto
quanto ricordavo...
Grazie per l'info sui Descendant..
Ciao
Davide

 accesso non devono essere super performanti..
Hint: SQLite, e non hai di questi problemi
Enrico

Ciao,
grazie per il consiglio su SQLite ma per ora l'applicazione è
implementata così..
Il codice col quale tento di aggiungere una colonna è il seguente
   Anag.LoadFromFile(Path + 'MAnag.adtg');
   if Anag.FieldDefs.IndexOf('CoeffAzz') = -1 then
   begin
       Anag.FieldDefs.BeginUpdate;
       Anag.FieldDefs.Add('CoeffAzz',ftInteger,0);
       Anag.FieldDefs.EndUpdate;
       Anag.FieldDefs.Update;
       Anag.SaveToFile(Path+'MAnag.adtg',pfADTG);
       Anag.Close;
   end;
Anag è un TADODataset messo su un DataModule di Delphi..
Ho risolto creandomi un nuovo DataSet.. al quale aggiungo la colonna..
mi copio i valori e poi sovrascrivo il file adtg...
Se avete altri consigli per far funzionare quanto sopra.. li accetto
volentieri.
Grazie Davide

Ma scusa, non puoi creati nr campi aggiuntivi a priori ed usarli alla
bisogna 
quando servono?
Ciao
Loris
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 quando servono?
Questa strategia per me è molto pratica ma poco tecnica ed elegante, 
perchè mi ricorda tanto il passato quando si lavorava in clipper coi 
record a larghezza fissa e si lasciava quindi qualche decina di bytes 
vuoti come filler per poterli poi assegnare ad eventuali nuovi fields..
Ricordo che misuravamo gli interi come 2 bytes (half integer), le 
stringhe 1 byte a carattere, e alla fine si arrivava a records di 256 
bytes con filler o tappo finale da riutilizzare "alla bisogna".
Non c'erano ancora le finestre e windows 3.11 solo incominciava a far 
parlare di sè.
Programmavo in DOS su un olivetti con gwbasic e avevo lo schermo a tubo 
catodico arancione. 640 kb di ram che arrivavano alla spaventosa 
grandezza di un mega con l'himem.sys caricato!
Quanto mi sono divertito in quegli anni!!! :-)
Amarcord a parte...la soluzione più giusta, imho, è di deserializzare i 
dati in un adodataset, aggiungere runtime i fields desiderati, e 
risalvare su file.
Meglio sarebbe passare direttamente ad un db quale sqlite, come già 
suggerito.Ma questo costa di più in fatto di coding, refactoring, ecc.
PS: odio i flat file database.. mi hanno sempre dato il senso di 
sbrigativo, di "vorrei ma non posso", di "non ho tempo", ecc..
:-D


:)
In altri progetti ho lavorato con SQL-Server o MySQL.. ed in quel
caso.. basta una semplice Alter Table..
Questo è un progetto per il quale non è necessario installare DB
presso il client etc...
L'importante è aver risolto ..
Grassie a tutti...
Ciao
Davide

 vuoti come filler per poterli poi assegnare ad eventuali nuovi fields..
ehm...In clipper usavi il dbu e ci mettevi 2 secondi.
La storia del filler veniva usata in quickbasic e similiari con i file
ad accesso casuale.
Definivi un tipo record e gli aggiungevi un attributo filler.
Dovrei avere ancora i sorgenti di queste cose fatte prima in qb 4.5 e
successivamente col ms basic 7.1 che sarebbe poi evoluto in vb1.. Azz,
erano i primi anni 90...
Cmq, ricordo ancora che accantonai i file ad accesso casuale per
passare al btrieve che ai tempi era un prodotto novell.
Quello si che andava come un treno, e parlo di pc 283 e 386  su rete a
10 megabit....
Mo abbiamo processori a 256 core che vanno a 2000 teraherts con
terabyte di ram, dischi telepatici  etc e sto kaz di windows ci fa
vedere sempre la simpatica clessidra....
Spero linux sia meno peggio!
A.

> Spero linux sia meno peggio!
cambiano gli orchestrali la musica è sempre la stessa, bello il
Clipper, ciao Brunello

 Spero linux sia meno peggio!
Dipende dall'applicazione e dalla pesantezza delle operazioni che stai 
eseguendo. In genere, comunque, e` abbastanza reattivo
Enrico

 presso il client etc...
ma con SQLite non installi db, eh, e` una libreria che si occupa di 
smazzarsi tutto il lavoro (tecnicamente parlando, SQLite e` un database 
embedded)
Enrico
P.S. per la cronaca, anche Firebird puo` essere utilizzato in modalita` 
embedded