Search code examples
delphifirebirdfirebird2.5firedac

Firedac select working with Firebird returns no records


Hello I'm working with Firedac (Delphi Seattle) using Firebird (2.5) as a database, when I run this query using a TFDQuery, no records are returned:

SELECT ID FROM USERS WHERE PWD = 'êHÆ–!+'

The same query within a Database program as IbExpert return one record. Is there some parameter with Firedac components to configure that can solve this issue. Thanks.


Solution

  • It's in the query string and it's the ! char. By default, query strings are preprocessed, and you must escape constant chars like !, &, :, ?, { or }, otherwise they are used as special chars.

    Your best option is using parameters. That will (except other benefits) get rid of that ! char from the preprocessed command:

    FDQuery.SQL.Text := 'SELECT ID FROM USERS WHERE PWD = :Password';
    FDQuery.ParamByName('Password').AsString := 'êHÆ–!+';
    FDQuery.Open;
    

    Another option is escaping that constant char or disable macro preprocessor. For more information see the Special Character Processing topic.