Subject | Re: [IBO] TIB_LocateCursor problem |
---|---|
Author | jwharton@ibobjects.com |
Post date | 2004-03-11T22:12:10Z |
So you got it to work correctly by making a change to the code?
Will you send me the modified unit?
Thanks,
Jason Wharton
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
I have a problem with TIB_Query.Locate().
The base SQL Text is a JOIN statement, like:
select a.*
from a
join b on a.id_b = b.id_b
with MasterSource to table "c" and MasterLinks set to: b.id_c = c.id_c
But if I want to locate "a.id_b", the resulting SQL looks like:
SELECT a.id_a
FROM a
join b on a.id_b = b.id_b
WHERE b.id_c=? /* BIND_0 */
AND b.id_c=? /* MLNK_id_c_0 */
AND (((id_b = ? /* LOC_2 */ )))
That leads to an error:
ISC Fehlermeldung:
Dynamic SQL Error
SQL error code = -204
Ambiguous field name between table a and table b
id_b
I found 2 problems:
1) the double b.id_c=? ... comes from using a hardcoded ? as ParamChar
(ParamChar was :)
2) the search-condition should be "a.id_b = ? ..." and not "id_b = ?",
but the relation name is not used because in
"procedure TIB_LocateCursor.SysPrepareSQL;"
I found this line:
if BDataset.SysFieldNames.Count = BDataset.FieldCount then
"use only FieldName" else "useFullFieldName"
==> solution
it should be checked if the SQL is a join (JoinLinks not empty or
contains the key word 'JOIN').
Than the locate cursor should allways use the fullFieldName.
Andreas Hesse
Will you send me the modified unit?
Thanks,
Jason Wharton
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
I have a problem with TIB_Query.Locate().
The base SQL Text is a JOIN statement, like:
select a.*
from a
join b on a.id_b = b.id_b
with MasterSource to table "c" and MasterLinks set to: b.id_c = c.id_c
But if I want to locate "a.id_b", the resulting SQL looks like:
SELECT a.id_a
FROM a
join b on a.id_b = b.id_b
WHERE b.id_c=? /* BIND_0 */
AND b.id_c=? /* MLNK_id_c_0 */
AND (((id_b = ? /* LOC_2 */ )))
That leads to an error:
ISC Fehlermeldung:
Dynamic SQL Error
SQL error code = -204
Ambiguous field name between table a and table b
id_b
I found 2 problems:
1) the double b.id_c=? ... comes from using a hardcoded ? as ParamChar
(ParamChar was :)
2) the search-condition should be "a.id_b = ? ..." and not "id_b = ?",
but the relation name is not used because in
"procedure TIB_LocateCursor.SysPrepareSQL;"
I found this line:
if BDataset.SysFieldNames.Count = BDataset.FieldCount then
"use only FieldName" else "useFullFieldName"
==> solution
it should be checked if the SQL is a join (JoinLinks not empty or
contains the key word 'JOIN').
Than the locate cursor should allways use the fullFieldName.
Andreas Hesse