Newsgroup: it.comp.lang.delphi
Titolo: sql ed i record deletati

Ciao a tutti.
Gestisco un archivio tramite una query request live = true, chached update =
true.
Richiamo una registrazione, eseguo la select, se trovo i record li posso
modificare, se non li trovo proseguo con l'inserimento.
Se confermo eseguo il commit, in caso contrario il rollback.
Quando cancello la registrazione eseguo un ciclo while della query
selezionata nel quale eseguo query.delete.
Mi sono accorta che se accidentalmente viene richiamata la registrazione
cancellata, la query la seleziona lo stesso i record ed al momento della
modifica mi segnala errore perchè sto tentando di editare un record
deletato.
C'e un metodo nella select per scartare i record deletati o per sql non
esiste il concetto?
La cancellazione è meglio farla con una query?
Ilenia
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 La cancellazione è meglio farla con una query?
QUALE DB usi?
QUALE metodo di accesso al DB usi?
QUALI componenti usi?
PS: se usi SQL la cancellazione dei record deve essere fatta con una query
SQL.
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Ho seguito il tuo consiglio ed ho fatto la cancellazione con una query
usando il delete from
tabella where numero registrazione = nnnnn
Il problema però persiste. Se l'operatore mi richiama un numero di
registrazione che è stato cancellato, la select lo considera valido, mentre
va in errore appena si digita qualcosa sui campi collegati al data source.
Se io potessi specificare nei parametri della select di tralasciare i record
deletati, avrei risolto il mio problema, ma non riesco a trovare nulla di
utile nell'help.
Ciao Ilenia


 esiste il concetto?
Mi pare di capire che il problema sia nell'allineamento della query con 
i dati memorizzati sul database: quando aggiorni una tabella lato server 
dovresti premunirti di aggiornare le query correlate lato client, poichè 
i dataset non sono una finestra sul db ma una sua replica.
Voglio dire: se esegui una query che seleziona 10 dati da una tabella e 
poi un'altra query che di questi ne cancella 5, la prima query 
continuerà a vederne 10 fino a quando non la riesegui, salvo darti un 
errore quando cerchi di modificarne uno che non esiste più.
procedure TForm1.ButtonCancellaClick(Sender: TObject);
begin
   // Eseguo la cancellazione del record
   qCancellaRecord.Close;
   qCancellaRecord.ParamByName('chiave').AsInteger := 1;
   qCancellaRecord.ExecSQL;
   // Rinfresco il dataset di selezione dei dati
   qSelezionaRecord.Close;
   qSelezionaRecord.Open;
end;
Saluti
	Marco Bortolani
 
in...@marcobortolani.it

La query di selezione veniva già rieseguita, ma per far funzionare il tutto
è stato necessario chiudere e riaprire l'archivio dopo la query di
cancellazione.
Grazie Marco.


 BDE
Perche' non l'hai detto prima? Con DB e BDE dimentica SQL, 
transizioni commit ed altro e usa quasi esclusivamente le 
TTable.
Tutto IMHO.


 TTable.
Concordo.



Ci sto lavorando da tempo e mi sta venendo l'ansia. A parte questo problema
sembra che funzioni bene.
Perchè dite di dimenticare sql?
Ilenia


 Perchè dite di dimenticare sql?
Risposta brevissima:
perche' Dbase e BDE non sono progettati per lavorare al meglio
con SQL.
Per maggiori info, cerca sulla rete.
Ciao.
