Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Why this query gives me different results?
Message
From
06/10/2005 09:19:09
 
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Environment versions
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Network:
Windows XP
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01056683
Message ID:
01056714
Views:
27
>Same query different SET ENGINEBEHAVIOUR:
>
>
>SET ENGINEBEHAVIOR 70
>CREATE CURSOR cTest (God N(4), Mes N(2), MesCrea N(2), Egn C(10))
>INSERT INTO cTest VALUES (2003,11,11,"6504266641")
>INSERT INTO cTest VALUES (2003,12,12,"6504266641")
>INSERT INTO cTest VALUES (2004, 1, 1,"6504266641")
>INSERT INTO cTest VALUES (2004, 2, 2,"6504266641")
>
>
>fld_egn     = "6504266641"
>from_period = {^2003/05/15}
>
>SELECT AAAAAAAA.*;
>FROM cTest AAAAAAAA;
>WHERE AAAAAAAA.Egn == fld_egn AND;
>      STR(AAAAAAAA.God,4)+STRZERO(AAAAAAAA.Mes,2)+STRZERO(AAAAAAAA.MesCrea,2) IN;
>       (SELECT MAX(STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2)+STRZERO(BBBBB.MesCrea,2));
>               FROM cTest BBBBB;
>                    WHERE BBBBB.Egn == fld_egn .AND.;
>                          STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2) == LEFT(DTOS(from_period),6));
>INTO CURSOR cMaxRec READWRITE
>BROWSE NORMAL   && NOT Correct -> ONE RECORD WITH 2003, 11,11, [6504266641]. I want records for 200505
>
>** BUT
>SELECT MAX(STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2)+STRZERO(BBBBB.MesCrea,2));
>               FROM cTest BBBBB WHERE BBBBB.Egn == fld_egn                                      .AND.;
>               STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2) == LEFT(DTOS(from_period),6);
>INTO CURSOR Test1
>
>SELECT AAAAAAAA.*;
>FROM cTest AAAAAAAA;
>WHERE AAAAAAAA.Egn == fld_egn AND;
>      STR(AAAAAAAA.God,4)+STRZERO(AAAAAAAA.Mes,2)+STRZERO(AAAAAAAA.MesCrea,2) IN;
>       (SELECT * FROM Test1);
>INTO CURSOR cMaxRec READWRITE
>BROWSE NORMAL   && Correct NO RECORDS
>
>
>SET ENGINEBEHAVIOR 90
>
>SELECT AAAAAAAA.*;
>FROM cTest AAAAAAAA;
>WHERE AAAAAAAA.Egn == fld_egn AND;
>      STR(AAAAAAAA.God,4)+STRZERO(AAAAAAAA.Mes,2)+STRZERO(AAAAAAAA.MesCrea,2) IN;
>       (SELECT MAX(STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2)+STRZERO(BBBBB.MesCrea,2));
>               FROM cTest BBBBB;
>                    WHERE BBBBB.Egn == fld_egn .AND.;
>                          STR(BBBBB.God,4)+STRZERO(BBBBB.Mes,2) == LEFT(DTOS(from_period),6));
>INTO CURSOR cMaxRec READWRITE
>BROWSE NORMAL   && Correct - NO RECORDS
>
>
>FUNCTION STRZERO(lnNumber, lnSigns)
>RETURN PADL(TRANSFORM(lnNumber),lnSigns,"0")
>
>
>What is that?

A bug not fixed on VFP9,
the new VFP9 behaviour ( look the MAX() 1 NULL records returned )
fix the bug indirectly
CLEAR


CREATE CURSOR cTest (God N(4), Mes N(2), MesCrea N(2), Egn C(10))
INSERT INTO cTest VALUES (2003,11,11,"6504266641")
INSERT INTO cTest VALUES (2003,12,12,"6504266641")
INSERT INTO cTest VALUES (2004, 1, 1,"6504266641")
INSERT INTO cTest VALUES (2004, 2, 2,"6504266641")


fld_egn     = "6504266641"
from_period = {^2003/05/15}

SET ENGINEBEHAVIOR 70
TEST()

SET ENGINEBEHAVIOR 80
TEST()

SET ENGINEBEHAVIOR 90

TEST()


PROCEDURE TEST

? "ENGINEBEHAVIOR",SET("EngineBehavior")

selectMax =[SELECT MAX(STR(God,4)+PADL(mes,2,"0")+PADL(MesCrea,2,"0"));
               FROM cTest WHERE Egn == fld_egn  .AND.;
               STR(God,4)+PADL(mes,2,"0") == LEFT(DTOS(from_period),6)]

&selectMax INTO CURSOR Test1

? _TALLY

SELECT *;
FROM cTest ;
WHERE Egn == fld_egn AND;
      STR(God,4)+PADL(mes,2,"0")+PADL(MesCrea,2,"0") IN (&selectMax);
INTO CURSOR cMaxRec
? _TALLY
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform