Subject | IB_Query.Locate problem |
---|---|
Author | Mihai Chezan |
Post date | 2004-07-18T13:19:43Z |
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
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