Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
New CURSOR
Message
 
À
29/09/2004 10:58:42
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Titre:
Divers
Thread ID:
00947174
Message ID:
00947201
Vues:
13
>Peter,
>
>To create new cursor because it is different from the first one
>means Desc field split into 3 fields desc1 desc2 desc3 in the
>table2 or newcursor after the process .
>
>Level1 level2 level3 Desc are fieldnames
>
>010 002 BBBBBB are data for each row or record in the table1
>
>Rgds


Try this: (not tested very well). Not very elegant code but:
CREATE DBF cTest (Lev1 C(3), Lev2 C(3), Lev3 C(3), Descr C(20))

INSERT INTO cTest (Lev1, Descr) VALUES ("010","AAA")
INSERT INTO cTest (Lev1, Lev2, Descr) VALUES ("010","002", "BBBBBB")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","005", "CCCCCC")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","013", "DDDDDD")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","015", "EEEEEE")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","016", "FFFFFF")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","002","018", "GGGGGG")
INSERT INTO cTest (Lev1, Lev2, Descr) VALUES ("010","003", "HHH")
INSERT INTO cTest (Lev1, Lev2, Lev3, Descr) VALUES ("010","003","005", "JJJJJJ")

...

SELECT GetDesc(1, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr1,;
       GetDesc(2, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr2,;
       GetDesc(3, cTest.Lev1+cTest.Lev2+cTest.Lev3) AS Descr3;
       FROM cTest WHERE .NOT. EMPTY(Lev3);
       INTO CURSOR cTest1
BROWSE


FUNCTION GetDesc(clevel, cCode)
    LOCAL ret_val
    DO CASE
       CASE cLevel == 1
            SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) INTO ARRAY aArr
            ret_val = aArr[1]
       CASE cLevel == 2
            SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) .AND. cTest.Lev2 = SUBSTR(cCode,4,3) INTO ARRAY aArr
            ret_val = aArr[1]
       CASE cLevel == 3
            SELECT cTest.Descr FROM cTest WHERE cTest.Lev1 == LEFT(cCode,3) .AND. cTest.Lev2 = SUBSTR(cCode,4,3) .AND. cTest.Lev3 = RIGHT(cCode,3) INTO ARRAY aArr
            ret_val = aArr[1]
    ENDCASE

RETURN PADR(ret_val, 30, " ")
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform