El planteamiento de dsa132132 es totalmente correcto, lo que pasa es que quizás en lugar de AND ha de ser un OR (tampoco se exactamente lo que quiere conseguir), pero el uso de los 2 Locates en el IF no es erróneo
Código Delphi
[-]
if (not (DataModule.Query1.Locate('param1', Edit1.text, [])) and (DataModule.Query1.Locate('param2', edit2.text, [])) then
Application.Messagebox ( ........
Básicamente lo que hace el if este es que si
no existe un registro en el que el campo "param1" sea igual a Edit1.Text (es decir, Param1 <> Edit1.Text) y
sí existe un registro en el que el campo Param2 sea igual a Edit2.Text, muestre el mensaje
Quizás es que Param1 y Param2 no son los nombres de los campos??? Si fuera esto, tendrías que quitarle las comillas
No obstante, también creo que lo del SQL es una muy buena opción (por no decir la mejor si la tabla es grande)