Newsgroup: it.comp.lang.delphi
Titolo: Tabelle con molti campi (IB)

Ciao a tutti.
So già che molto probabilmente non è un'ottima idea, ma mi trovo a dover
lavorare con una tabella contenente ben 37 campi.
Collegato il ClientDataset alla tabella, e provando ad effettuare una
InsertRecord, ottengo i seguenti messaggio di errore in compilazione:
[C++ Error] main.cpp(155): E2285 Could not find a match for
'OpenArray<TVarRec>::OpenArray(int,AnsiString,AnsiString,AnsiString,AnsiStri
ng,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
,AnsiString,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
)'
 [C++ Error] main.cpp(155): E2285 Could not find a match for
'OpenArrayCount<TVarRec>::OpenArrayCount(AnsiString,AnsiString,AnsiString,An
siString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
,AnsiString,AnsiString,AnsiString,
AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString,AnsiString
,AnsiString,AnsiString)'
Non c'è modo di aggirare il problema?
Anche perché, se davvero il nocciolo della questione sta nel numero massimo
di campi "supportati", come possono (in una DBGrid che carica tutti i
fields, ad esempio) avvenire correttamente tutte le operazioni?
Grazie mille,
A

 InsertRecord, ottengo i seguenti messaggio di errore in compilazione:
compilazione o ESECUZIONE?
Non credo che un limite, qualora esiste, sia pari a 37.
Non credo che 37 campi siano "troppi".... :)
A

 Non credo che 37 campi siano "troppi".... :)
Compilazione, purtroppo...
In effetti, verificando in sysopen.h (dove viene definita la macro
OPENARRAY), risulta un limite di 19.
Uso BCB6 enterprise (regolarmente acquistato e registrato... Se fosse un
limite del compilatore mi roderebbero non poco le parti basse).
Sapete illuminarmi?
Grazie Mille,
A

 InsertRecord, ottengo i seguenti messaggio di errore in compilazione:
[cut]
Far vedere la linea che da' errore no?
Prove _in piccolo_ fatte?
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"

 Prove _in piccolo_ fatte?
Sì, guarda, è una banalissima InsertRecord(): (le Check(i) sono tutte
AnsiString)
Transact2->InsertRecord(ARRAYOFCONST((StrToInt(Edit1->Text),
                        Edit2->Text,
                        Edit3->Text,
                        Edit4->Text,
                        Edit5->Text,
                        Edit6->Text,
                        ComboBox1->Text,
                        ComboBox3->Text,
                        Edit7->Text,
                        Edit8->Text,
                        Edit19->Text,
                        ToAdvertise,
                        Check1,
                        Check2,
                        Check3,
                        Check4,
                        Check5,
                        Check6,
                        Check7,
                        Check8,
                        Check9,
                        Check10,
                        ComboBox5->Text,
                        ComboBox7->Text,
                        Check11,
                        ComboBox8->Text,
                        ComboBox6->Text,
                        ComboBox4->Text,
                        Edit9->Text,
                        Edit10->Text,
                        Edit11->Text,
                        Edit12->Text,
                        Edit20->Text,
                        Edit13->Text,
                        Edit14->Text,
                        Edit15->Text,
                        Edit16->Text,
                        Edit17->Text,
                        Edit18->Text)));
Nessun genere di prova effettuato... Ho solo visto che, riducendo la
grandezza della tabella a 19 campi (così come espresso in sysopen.h) gli
errori non ci stanno più.
Grazie Mille,
A

 gli errori non ci stanno più.
Lieto di sentirlo. Se non c'e' traccia nel limite di 19 nella
documentazione potresti riportare il bug su QualityCentral.
(non ho sottomano gli header di BCB, e' un limite su ARRAY OF CONST o su
InsertRecord?)


 InsertRecord?)
Di ARRAYOFCONST, o, per meglio dire, di OpenArray() e OpenArrayCount().
C'è di più: andando un po' a smanettare nei sorgenti di sysopen, si vede che
sono definiti prototipi "veloci" di OpenArray() e OpenArrayCount() per un
n_max_fields<=19 (mediante passaggio diretto di parametri).
Per tutti gli altri casi (a riprova del fatto che il limite, teoricamente,
non esiste) viene effettuato un calcolo della dimensione a runtime, e i
parametri vengono forniti alle funzioni mediante loop su un array
appositamente costruito.
Quindi tutto *dovrebbe* funzionare.
In realtà, steppando il codice, si vede che quella porzione di cui ho appena
parlato non viene MAI eseguita! (e di qui l'errore...)
Grazie Mille,
A