Newsgroup: it.comp.www.asp
Titolo: Ricerca record con alcuni campi vuoti

Ciao a tutti,
ho un database access composto da record che hanno alcuni campi
(testo) compilati mentre altri possono essere vuoti, percui avrei il
campo1,campo2,campo3 sempre pieni per tutti i record e il
campo4,campo5,campo6 che puo' essere pieno o vuoto.
Quindi, ho una pagina di ricerca in cui posso ricercare i record per
tutti i campi citati in precedenza.
Il problema è che se faccio la ricerca trovo solo i record che hanno
tutti i campi pieni (campi dall'1 al 6) mentre gli altri(campi 1,2,3
compilati e 4,5,6 facoltativi) no, sia che inserisca dei parametri nel
form di ricerca o che li lasci tutti vuoti...per curiosità ho
sostituito i campi vuoti del db con un carattere (es. '-'), e la
ricerca funziona perfettamente...quindi sembra che in fase di ricerca
non consideri i record non compilati in ogni campo...perchè ? Come
posso fare ?
La ricerca la imposto cosi':
WHERE CAMPO1 = 'VARCAMPO1' AND CAMPO2 LIKE 'VARCAMPO2' AND CAMPO3 LIKE
'VARCAMPO3' AND CAMPO4 LIKE 'VARCAMPO4' AND CAMPO5 LIKE 'VARCAMPO5'
AND CAMPO6 LIKE 'VARCAMPO6'
Ho provato a modificare la ricerca in questo modo:
WHERE ... AND(CAMPO4 LIKE 'VARCAMPO4' OR CAMPO4 IS NULL) AND (CAMPO5
LIKE...
ma in questo modo funziona se nel form di ricerca non inserisco valori
per VARCAMPO4,VARCAMPO5 e VARCAMPO6...mentre se inserisco nel form,per
esempio, un valore per VARCAMPO4 mi trova tutti i record che hanno nel
campo4 il valore VARCAMPO4 piu' tutti i record che hanno il campo4
vuoto...quindi non va bene...
Sbaglio qualcosa ?
Che valore devo assegnare alle variabili 'varcampo1','varcampo', ecc,
nel caso io lasci i campi del form di ricerca vuoti ?
Ho provato con 'null', con le doppie virgolette ( "" ) ma non
funziona...
Ciao e grazie !

 LIKE...
and (campo4 like '"&Request("campo4")&"' or ('"&Request("campo4")&"'='')) <=
se non passi campo4 dovrebbe considerarlo sempre true

Se sono campi di testo pui lasciarli nella query, controllando prima se sono
vuoti, nel qual caso assegni alla variabile '%%' (MS SQL SERVER, access non
ricordo.. mi pare *?)
Quindi:
strCampo1 = "%%"
If Request("campo1") & "" <> "" Then strCampo1 = Request("campo1")
....
strSQL = "SELECT * FROM [MYTABLE] WHERE CAMPO1 LIKE '" & strCampo1 & "'
AND..."
Per i valori numerici invece o fai in modo di non inserire valori nulli a
priori, assegnando che ne so -1 al posto di valori vuoti.
IN questo caso vale il discorso di sopra:
intCampo1 = "-1"
If Request("campo1") & "" <> "" Then intCampo1 = CInt(Request("campo1"))
Oppure crei la string SQL in modo condizionale
If Not IsNull(intCampo1) Then strSQL = strSQL & " AND campo1 = " & intCampo1
xMANIGHTx

potresti risolvere la cosa in questo modo: 
strSql="SELECT * FROM NOMETABELLA WHERE id > 0" 
Dim filtroa,filtrob,filtroc,filtrod
if Campo1 <> "" Then
	filtroa="and CAMPODB ='" & Campo1 & "'"
End if
 
 If Campo2 <> "" Then
	filtrob="And CAMPODB='" & Campo2 & "'" 
end if
if Campo3 <> "" Then
	filtroc="and CAMPODB ='" & and Campo3 & "'"
	filtrod="OR CAMPODB='" & Campo4 & "'"
end if
'andando avanti cosl p er tutti i campi di cui hai bisogno
strSql= strSql  & filtroa &  filtrob & filtroc & filtrod
	objRso.Open strSql , objCon, adOpenKeyset, adLockReadOnly, adCmdText
--
Enjoy the .NET community! ASPItalia.com
 
http://forum.aspitalia.com/
 
http://www.aspitalia.com/

Sě, questa č sicuramente la strada migliore, poi ho indicato anche la strada
che voleva percorrere claudio