Newsgroup: it.comp.lang.delphi
Titolo: Inserire la data in un database

Salve, ho il seguente problema:
Devo inserire la data attuale in un dataset, gli altri campi li
inserisco poichรจ sono collegati con gli oggetti visuali.
Avevo visto che si puรฒ fare con:
dataset.fieldbyname('nome campo').assignvalue(?????)
Cosa metto al posto dei ?????
Esiste un modo + semplice?
In generale dopo aver messo un dataset in modalitร  insert
come faccio a inserire direttamente i vari campi?
Vi ringrazio per l'attenzione.
Iceloop 

 inserisco poichÃ¨ sono collegati con gli oggetti visuali.
Dataset.FieldByName('nomecampo').AsDateTime := Now;
-- 
Jax
Datemi un sogno in cui vivere, perché la realtà mi sta uccidendo. 

 come faccio a inserire direttamente i vari campi?
inserire un nuovo record e impostare i valori dei campi:
DataSet.Append; //o Insert
//DataSet.State passa a dsInsert
//..impostazione dei vari campi
DataSet.Post;
//DataSet.State passa a dsBrowse
modificare i valori dei campi di un record esistente:
DataSet.Edit;
//DataSet.State passa a dsEdit
//..impostazione dei vari campi
DataSet.Post;
//DataSet.State passa a dsBrowse
I campi possono essere persistenti o "a runtime". 
Nel primo caso, vengono automaticamente generati dal Fields Editor tutti i 
campi (come discendenti di TField) necessari, in base al dataset 
sottostante (una query, una tabella, un ADODataSet, o altro). In questo 
modo, i campi sono sempre disponibili anche nell'Object Inspector a design 
time.
Tuttavia, ai campi di un dataset si può anche accedere run.time, per 
esempio si può avere benissimo un dataset aperto e attivo, senza alcun 
campo persistente dichiarato ed eseguire correttamente qualcosa come:
 (<TDataSet>.FieldByName('NOME_CAMPO') as TIntegerField).Value
-- 
Mauro Falzari 
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 Dataset.FieldByName('nomecampo').AsDateTime := Now;
Brrrr... :-)
Non mi riferisco al metodo di assegnazione, ma all'uso di Now.
Now è legato al client che compie l'inserimento e, a meno di non avere 
una rete in cui i client abbiano data e ora aggiornata al server che 
conterrà i dati, è possibile che le date siano più o meno sballate.
In questi casi, io preferisco delegare al server l'inserimento della 
data e ora corrente.  In questo modo è garantito che il campo data/ora 
di ogni singolo record sia molto presumibilmente corretto e certamente 
coerente, riferendosi ad un'unica fonte.

  (<TDataSet>.FieldByName('NOME_CAMPO') as TIntegerField).Value
Non serve il cast.  Scrivere:
MyDataSet.FieldByName('nome_campo').Value
oppure
MyDataSet['nome_campo']
(a partire da Delphi5)
è sufficiente a rendere disponibile il contenuto del campo come Variant.
Con Delphi bisogna stare molto attenti quando si inserisce una data in 
una tabella usando .AsDateTime.  In genere, la trasformazione a 
TDateTime, traduce i Null del db in 0 e viceversa: i Null di tipo 
Variant, in 0.  Questo finisce per generare un contenuto del campo che è 
comunque una data valida: 30/12/1899.  Bisogna stare attenti, in 
pratica, che una insert scriva "null" nel DB e non 0 e che a livello 
applicativo un "null" rappresenti una data non presente nel campo e non 
uno 0.

 data e ora corrente.
Si vede che non ho mai lavorato con db in rete eh? Buono a sapersi cmq.
Come si fa a delegare al server l'inserimento della data?
-- 
Jax
====
Molti uomini debbono il loro successo alla loro prima moglie, e la loro
seconda moglie al loro successo.

 Come si fa a delegare al server l'inserimento della data?
Passandogli una banale (es. per MySQL):
insert (dataora, campo1, campo2, ...) values (now(), vcampo1, vcampo2, ...)

 è sufficiente a rendere disponibile il contenuto del campo come Variant.
ok, ma era per assicurarsi che il campo fosse effettivamente del tipo 
cercato.
