2013-11-20 39 views
1

我在Access 2007数据库编写这个查询:SQL查询,选择所有值,当没有输入

SELECT Ordini.ID, Ordini.Data, Clienti.Cognome, Clienti.Nome, 
     DettagliOrdine.IDProdotto, 
     Prodotti.Descrizione, Prodotti.Prezzo, DettagliOrdine.Quantità, 
     ([Prezzo]*[Quantità]) AS Totale, Ordini.Note, Produttori.Nome, Ordini.Ordinato, 
     Ordini.Arrivato, Ordini.Ritirato 
FROM Produttori 
    INNER JOIN (Prodotti 
     INNER JOIN ((Clienti INNER JOIN Ordini ON Clienti.ID = Ordini.IDCliente) 
     INNER JOIN DettagliOrdine ON Ordini.ID = DettagliOrdine.IDOrdine) 
      ON Prodotti.ID = DettagliOrdine.IDProdotto) 
    ON Produttori.ID = Prodotti.IDFornitore 
WHERE (((Clienti.Cognome)=[Cognome: ]) 
    AND ((Clienti.Nome)=[Nome: ]) 
    AND (([Cognome: ]) Is Not Null)) 
ORDER BY Ordini.Data; 

该查询带来了用于研究的COGNOME和诺姆领域的输入框。

我需要,如果用户什么也没写(按ENTER键)该字段的研究标签是(该字段的所有值)。

es。如果用户编写一个COGNOME而不是NOME(在弹出NOME窗口时按下ENTER)研究将在所有NOME上用“COGNOME”完成。

我该怎么做?

回答

2

如果我理解正确的问题,我想你想这样的事情...

WHERE 
    (
     Clienti.Cognome=[Cognome: ] 
     OR [Cognome: ] Is Null 
    ) 
    AND 
    (
     Clienti.Nome=[Nome: ] 
     OR [Nome: ] Is Null 
    ) 

当参数值是零,没有过滤基于相应的字段进行的。但是,当参数值不为空时,它将用于过滤结果集,以便它仅包含具有匹配值的行。

+0

我该怎么做? – Domenico

+1

用我建议的版本替换查询中的WHERE子句。 – HansUp

+0

工作!非常感谢你! – Domenico

2

对于使用Access本身执行的查询,可以使用Nz()函数和LIKE运算符。例如,查询

PARAMETERS [LastName: ] TEXT(255); 
SELECT ID, LastName, FirstName 
FROM Clients 
WHERE LastName LIKE Nz([LastName: ],"*") 

将返回所有记录*如果输入任何在LastName:提示,但只能与指定的[姓氏]返回记录,如果我在提示符下键入的东西。

*实际上,姓氏存在的所有记录(即IS NOT NULL)。感谢HansUp进行更正。

+1

'WHERE LastName LIKE“*”'排除了'LastName'为空的行......这可能是Domenico实际需要的,但我认为他的意思是* all *行。 – HansUp

+2

@HansUp啊哈,好点。 Pesky'Null's .... –

+0

对不起,但不工作..如果我在弹出窗口中写入某些东西,请不要选择正确的请求,请选择总是全部......我该怎么办? – Domenico