Originariamente inviato da alka
Sì o no?
E se no, perché mai?
Non lo so, non devo essere assertivo.
Anche su questa affermazione, sarebbe interessante conoscere i motivi, visto che commetto questo "errore concettuale" quotidianamente, per cui mi piacerebbe sapere perché mai sarebbe sbagliato.
Sono i casi della vita.
Non è obbligatorio rispondere alle discussioni: se lo si vuole fare, si rimanga in tema, si dia il suggerimento che si ritiene opportuno, opzionalmente motivandolo, così che si possa mettere in pratica o confutare, se necessario.
Mi sembrava di aver capito che i suggerimenti devono essere possibilisti.
Perchè ci sono i fatti, e le opinioni (per me esistono solo queste ultime)
Se si decide di scrivere solamente delle circonlocuzioni o fare delle "supercazzole", allora meglio astenersi.
mah... che ti devo dire? avrai ragione
a me pareva di aver non solo dato la "soluzione", ma anche le motivazioni... o forse no 
EDIT: ri-metto il codicino per la tkbmemtable, mai vorrei essere accusato di circonluzioni o supercazzole
Supponiamo di avere una tabella documenti con ser autoincrementante [visto che vogliamo usarli... sia mai che si possa farne a meno!]
Supponiamo di avere una TABSQUERY chiamata absqryoneshot
Una memTbl (tkbmemtable)
Una funzione ABSXSQL(che non fa altro che una query controllando che il db sia aperto, non ci sia sql injection etc)
codice:
ABSXSQL(absqryoneshot,'select codicecliente,... from documenti where ser=0');
memTbl.LoadFromDataSet(absqryoneshot,[mtcpoStructure,mtcpoProperties]);
questo è/potrebbe essere il modo per popolare un "nuovo" record, ossia una query con un campo chiave sicuramente inesistente che determina il ritorno, però, della struttura della tabella, il che rende superfluo dover mettere i campi "a mano" dentro memtbl o, peggio ancora, crearli a runtime.
Nel caso in cui, ovviamente, si MODIFICHI un documento esistente, ci vorrà la condizione di selezione "giusta"
EDIT2: per il "dump" (mi sembrava di averlo già messo, ma la vecchiaia avanza...] di una tabella si può usare qualcosa tipo così
absdb: tabsdatabase
chunk:integer; //il numero di "passi" di avanzamento da mostrare
memtbl:tkbmemtable
i,j:integer
abstabella: tabstable
s:string
tralascio evidentemente il try...except
Chiaramente nel caso in cui sei in fase di EDIT (e non di append) devi posizionarti sul record, e fare "edit" anzichè "append".
Vabbè penso sia abbastanza semplice da capire.
codice:
absdb.starttransaction;
chunk:=(tblMem.recordcount div 10)+1; // il +1 è sempre buono e giusto
i:=0;
with tblmem do
begin
First;
while not eof do
begin
inc(i);
if (i mod chunk)=0 then
begin
//...mostra un avanzamento o qualcosa del genere, oppure no
end;
abstabella.Append;
for j:=0 to FieldDefs.count-1 do
begin
s:=uppercase(fielddefs[j].Name);
// abbiamo detto che ci piacciono i campi SER autoincrementanti, o forse no...
if s<>'SER' then
abstabella.fieldbyname(s).asstring:=fieldbyname(s).asstring;
end;
abstabella.post;
// se sei paranoico qui ci metti il flush del db: se la transazione abortisce "sparisce tutto"
Next;
end;
end;
absdb.commit(false);