Newsgroup: it.comp.lang.delphi
Titolo: cancellare i record in DB

Facendo delle prove sui databasem tanto per cominciare,
provavo a far in modo che vengano eliminati dei record
in un solo colpo, quindi ho provato in questo modo...
  Table1.Active:=TRUE;
  Table1.Open;
  Table1.First;
  for i:=0 to Table1.RecordCount-1 do begin
     Table1.Delete;
     Table1.Next;
  end;
  Table1.Active:= FALSE;
  Table1.Close;
ma non cancella un tubo !!!  Why ???
grazie, "Tander"

 ma non cancella un tubo !!!  Why ???
Questo invece non è chiaro.
Dovresti specificare il DB usato.
Cià
Fra. :-)

 ha scritto nel messaggio
news:AOOya.217779$K35.5...@news2.tin.it...

Paradox  (BDE)

 ha scritto nel messaggio
news:64Pya.21047$lK4.6...@twister1.libero.it...

Cmq ho fatto anche uin questo modo.....
  with Table1 do
  begin
   DisableControls;
   try
    First;
    while not Eof do
    begin
     { Process each record here }
      Delete;
      Next;
    end;
   finally
    EnableControls;
  end;
end;
ma adesso ho capito devo fare un refresh altrimenti
visualizzava lo stesso i dati !!
la mia precedetne è stata inserita solo per esperiemnto,
tanto per vedre come funziona, inotlre se voglio cancellare
solo alcuni record forse in quell'altro modo è meglio !
grazie.

 ha scritto nel messaggio

Se non erro il componente TTable ha la procedura Emptytable che svuota il DB
e lo comprime (pack)
^_Goblin_^

   Table1.Close;
Le stringhe che metti sopra sono uguali a 2 a 2 Guarda nell'Help
--
_________________________________________
Edmondo Di Tucci 
snar...@tin.it

 >
Sinceramente non mi sembra corretto, io faccio:
Table1.Open
While Not Table1.EOF do Table1.Delete;
Table1.End;
L'operazione delete su una tabella paradox sposta automaticamente il
puntatore al rec successivo a quallo cancellato, se fai anche next cancelli
un rec ogni due.
ciao Claudio

e lo comprime (pack)
Confermo.
-- 
Morde. 
morde[at]programmer[.]net

 grazie, "Tander"
  Ciao.

solo alcuni record forse in quell'altro modo č meglio !
In linea di massima dovresti fare gli "esperimenti" in locale, prima di
postare qui sul ng, inoltre occhio al quoting!!!
 ;-)
Il metodo piu' corretto da invocare su un TTable a mio giudizio e' EmptyTable
perche',fa ricorso ad una API del bde pensata proprio per questo.
Se usi la Table.delete, la cosa ti va liscia se il numero di record e'
accettabile, ma se hai una tabella di 20/30 mega, ti conviene accendere la
moka, berti il caffe', fumarti una sigaretta e aspettare ulteriormente.
Quindi, per concludere: l'help di delphi contiene una guida che si chiama
"developing database applications" la quale ha un capitolo dal titolo emptying
tables. ti riporto uno stralcio
"Many table-type datasets supply a single method that lets you delete all rows
of data in the table.
-For TTable and TIBTable, you can delete all the records by calling the
EmptyTable method at runtime.
- For TADOTable, you can use the DeleteRecords method.
- For TSQLTable, you can use the DeleteRecords method as well. Note, however,
that the TSQLTable version of DeleteRecords never takes any parameters.
- For client datasets, you can use the EmptyDataSet method."
Ciao, e mi raccomando: pochi esperimenti e occhio al quoting :-)


Table1.close;
Table1.exclusive := True;
Table1.emptytable;
Table1.exclusive := False;
Table1.Open;
GLF

 ha scritto nel messaggio
news:K5Oya.20829$lK4.6...@twister1.libero.it...

dovresti vedere il valore di record count?
ma segui i consigli che ti ha dato morde.
in ogni caso intervengo per questo motivo, a titolo d'informazione:
Table1.delete == cancella il record attuale e si posiziona sul record
successivo
quindi
se dopo table1.delete usi table1.next cancelli un record si e uno no.
poi non ne sono particolarmente sicuro.... ma credo che la sequenza giusta
per aprire una tabella sia questa
table1.open;
table1.active := true;
...
table1.active:= false;
table1.close;
la guida delphi dovrebbe aiutarti.
ciao
roberto

Perchè non utilizzi una SQL? Secondo me è il metodo più veloce (ed
efficiente!)
DELETE
    FROM nomeTabella
    WHERE condizionePerEliminareUnRecord
ovviamente se non metti nessuna condizione cancelli tutti i record presenti
della tabella!
es:
DELETE
    FROM Dipendenti
    WHERE Nome="Pippo"
cancella tutti i dipendenti che hanno come campo nome il valore "Pippo" ...
Penso che se vuoi utilizzare il tuo codice dovresti almeno fare l'update
della connessione/transazione o della tabella stessa. Ciao
..::[ Panz ]::..
ps: se vuoi ho un documento che descrive bene la sintassi e i comandi dell
SQL ... se ti serve chiedi pure! Ciao


 ha scritto nel messaggio
news:bahvkc$t86ne$1...@ID-149000.news.dfncis.de...

Grazie questo funziona molto bene, anche se non ho
capito il perché va scritto cosě... sto cercando fra l'help
ma non trovo nulla per il momento !