Subject RE: [IBO] IB_Query.Locate problem
Author Jason Wharton
Thanks for helping out with this sample application.
This was a tough issue to solve but I got it.
The fix for this will be in the next release.

Jason Wharton


> -----Original Message-----
> From: Mihai Chezan [mailto:gsmcq@...]
> Sent: Sunday, July 18, 2004 6:20 AM
> To: IBObjects@yahoogroups.com
> Subject: [IBO] IB_Query.Locate problem
>
>
> I have 2 tables:
> CREATE TABLE dep (
> id_dep INTEGER NOT NULL,
> name VARCHAR(50) NOT NULL,
> CONSTRAINT dep_pk PRIMARY KEY (id_dep)
> );
>
> CREATE TABLE person (
> id_person INTEGER NOT NULL,
> name VARCHAR(50) NOT NULL,
> id_dep INTEGER NOT NULL,
> CONSTRAINT person_pk PRIMARY KEY (id_person)
> );
>
> I have an IB_QueryDep as master and an IB_QueryPerson as detail.
> If I make an
> IB_QueryPerson.Locate('name', VarArrayOf(['michael']), []))
> the locate fails even if michael exists.
> The locate fails because the generated sql for locate looks like this:
> SELECT person.id_person
> FROM
> person
> WHERE person.id_dep=? /* BIND_0 */
> AND person.id_dep=? /* MLNK_ID_DEP_0 */
> AND (((PERSON.NAME = ? /* LOC_1_PERSON_NAME */ )))
>
> and as parameters values:
> [BIND_0] = <n> 0
> [MLNK_ID_DEP_0] = 2
> [LOC_1_PERSON_NAME] = 'michael' ]
>
> But the sql should have been:
> SELECT person.id_person
> FROM
> person
> WHERE
> person.id_dep=? /* MLNK_ID_DEP_0 */
> AND (((PERSON.NAME = ? /* LOC_1_PERSON_NAME */ )))
>
> or the parameter values should have been:
> [BIND_0] = 2
> [MLNK_ID_DEP_0] = 2
> [LOC_1_PERSON_NAME] = 'michael' ]
>
> If I remove the master detail relation then it works ok:
> SELECT person.id_person
> FROM
> person
> WHERE (((PERSON.NAME = ? /* LOC_1_PERSON_NAME */ )))
>
> Where is the problem?
>
> I've included a test-case Problem-IB_Query.Locate.zip:
http://groups.yahoo.com/group/IBObjects/files/Problem-IB_Query.Locate.zip