Newsgroup: it.comp.lang.delphi
Titolo: Problemi con database e DBedit

Premesso che sono un principiante ed autodidatta, volevo fare una
domanda forse banale.....
Ipotizziamo una programma dove io ho tanti campi DBEdit con relative
labels collegati ad un database.
Lo scopo e' di riempire questi campi (mome, indirizzo, partita
iva,ec..ec...) per creare un database di clienti.
So che DBEdit restituisce un valore di un campo del database ma so
anche che e' possibile scrivere su di esso ed inviarlo al database.
Ma come?!?!? Ogni cosa che provo mi dice che non posso farlo con una 
proprieta' readonly (che e' settata pero' a false!).
Ho provato con semplici campi edit, funziona, ma poi come faccio
ogni volta che seleziono un certo cliente ad assegnare ad ogni edit i
singoli campi del database.
Spero di essere stato chiaro e ringrazio anticipatamente per l'aiuto!
Ciao a tutti!

Quando metti un DBEdit collegato ad un DataSet visualizza il contenuto della
cella del record corrente (nel senso che se hai impostato field a Cognome e
ti trovi sul 4° record ti visualizza il cognome del 4° record)
Se la proprietà ReadOnly è settata su False e se il DataSet è aperto allora
puopi anche scriverci
Attenzione che se però ci scrivi non crei un nuovo record ma modifichi
quello corrente (in pratica il DBEdit mette il DataSet in dsEdit e fa la
modifica)
Per aggiungere un nuovo record devi invocare in qualche modo la funzione
Insert del DataSet o tremite un pulsante fatto apposta o con il DBNavigator
(quel componente DataAware fatto apposta per ste cose)
Alla fine (o se hai modificato o se hai aggiunto) devi invocare il Post del
DataSet o con il solito pulsante o col DBNavigator o aspetti che sia il
DataSet stesso a farlo (è sconsigliato ma se invochi funzioni tipo First,
Next e altre viene prima fatto il Post e poi la funzione)
--
_________________________________
Edmondo Di Tucci 
snar...@tin.it
www.powernetsi.it
 
edm...@powernetsi.it

modifica)
Grazie inanzitutto per l'attenzione.
Allora:
Table1.open;
dovrebbe essre il comando giusto, o no?!?
Cio ho provato ma non riesco comunque a scrivere nel campo DBEdit!
:-((

 Table1.open;
No. La proprieta' della table e' active = true. La puoi settare o runtime o
design time.
Se nelle tdbedit vedi il primo record del db vuol dire che e' ok.
A questo punto o usi un DBNavigator (brutto) oppure ti crei dei pulsanti ad
hoc (+bello)
Se vuoi inserire un nuovo record;
procedure TForm1.BtnNuovo1Click(Sender: TObject);
begin
   Table.Insert;
end;
Ors il tDBEdit e' vuoto e il db e' in Insert mode.
Scrivi i record e poi salvali con un pulsante btnSalva:
procedure TForm1.BtnSalvaClick(Sender: TObject);
begin
   Table.Post;
end;
Se vuoi modificare un record esistente:
procedure TForm1.BtnModificaClick(Sender: TObject);
begin
   Table.Edit;
end;
e poi salvalo co il pulsante btnSalva (vedi sopra)
Se vuoi annullare i cambiamenti mentre il db e' in edit o insert
procedure TForm1.BtnAnnullaClick(Sender: TObject);
begin
   Table.Cancel;
end;
Cosi facendo puoi usare anche dei semplici tedit, esempio;
procedure TForm1.BtnSalvaClick(Sender: TObject);
begin
   Table.FieldByName('Nome').AsString := edtNome.Text;
   Table.Post;
end;
Se scorri il db in lettura e vuoi usare tedit, fai cosi:
Nel DataSource associato alla Table
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
        edtNome.Text  := Table.FieldByName('Nome').AsString
end;
Se non usi un DataSource:
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
        edtNome.Text  := Table.FieldByName('Nome').AsString
end;
Ciao!
       Fabio


 Cio ho provato ma non riesco comunque a scrivere nel campo DBEdit!
Per essere sicuri mi dovresti mandare quei due o tre files che hai fatto per
sta prova
Comunque qualcosa di più la possiamo fare anche così
Hai una tabella? Hai fatto Tabella.Open? Hai collegato un DataSource alla
tabella? Colleghi il DBEdit al DataSource? Se metti una griglia collegata al
DataSource funziona o nicchia pure lei? La proprietà ReadOnly è a False?
Se proprio non va ancora mandami pure i sorgenti che ti faccio sapere
PS lascia stare assolutamente cose del tipo:
Table.FieldByName('Nome').AsString := edtNome.Text;
edtNome.Text  := Table.FieldByName('Nome').AsString
ti fai un mazzo così, funzionano male e sono un casino per la manutenzione!
Un motivo ci sarà se hanno fatto i componenti DBAware?
