Hello,
we have found another bug with DOA 4.1.3.5 and XE6 20.0.16277.1276 which is related to QBE:
When using QBE in our filtering dialogs, some TDBEdits refuses certain special characters (like 'c' and 's' with carons), but others (like 'e' and 'i' with acutes) work ok. We have discovered that the problem is connected to definitions of Field.ValidChars and Field.IsCharValid and manipulation with ValidChars in TOracleDataSet.EnterQBEMode. Essentially ValidChars is a set of AnsiChar, but IsCharValid takes Char as a parameter.
function TField.IsValidChar(InputChar: Char): Boolean;
var
LChar: Char;
begin
if ValidChars <> [] then
begin
Result := False;
for LChar in ValidChars do
begin
if LChar = InputChar then
begin
Result := True;
Break;
end;
end;
end
else
Result := True;
end;
As you can see, empty ValidChars is interpreted as "all characters are valid". However EnterQBEMode sets ValidChars to any charater by setting its bits to 1. This works fine for one byte characters (<256), but larger ones are considered invalid because they cannot be represented in sets of AnsiChar such as ValidChars. We suggest that EnterQBEMode should set bits of ValidChars to 0, so all characters including the >255 ones are considered valid.
We did not have the time to wait for the official fix, so we patched OracleData.dcu in the following way and it seems to work ok:
In 32bit dcu, we changed 2E39A-2E3B9 from FF to 00. In 64bit dcu, we changed 4A730-4A74F from FF to 00.