И эта ошибка происходит, если включено свойство SmartFetch.
Project raised exception class EIBCError with message 'Dynamic SQL Error
SQL error code = -204
Ambiguous field name between table TYPES and table TABLE1
ID'.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
Var
i: integer;
begin
UniConnection1.Connect;
UniQuery1.close;
UniQuery1.Conditions.Clear;
UniQuery1.MacroByName('TYPES').Value := 'LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME';
UniQuery1.ParamByName('USERNAME').AsString := 'user';
UniQuery1.open;<<< ошибка при открытии
UniQuery1.close;
UniQuery1.Conditions.Add('tname', 'T.NAME = :TNAME', True);
UniQuery1.Conditions.Enable;
UniQuery1.ParamByName('TNAME').AsString := 'qqqq';
UniQuery1.Conditions.Add('tname', 'T.ID > 10', True);
Memo1.Lines.Add(UniQuery1.FinalSQL);
UniQuery1.open;
Memo1.Lines.Add(UniQuery1.FinalSQL);
Memo1.Lines.Add('');
Memo1.Lines.Add('params');
for I := 0 to pred(UniQuery1.Params.Count) do
Memo1.Lines.Add(UniQuery1.Params[i].Name + ' = ' + UniQuery1.Params[i].AsString);
end;
Я забыл добавить, что база для Firebird 3 (UTF8).
Запрос, который выдает FinalSQL, вполне нормальный и в IBExpert ID он выполняется без ошибок
Код: Выделить всё
SELECT
A.ID,
A.NAME NAME_USER,
A.REMARK
FROM TABLE1 A
LEFT JOIN TYPES T ON T.ID = A.ID_TYPE AND T.USERNAME = :USERNAME