Hello,
I have some problems with a complex SQL-Statement and DynamicWhere, which results in a Token unknown error.
Given is this SQL-Statement:
SELECT TRANS_PREISE.ID, TRANS_PREISE.TRANSFERID, TRANS_PREISE.STRECKENID, TRANS_PREISE.SAID, TRANS_PREISE.EKCURRENCY, TRANS_PREISE.EKBASISCURRENCY, TRANS_PREISE.VKMINITRANSFER, TRANS_PREISE.VKBUSTRANSFER, TRANS_PREISE.VKBOOTSTRANSFER, TRANS_PREISE.VKBUSTRANSFERCHILD, TRANS_PREISE.VKBOOTSTRANSFERCHILD, TRANS_PREISE.EKCURRENCY_TRANS2, TRANS_PREISE.EKBASISCURRENCY_TRANS2, TRANS_PREISE.EKCURRENCY_TRANS3, TRANS_PREISE.EKBASISCURRENCY_TRANS3,
TRANS_BASE.KREDITORID, TRANS_BASE.EKCURRENCY AS CURRENCYCODE,
SAISONABSCHNITTE.DATUMVON, SAISONABSCHNITTE.DATUMBIS,
TRANS_STRECKEN.BEZEICHNUNG AS STRECKENBEZEICHNUNG,
ADRESSEN.NAME AS KREDITORNAME,
TRANS_EINSATZGEBIETE.AIRPORTCODE,
AIRPORTS.ISOLAND
FROM TRANS_PREISE
JOIN TRANS_BASE on TRANS_PREISE.TRANSFERID = TRANS_BASE.ID
JOIN SAISONABSCHNITTE on TRANS_PREISE.SAID = SAISONABSCHNITTE.SAID
JOIN TRANS_STRECKEN on TRANS_PREISE.STRECKENID = TRANS_STRECKEN.ID
join TRANS_EINSATZGEBIETE on TRANS_STRECKEN.EINSATZGEBIETID = TRANS_EINSATZGEBIETE.ID
join AIRPORTS on TRANS_EINSATZGEBIETE.AIRPORTCODE = AIRPORTS.CODE
JOIN ADRESSEN on TRANS_BASE.KREDITORID = ADRESSEN.ID
where
{WHERE}
On runtime I add one (or more) where-clause(s) by DynamicWhere like this:
if AAirportCode <> '' then
FQuery.DynamicWhere.Expression := FQuery.DynamicWhere.NewBinaryExpression('TRANS_EINSATZGEBIETE', 'AirportCode', dboEqual, AAirportCode, datString)
Which results in this xml (with AAirportCode = ‘TAG’):
<?xml version="1.0"?><query xmlns="http://www.remobjects.com/schemas/dataabstract/queries/5.0" version="5.0"><where><binaryoperation operator="Equal"><field tablename="TRANS_EINSATZGEBIETE">AirportCode</field><constant type="String" null="0">TAG</constant></binaryoperation></where></query>
This looks ok for me,
When I open the TDAMemDataSet behind FQuery, I got an error “SQL error code -104 Token unknown - line 16, column 51 =.”
Any idea what is going wrong here? I did it this way hundreds of time and it works all fine, only in this statement it goes wrong. For shure I am overlooking something, but I don’t get it.
BTW: Without WhereClause or with a parameterized whereClause the Statement works like a charm.
Environment is Delphi Tokyo 10.2.3 Pro, IBDAC 6.1.7, RODA 9.4.107.1363. Firebird 2.5. 32 bit Windows VCL Application
Kind regards
Udo Treichel