Newsgroup: it.comp.lang.delphi
Titolo: Aiuto DataBase

Come posso eliminare a runtime un record di un database in paradox7?
--
Ciao da Marco "Kaiser" Baldini
akira...@libero.it
----------
http://www.ragnatela.it
----------
When i'm wlaking a dark road I am a man who walks alone
----------
Dio nn è ke il primo e fino ad ora meglio riuscito esempio di strategia di
marketing basata sull'immagine
[M.B.]

Come posso eliminare a runtime un record di un database in paradox7?
Lo devi fare con una tdataset (tquery/ttable) o con
statement sql ?
Con sql, puoi semplicemente scrivere:
DELETE FROM TABELLA.DB 
WHERE CHIAVEPRIMARIA = :PCHIAVEPRIMARIA
Ovviamente devi identificare il record mediante chiave
primaria.
Con uno dei derivati del tdataset (tquery solo se
requestlive = true ha funzionato) puoi, posizionato sul
record da cancellare, impartire un "Delete".
-- 
The Follet

 record da cancellare, impartire un "Delete".
Se metti requestlive a False puoi associare alla query un TUpdateSql.
Bye
AS
-- 
Posted from  [212.17.220.41] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3bfc3ddd...@news.tin.it...


Line Number: 1."
La sintassi e' sbagliata.
Puoi fare cosi':
with TQuery.Create(nil) do
begin
  try
    SQL.Clear;
    SQL.Add('DELETE FROM NOMETABELLA');
    SQL.Add('WHERE NUMERO = :PNUMERO');
    ParamByName('PNUMERO').AsString :=   
TabellaElenco.FieldByName('NUMERO').asString';
    ExecSQL;
  finally
    Free;
  end;
end;
Chiaramente, devi sostituire a NOMETABELLA, il nome della
tabella su cui vuoi cancellare il record.
-- 
The Follet

 
Non so se ti puo' essere di aiuto ma se il DB č Pdox ed č locale io fare una
semplice locate e delete
if Tabella.Locate('Numero', XXXX, []) then
  Tabella.Delete;
Saluti
-- 
Posted from 
hwadsl-213-155-195-162.telvia.it
 [213.155.195.162] 


..se poi il valore del campo chiave è numerico (es. integer):
 with TQuery.Create(nil) do
 begin
   try
     SQL.Clear;
     SQL.Add('DELETE FROM NOMETABELLA');
     SQL.Add('WHERE NUMERO = :PNUMERO');
     ParamByName('PNUMERO').AsINTEGER :=  
     TabellaElenco.FieldByName('NUMERO').asINTEGER';
     ExecSQL;
   finally
     Free;
   end;
 end;
 
Ove possibile, meglio evitare cast sui tipi.
Sarebbe poi molto bello scrivere QueryElenco.FieldByname.... invece che
TabellaElenco.FieldByname....
Ho solo un dubbio: i parametri creati in questo modo sono tipizzati
in automatico? Oppure si deve aggiungere:
ParamBYName('Numero').dataType := ftString | ftInteger?
Bye
AS
-- 
Posted from  [212.17.220.41] 


   Tabella.Delete;
Meglio non utilizzare le TTable, sono in via di estinzione.
-- 
Posted from  [80.105.34.80] 


 ParamBYName('Numero').dataType := ftString | ftInteger?
No, non serve.
-- 
Posted from  [80.105.34.80] 


 Meglio non utilizzare le TTable, sono in via di estinzione.
La mia definizione di Tabella era generica anche la TQuery ha il metodo locate
in quanto lo prende (il metodo locate) da TBDEDataSet, (come da help di delphi)
Saluti
-- 
Posted from 
hwadsl-213-155-195-162.telvia.it
 [213.155.195.162] 


> Quali cast ?
Se un campo è numerico e lo leggi come stringa, quello è un cast, o no?
AS
 
-- 
Posted from  [212.17.220.41] 


 Se un campo è numerico e lo leggi come stringa, quello è un cast, o no?
Ma FieldByName lavora con i Variant, quindi il cast
e' gestito in automatico.
-- 
Posted from  [80.105.34.80] 


da TBDEDataSet, (come da help di delphi)
Si torna al punto di partenza.  Se lavori con una query, devi
avere un dataset di ritorno "vivo", altrimenti devi usare 
TUpdateSQL e impostare, comunque, uno statement SQL.
Tanto vale utilizzare da subito lo statement SQL di DELETE.
-- 
Posted from  [80.105.34.80] 


 Tanto vale utilizzare da subito lo statement SQL di DELETE.
Su questo sono d'accordo.. Io condiziono, con una locate, la cancellazione 
di un singolo record e quando chiudo la sessione di lavoro se salvo applico
le chace, dovrebbe pensarci il componente a gestire tutti gli statement SQL
una cosa del tipo:
with TDBDataSet(DataSet) do
  if (State in dsEditModes) or UpdatesPending then
  begin
    Try
      Try
        DisableControls;
        DataBase.ApplyUpdates([DataSet as TDBDataSet]);
      except
        Raise;
      end;
    Finally
      EnableControls;
    end;
  end;
Saluti
-- 
Posted from 
hwadsl-213-155-195-162.telvia.it
 [213.155.195.162] 
