Newsgroup: it.comp.programmare.win32
Titolo: Creazione tabella dinamica

Buongiorno a tutto il gruppo.
Io utilizzo c++ bulder 5, Interbase e Firebird 2.1; con l'istruzione 
create table dell'sql, creo una tabella dinamicamente e la prima volta 
che lancio il programma, utilizzo normalmente la tabella creata, ma, 
se sempre all'interno del programma, creo una nuova tabella con lo 
stesso nome, ma campi diversi, il programma mi va in errore, perchè 
nella lista di  FieldDefs, continuano a rimanere i campi della tabella 
precedente.
Naturalmente la tabella prima di ricrearla con i nuovi campi, viene 
eleminata dal database.
Esempio:
IBTabella->Name = "Tabella_A";
IBTabella->TableName = "TABELLA_A";
IBTabella->FieldDefs->Update();
IBTabella->Active = true;
quando cerco di aprire la tabella, mi viene generata l'eccezione che 
non trova un campo ( che riguarda la tabella precedente )
Se chiudo il programma e lo rilancio, tutto funziona regolarmente.
E' da parecchio tempo che ci sbatto la testa.
Un grazie in anticipo a tutti
Giancarlo

> IBTabella->Name = "Tabella_A";
Non entro nello specifico del problema perchè non ho 
informazioni sufficienti, però con l'istruzione che ho riportato 
sopra stai cambiando il nome dell'oggetto e mi sembra un errore. 
Prova a toglierla, cambiare nome agli oggetti a run-time va 
evitato.
HTH,
-- 
Stefano Frosio
www.esse-effe.com

 
con l'istruzione
IBTabella->Name = "Tabella_A";
ho solo provato a riassegnargli il nome anche se a design time era già
stato assegnato il nome.
Ho provato anche a costruire la tabella in questo modo:
IBTabella->TableName = "Tabella_A";
TFieldDefs *pFs = IBTabella->FieldDefs;
pFs->Clear();
TFieldDef *pF = pFs->AddFieldDef(); // add a first field
pF->Name = "ccrlocalita";
pF->DataType = ftString;
pF->Size = 5;
e di seguito tutti i campi che mi servono, per vedere se in FieldDefs 
mi ritrovavo i nuovi campi, ma la nuova tabella viene creta bene con i 
nuovi campi, mentre in FieldDefs, mi trovo i campi della vecchia tabella.
Se chiudo l'applicazione e la rilancio, e faccio l'elaborazione, va 
tutto bene... c'è la possibilità di rilasciare tutta la cache della form?
Grazie ancora
Giancarlo

 ho solo provato a riassegnargli il nome
Il che, come ti dicevo, è sbagliato. Perchè stai assegnando il 
nome al componente, non alla tabella. Scusa se insisto, ma hai 
provato a togliere quell'istruzione (ed altre eventuali 
assegnazioni della proprietà Name nel tuo codice) e a riprovare?
-- 
Stefano Frosio
www.esse-effe.com

 
si purtroppo ho già provato a fare di tutto, mi è rimasto solo di 
provare a creare dinamicamente una volta con un nome la tabella, la 
volta dopo creare la tabella con un altro nome...

Giancarlo ha scritto:

Mi rispondo da solo, non sarà sicuramente elegante, ma funziona e per 
ora lo lascio così:
lscio l'alias con lo stesso nome
IBTabella->Name = "Tabella_A";
assegno un altra tabella al Name e la attivo, poi subito dopo la chiudo.
IBTabella->Name = "Tabella_B";
IBTabella->Active = true;
Sleep(1000);
IBTabella->Active = false;
riassegno il nome gisto a Name, lasciando lo stesso alias
IBTabella->TableName = "TABELLA_A";
IBTabella->Active = true;
faccio tutte le mie elaborazioni senza problemi...
Grazie a tutti e se possibile accetto volentieri consigli e qualsiasi 
altro.