Newsgroup: it.comp.www.asp
Titolo: Ricerca su database con più campi e più operatori booleani (ASP, Vbscript, Access)

Buongiorno,
mi trovo in difficoltà a scrivere il codice necessario per produrre il
risultato di una ricerca per un form di questo tipo:
[campo 1]    campo di testo(AND tra le parole)
AND/OR       operatore a scelta
[campo 2]    lista a tendina con elenco di temini
AND/OR       operatore a scelta
[campo 3]    campo di testo(AND tra le parole)
AND/OR       operatore a scelta
[campo 4]    lista a tendina con elenco di temini
Il database contenente i dati è Access, scripting: Vbscript e pagine ASP,
interrogazione con query SQL.
Qualcuno ha da darmi una dritta sul codice da inserire per realizzare una
query da sottoporre al database con un caso come questo?
Grazie. Saluti
Alessio
atu...@ticino.com

SELECT * FROM tabella WHERE campo1 LIKE '%" & rfCampo1 & "%' " & rfOp1 & "
campo2... ecc.
Non va bene?
--
:: Fate i bravi e non clonate le pecore!
:: Distractly yours... 
man...@ufologia.net

 Non va bene?
Ringrazio per l'aiuto, provo ...
Ma se un operatore non viene selezionato o un campo č vuoto?
Es: Campo1 = pomodoro; Op 1 = AND; Campo 2 = in scatola; Op 2 = ""; Campo 3
= primavera
la select verrebbe:
SELECT * FROM tabella WHERE campo1 LIKE pomodoro AND campo 2 LIKE in scatola
campo 3 LIKE primavera
=> Manca l'operatore tra il campo 2 e il campo 3.
Se imposto OR come valore predefinito per gli operatori falso la ricerca
Inoltre se il campo 1 e il 2 sono vuoti come avviene la ricerca?
Ci vorrebbe una select che si compone con gli elmenti non vuoti, ma non so
come farlo.

Se il campo1 o il campo2 sono vuoti non c'è problema perchè la ricerca LIKE
'%%' è accettata come se levassi quel membro (ops... hehehe).
Scusa non ricordo se Access accetta % o vuole * verifica.
Nel caso degli operatori invece devi fare in modo che non sia permesso
ometterli. O dai AND (che è l'operatore "standard" nelle ricerche
incrociate) come predefinito da codice ASP nel caso
Request.Form("Operatore1") & "" = ""  oppure quando permetti all'utente di
scegliere l'operatore, metti dei radiobutton, selezionando già AND di
default.



Io farei:
strsql="select * from tabella where campo1 like '%"+campo1+ "%' "
if campo2<>"" then
    strsql=strsql & operatore1 & " campo2 like '%"+campo2+"%' "
    end if
if campo3<>"" then
    strsql=strsql & operatore2 & " campo3 like '%"+campo3+"%' "
    end if
if campo4<>"" then
    strsql=strsql & operatore3 & " campo4 like '%"+campo4+"%' "
    end if
Ciao
--
Andrea Z

     end if
Ti ringrazio. Io ho risolto così:
Definisco delle variabili.
Es. :
<%
Dim Param1
Param1 = ""
if (Request.Form("spec")     <> "") then Param1 = Request.Form("spec") else
Param1 = ""
%>
Se il campo del form è pieno la variabile è piena, se il campo del form è
vuoto la variabile è vuota.
Inoltre definisco delle variabili contentenenti le altri parti della stringa
della SELECT.
Es. :
<%
Dim ParamX
ParamX = ""
if (Param = "" and Param1 = ""  and Param2 = ""  and
Param3 = ""  and ParamA = ""  and ParamB = ""  and
ParamC = "" ) then ParamX = "" else ParamX ="SELECT *  FROM Tabella  WHERE"
%>
Dove ParamX è la prima parte della SELECT, se tutti i campi e gli operatori
sono vuoti sarà vuota anche la stringa; altrimenti conterrà "SELECT *  FROM
Tabella  WHERE"
Terza fase compongo la stringa della SELECT
<%
set RecordsetDB = Server.CreateObject("ADODB.Recordset")
RecordsetDB.ActiveConnection = MM_ConnectDBCE_STRING
RecordsetDB.Source = ParamX & ParamX2 & Param & ParamX3 & Param& ParamX4 &
ParamA &
ParamX5 & Param1 & ParamX6 & Param1 & ParamX7 & ParamB & ParamX8 &
Param2 & ParamX9 & ParamC & ParamX10 & Param3 & ParamX11 & ParamX12
RecordsetDB.CursorType = 0
RecordsetDB.CursorLocation = 2
RecordsetDB.LockType = 3
RecordsetDB.Open()
RecordsetDB_numRows = 0
%>
Prima della SELECT per poter cercare con due termini in un campo ho
aggiunto:
<%
Param = replace(request.form("titolo"),"'","''")
Param = replace(Param, " ", "%'AND Titolo like'%")
%>
Funziona tutto. Viene generata una SELECT in funzione dei campi riempiti nel
form.
Grazie a tutti.
Alessio