Local SQL, problem with OR operator in WHERE clause

My Delphi1/BDE/Paradox application has a master table (MASTER.DB, around
25K records) and 3 other tables linked to it by the usual xxxID fields
(FORENAME.DB, PLACES.DB, OCCUP.DB). I can successfully select all
records with this query,

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT M.SURNAME, F.FORENAMES, P.PLACE, O.OCCUPATION');
Query1.SQL.Add('FROM MASTER M, FORENAME F, PLACES P, OCCUP O');
Query1.SQL.Add('WHERE (M.FORENAMEID = F.FORENAMEID) AND' +
'(M.PLACEID = P.PLACEID) AND (M.OCCUPID = O.OCCUPID)');

The program has 4 TEdits in which the user enters a search string. The
WHERE clause is next extended if the user enters search parameters into
these TEdits,

if CheckForAnyUserParameterEntry then
  Query1.SQL.Add('AND');
if Parameter1Present then begin
  Query1.SQL.Add('(F.FORENAMES = :Fore)');
  Query1.ParamByName('Fore').AsString := Edit1.Text;
end;
if Parameter2Present then begin
  Query1.SQL.Add('AND');               { << Problem line with OR }
  Query1.SQL.Add('(P.PLACE = :Plac)');
  Query1.ParamByName('Plac').AsString := Edit2.Text;
end;
Query1.Open;

This runs fine if the logical operator in the << Problem line is AND or
AND NOT. If the operator is OR then opening this query very quickly
throws up an EDBEngineError with the message 'Query appears to ask two
unrelated questions'. If an extra set of parentheses is placed around
these two parameters to force an evaluation of the OR condition,

if CheckForAnyUserParameterEntry then
  Query1.SQL.Add('AND(');   { 1st extra parenthesis }
if Parameter1Present then begin
  Query1.SQL.Add('(F.FORENAMES = :Fore)');
  Query1.ParamByName('Fore').AsString := Edit1.Text;
end;
if Parameter2Present then begin
  Query1.SQL.Add('OR');               { << Problem line with OR }
  Query1.SQL.Add('(P.PLACE = :Plac)');
  Query1.ParamByName('Plac').AsString := Edit2.Text;
end;
if CheckForAnyUserParameterEntry then
  Query1.SQL.Add(')');   { 2nd extra parenthesis }
Query1.Open;

then the program seems to accept the SQL syntax initially. The hard disc
chatters away merrily and after several seconds the program crashes with
a GPF in idqry01.DLL.

Can anyone explain this behaviour, and/or suggest a way round it?  

--
Barney Tyrwhitt-Drake