Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Why this query gives me different results?
Message
De
06/10/2005 09:19:09
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Network:
Windows XP
Database:
Visual FoxPro
Divers
Thread ID:
01056683
Message ID:
01056714
Vues:
28
>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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform