16 messaggi dal 29 maggio 2001
Salve a tutti.

Ho un problema, che definirei di priorità, con un istruzione SQL. Ho un DB Access da cui vorrei estrarre un solo record che soddisfi 2 condizioni: ovvero se la prima condizione è falsa allora procede con la seconda:

1° CONDIZIONE
sql = "SELECT top 1 * FROM Tab WHERE campo_A = TRUE"

nel caso in cui non ci sia nessun record che soddisfi tale query allora (senza che l'utente ne abbia visione) il codice dovrebbe far eseguire la seconda query

2° CONDIZIONE
sql = "SELECT top 1 * FROM Tab WHERE campo_B = FALSE"

Questo perché ho bisogno che mi vengano estratti prima tutti i record con campo_A = true e poi (dopo aver completato questi) quelli con campo_B = false.

E' fondamentale che l'utente non si accorga di nulla e non debba premere per esempio un bottone nel caso la prima condizione non dia risultati per avviare la seconda condizione.

Spero di essere stato chiaro.
Ringrazio tutti quelli che vorranno darmi qualche dritta.







635 messaggi dal 06 settembre 2002
Ciao,
non credo di aver capito correttamente, tuttavia:
'connessione al database
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("TUO_DATABASE.mdb")&";"


'prima query
sql = "SELECT * FROM Tab WHERE campo_A = TRUE"
'Genero il recordset
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql, Conn,3,3
if rs.RecordCount>0 then
'Ci sono record che soddisfano la condizione impostata
--- tuo codice ---
else
'Non ci sono record che soddisfano
sql2="Select * FROM tab WHERE campo_A = FALSE"
set rs2.Open sql2, Conn,3,3

--- tuo codice ---
rs2.Close
set rs2=Nothing
end if
rs.Close
Conn.Close
set rs=Nothing
Set Conn=Nothing

Spero di essere stato di aiuto. Ciao

 JD

OJD
16 messaggi dal 29 maggio 2001
Grazie.
Adesso ci provo

16 messaggi dal 29 maggio 2001
Azz...
c'è un problema. Siccome la query mi restituisce sempre un solo record (io uso l'istruzione SELECT TOP 1 ...) il valore restituito da rs.RecordCount è sempre uguale a -1 (ma non dovrebbe essere = 1 ???)

Stavo pensando di utilizzare un controllo sugli errori. Del tipo

if err.number=0 then

-- codice ---
vuol dire che c'è un record che soddisfa la mia prima query

else

---codice---
mi butto sulla seconda query


Eppoi avevo una domanda. Se non ci sono record nel database Access ritorna questo errore:

ADODB.Field errore "80020009'

è possibile intercettarlo ?
Se io scrivo questo codice

if err.number=80020009 then

mi da un errore.

Un saluto
&
un grazie

19 messaggi dal 11 luglio 2001
Per il problema con Rs.RecordCount prova ad aprire il recordset in questo modo:

Rs.Open strSQL, Conndb, adOpenKeySet

Ciao

1.605 messaggi dal 06 settembre 2002
prova così SELECT top 1 *, FROM Tab
where campo_A = true or ( campo_B= true and campo_A = false )
order by iif(campo_A = true,1,2)

FORZA LA MAGICA ROMA

FORZA LA MAGICA ROMA

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.