Newsgroup: it.comp.lang.delphi
Titolo: Select e modifica campi

D7, Ado e Access.
Dopo essermi un pò impratichito con i vari update, insert ecc... sto ora 
cercando di adattare il codice del mio server con SQL.
Dovrei svolgere questa operazione:
accedere alla tabella (7 campi per record), verificare per tutti i record il 
campo [LastState].
Per ogni record che in questo campo contiene il valore "NE" devo leggere il 
campo [LastDate] che contiene una data e ora (StrToDateTime(Now) e 
confrontare tale valore con un Now letto al momento.
Se la differenza tra i due periodi è superiore ad un valore prefissato devo 
sostituire il valore "NE" con "SC".
A questo punto mi chiedevo se il procedimento è simile a quello che sto 
utilizzando finora (con locate, first, while not eof ecc) oppure se 
utilizzando SQL c'è la possibilità di predisporre istruzioni composte che 
ottengano lo stesso risultato.
Grazie
V.

 devo sostituire il valore "NE" con "SC". 
qui sta il busillis. La NOW è disponibile in Jet, ma per il confronto di 
date/ore il motore Jet offre un po' pochino. Di seguito ti posto delle note  
al linguaggio che mi ero estrapolato tempo fa dopo alcuni esperimenti (non 
sono riuscito a trovare documentazione in merito).
Se hai bisogno di qualcosa di più raffinato, al posto della NOW e 
istruzioni di comparazione "base", puoi sempre costruirti un parametro da 
Delphi (rispettando la sintassi delle date/ora di seguito indicata) e 
passarlo alla query
  UPDATE TABELLA 
    SET LASTSTATE = "SC" 
    WHERE LASTSTATE = "NE" 
      AND LASTDATE <= INP_PARAMETRO_DATA_ORA
***********************************************************************
** Date e ore in Jet
***********************************************************************
Le date nelle query si indicano come 
  #M/g/aaaa#
Il formato completo è
  #M/g/aaaa hh:mm#
per esempio la query
  SELECT NOW > #10/04/2006 12:00#
restituisce -1 (TRUE) se sono le ore 12:15 del 4/10/06, in caso contrario 
restituisce 0 (FALSE).
------------------
Altrimenti si possono estrarre parti di data/ora con le funzioni HOUR(), 
MINUTE(), SECOND().
Questa restituisce 17
  SELECT HOUR(#24/12/2006 17:00#) 
questa restituisce 0
  SELECT HOUR(#24/12/2006#) 
questa restituisce 55
  SELECT minute(#24/12/2006 12:55#) 
questa restituisce 9
  SELECT SECOND(#24/12/2006 12:55:09#) 
-------------------
I millisecondi non sono supportati. Se la data/ora non è valida viene 
generato un errore. Questa data/ora è valida 28 febbraio 2004 ore 12:55 e 
11 secondi
  SELECT (#02/28/2004 12:55:11#) 
questa no (88 secondi)
  SELECT (#02/28/2004 12:55:88#) 
e questa neanche (31 febbraio)
  SELECT (#02/31/2004#) 
questa sì (29 febbraio di un anno bisestile)
  SELECT (#02/29/2004#) 
-----------------------
La comparazione tra date/ore avviene normalmente. Questa restituisce -1 
(TRUE):
  SELECT (#13:00# > #09:00#) 
-- 
Mauro Falzari
"La realtà superava i miei timori:
il capitano Achab era sul cassero, a poppa".
  (Herman Melville, in "Moby Dick", Londra 1851)

"Mauro Falzari" <mauro_...@despammed.com.invalid> ha scritto nel 
messaggio
[...]
Grazie Mauro,
con quello che mi hai postato dovrei risolvere (almeno spero)...ora ci 
studio
quella che ho indicato è la routine più "complessa" del mio codice, le altre 
sono semplici query...
forse c'è giusto un dettaglio che chiederò in seguito
per il momento grazie
V. 

sostituire il valore "NE" con "SC".
update tuatabella set LastState = "SC" where (LastState = "NE") and
(LastDate - :now) > tuovalore
Al posto di :now ci metti ciò che Access usa per rappresentare la
data/ora corrente.
Bada che sei Off Topic.

(LastDate - :now) > tuovalore
Anzi, forse (:now - LastDate)

 Bada che sei Off Topic.
lo so, mi sono permesso perchè ho visto che bene o male un pò si SQL viene
tollerato...
io ho un borland.public.delphi.database.ado...nessun problema a comprendere
l'inglese ma la mia grammatica vacilla un pò ed in certi casi potrei
trovarmi in difficoltà ad esprimere un concetto in questa lingua
qualcuno sa se c'è qualche ng in italiano che tratta l'argomento?
ciao
V

qualcuno sa se c'è qualche ng in italiano che tratta l'argomento?
Che io sappia, nei gruppi Borland è tollerato l'uso della propria
lingua, per chiedere informazioni, quindi anche l'italiano (sì,
nonostante sia un gruppo a prevalenza inglese).

 l'argomento? 
it.comp.appl.access
it.comp.software.database
