Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Biblioraft...
 Biblioraft
 
 3/11/2011 9:52:14 AM
User is offlineji_ci
191 posts
5th


Biblioraft
 (Romania)
Am de facut o baza de date Biblioraft! Am bibliorafturile care contin dosare care la randul lor au documente! Problema e ca unele bibliorafturi contin documente fara a fi introduse in dosar! De ex un biblioraft poate avea doc1, doc2, doc3, dosar1, dosar2, dosar3! Am facut tabelele biblioraft(idbibl,denbibl), compbiblioraft(idcomp,dencomp) - aici introduc document si dosar, tipdocument(idtipdoc,dentipdoc), biblioraft_c(idbibl, idcomp, idcbibl(cheie primara), nrcbibl(cheie surogat cu idbibl), datecbibl) si o tabela dosar_c(idcbibl, nrdoc(cheie surogat cu idcbibl), iddoc(cheie primara), datedoc)! E bine asa?
 3/11/2011 10:20:38 AM
User is offlineMarian Dobre
398 posts
3rd


Re: Biblioraft
 (N/A)
Cred ca ar fi bine sa creezi dosarul dosar0 (eventual dosar1) ca un dosar fals in care sa-ti introduci documentele din biblioraft neindosariate.Ideea este ca primul dosar din fiecare biblioraft sa fie de acest tip.

Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 3/11/2011 11:11:04 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Eu as tine toata asta intr-o structura arborescenta. E mai simplu dar si mai complicat in acelasi timp.

Id        IdParent      Denumire
1         .Null.           Biblioraft 1
2            1              Doc1
3            1              Doc2
4            1              Dosar1
5            1              Doc3
6            1              Dosar2
7            4              Doc1
8            4              Doc2
9            1              Dosar3
10          6              Doc2
11          6              Dosar3
12          11            Doc1

Ia sa-mi spui tu mie daca, uitandu-te la structura de mai sus, poti sa deduci documentele care apartin fiecarui dosar si ce se intampla daca un dosar va contine alt dosar pe langa documente.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/11/2011 12:58:48 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Pai eu zic asa: Biblioraftul1 (idparent=1) contine Dosarul(idParent=4) si documentul Doc3. Dosarul (idParent=4) contine Dosarul(idParent=6). Dosarul(idParent=6) contine Dosarul3(idParent=11) si Doc2. Iar Dosarul3 contine doc1. Poare ma insel ... nu pot sa identific care e Dosarul1 si care Dosarul2.

 3/11/2011 1:26:19 PM
User is offlineMarian Dobre
398 posts
3rd


Re: Biblioraft
 (N/A)

Din cate stiu eu un biblioraft contine numai dosare iar un dosar contine numai documente. Alceva nu. In aceste conditii ai 3 tabele :

  1. Biblioraft(IdBiblioraft, DenBiblioraft, ...)
  2. Dosar(IdDosar,  IdBiblioraft, ...)
  3. Document(IdDocument, IdDosar,  IdBiblioraft, ...)

 Daca aceasta regula este incalcata atunci observatia lui Grig este mai mult decat intemeiata.


Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 3/11/2011 1:33:25 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A) Modified By Grigore Dolghin  on 3/11/2011 10:09:36 PM)
Pai, nu. Inregistrarea cu IdParent=1 nu e biblioraft. Vreau sa analizezi situatia la modul general, nu pe cazul particular. Acolo sunt doua feluri de entitati: unele care au entitati subordonate (biblioraftul si dosarul) si unele care nu (documentele). Intr-un biblioraft poti sa ai documente si dosare simultan. Dar si intr-un dosar ai putea sa ai documente si alte dosare simultan. Si apoi in dosarele alea ai putea sa ai alte dosare. Si asa mai departe. Daca te legi de cazul particular o sa ai o limita de niveluri, dar daca le tii arborescent, nu.

Biblioraftul e unitatea cea mai incapatoare, deci n-are parent (IdParent este .Null.) Id-ul lui este 1, deci toate inregistrarile care au IdParent = 1 fac parte din biblioraft (primul nivel), mai exact: Doc1 (id=2), Doc2 (id=3), Dosar1 (id=4), Doc3 (id=5) , Dosar2 (id=6), Dosar3 (id=9).  Dosar2 (id=6) contine Doc2 (id=10) si Dosar3 (Id=11). Dosar3 (id=11) contine doc1 (Id=12). Si in felul asta toate entitatile au un parinte de care apartin. Pot avea si copii, dar nu neaparat. Dar daca trebuie sa adaugi un copil, tot ce ai de facut e sa inserezi inregistrarea si in IdParent sa pui id-ul inregistrarii de care apartine.

Daca ar fi sa afisam intr-un tree structura de mai sus, arata asa:

Biblioraft (id=1)
      - Doc1 (id=2)
      - Doc2 (id=3)
      - Dosar1 (id=4)
            -Doc1 (id=7)
            -Doc2 (id=8)
      - Doc3 (id=5)
      - Dosar2 (id=6)
            - Doc2 (id=10)
            - Dosar3 (id=11)
                   - Doc1 (id=12)
      - Dosar3 (id=9)

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/11/2011 1:36:56 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Am vazut ca s-a mai adaugat un raspuns cat am scris eu. Diferenta majora dintre abordar este ca cea pe care ti-o propun eu nu te limiteaza. Vreau sa disociezi designul de implementare. Abordarea mea e centrata pe design; abordarea cu trei tabele e centrata pe implementare. Diferenta e ca cealalta e mai simplu de implementat, dar daca aia maine mai baga un dosar IN dosar te-ai ars - vei fi nevoit sa adaugi inca o tabela. Si apoi inca una. s.a.m.d.

Modelul pe care ti l-am propus e este INDEPENDENT de rahaturile pe care ar putea sa ti le spuna aia; daca vor sa puna 'jdemii de dosare in 'jdemii de dosare n-au decat. Si ai o singura tabela in baza de date, care-ti acopera toate cazurile posibile.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/11/2011 1:42:11 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
 Marian Dobre wrote

Din cate stiu eu un biblioraft contine numai dosare iar un dosar contine numai documente. Alceva nu. In aceste conditii ai 3 tabele :

  1. Biblioraft(IdBiblioraft, DenBiblioraft, ...)
  2. Dosar(IdDosar,  IdBiblioraft, ...)
  3. Document(IdDocument, IdDosar,  IdBiblioraft, ...)

 Daca aceasta regula este incalcata atunci observatia lui Grig este mai mult decat intemeiata.



Marian - de cele mai multe ori e doar o problema de timp pana cand regula este incalcata. ;) Nu "daca" ci "cand". :)

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/11/2011 2:40:03 PM
User is offlineMarian Dobre
398 posts
3rd


Re: Biblioraft
 (N/A)
Ai perfecta dreptate. Insa structura ta este mai greu de stapanit decat cea descrisa de mine. Codul din spatele sau va avea nevoie de functii recursive si trebuie sa spun ca sunt putini cei care stapanesc cu adevarat recursivitatea. Partea delicata este ca un singur caz ajunge ca sa-ti strice toata constructia.

Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 3/11/2011 2:45:39 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Corect, si tu ai perfecta dreptate - trebuie o functie recursiva acolo. De-aia ziceam ca e mai simplu si mai complicat in acelasi timp :) Simplu fiindca gestionezi toate situatiile posibile, complicat fiindca trebuie sa scrii o procedura recursiva pentru Select.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/11/2011 2:46:31 PM
User is offlineDoru Constantin
321 posts
3rd




Re: Biblioraft
 (N/A)
 Marian Dobre wrote
Ai perfecta dreptate. Insa structura ta este mai greu de stapanit decat cea descrisa de mine. Codul din spatele sau va avea nevoie de functii recursive si trebuie sa spun ca sunt putini cei care stapanesc cu adevarat recursivitatea. Partea delicata este ca un singur caz ajunge ca sa-ti strice toata constructia.


Tipul acesta de abordare, arborescenta, este utilizat de VFP in fisierele FRX, SCX, etc.
Cu Select SQL si self joining se poate lucra lejer in aceasta structura.
 3/11/2011 4:52:45 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
 Grigore Dolghin wrote
Pai, nu. Inregistrarea cu IdParent=1 nu e biblioraft. Vreau sa analizezi situatia la modul general, nu pe cazul particular. Acolo sunt doua feluri de entitati: unele care au entitati subordonate (biblioraftul si dosarul) si unele care nu (documentele). Intr-un biblioraft poti sa ai documente si dosare simultan. Dar si intr-un dosar ai putea sa ai documente si alte dosare simultan. Si apoi in dosarele alea ai putea sa ai alte dosare. Si asa mai departe. Daca te legi de cazul particular o sa ai o limita de niveluri, dar daca le tii arborescent, nu.

Biblioraftul e unitatea cea mai incapatoare, deci n-are parent (IdParent este .Null.) Id-ul lui este 1, deci toate inregistrarile care au IdParent = 1 fac parte din biblioraft (primul nivel), mai exact: Doc1 (id=2), Doc2 (id=3), Dosar1 (id=4), Doc3 (id=5) , Dosar2 (id=6), Dosar3 (id=9).  Dosar2 (id=6) contine Doc2 (id=10) si Dosar3 (Id=11). Dosar3 (id=11) contine doc1 (Id=12). Si in felul asta toate entitatile au un parinte de care apartin. Pot avea si copii, dar nu neaparat. Dar daca trebuie sa adaugi un copil, tot ce ai de facut e sa inserezi inregistrarea si in IdParent sa pui id-ul inregistrarii de care apartine.

Daca ar fi sa afisam intr-un tree structura de mai sus, arata asa:

Biblioraft (id=1)
      - Doc1 (id=2)
      - Doc2 (id=3)
      - Dosar1 (id=4)
            -Doc1 (id=7)
            -Doc2 (id=8)
      - Doc3 (id=5)
      - Dosar2 (id=6)
            - Doc2 (id=10)
            - Dosar3 (id=11)
      - Dosar3 (id=9)




Am inteles eu aiurea tabela! Ma gandeam ca ID e doar un index din tabela fara importanta iar denumirile sunt unice! M-am gandit la un moment dat si eu la o astfel de tabela! Nu ptr ca as fi eu o minte luminata ... ci ptr ca mi-a mai aratat si Daniel ceva in genul acesta! Acolo era vorba de un circuit! Iar legaturile intre elemente erau tinute intr-o tabela identica!
Cred ca aceasta ar fi solutia avand in vedere faptul ca, asa cum spunea Marian, regulile sunt incalcate din start: am biblioraft care contine si documente neindosariate si documente indosariate! Si OPIS-ul cuprinde si dosarele si documentele neindosariate! Acum ramane de vazut daca o sa reusesc sa "lucrez" cu tabela ... avand in vedere faptul ca am cunostinte minime de SQL!
 3/11/2011 8:13:47 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Iti recomand sa citesti cu atentie articolul asta:

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Unde nu intelegi, intreaba pe forum - unul dintre noi o sa-ti raspunda.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 8:30:17 AM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Super articol ... ramane de vazut cat am inteles cand o sa incerc sa-l adaptez la proiectul meu! .... Acum am vazut ca in proiectul meu am si biblioraft care contine mai multe bibliorafturi! O sa incerc sa adaptez modelul al doilea din articol la ce am eu! Ce nu stiu e daca sa folosesc o singura tabela in genul celei category pentru biblioraft, dosare si documente? Sau sa folosesc si o tabela gen product pentru documente?
 3/12/2011 8:13:19 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Vezi ca acolo sunt doua metode distincte: adjacency list si nested model. Fiecare are avantajele si dezavantajele ei. Anyway, nici una nu pomeneste de DOUA tabele, asa ca nu stiu de unde ti-a venit ideea cu doua tabele.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 9:20:41 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
CREATE TABLE product(
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40),
category_id INT NOT NULL
);


INSERT INTO product(name, category_id) VALUES('20" TV',3),('36" TV',3),
('Super-LCD 42"',4),('Ultra-Plasma 62"',5),('Value Plasma 38"',5),
('Power-MP3 5gb',7),('Super-Player 1gb',8),('Porta CD',9),('CD To go!',9),
('Family Talk 360',10);

Despre tabela asta spuneam ... e din a doua metoda!
 3/12/2011 9:44:53 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
In scenariul lor au mai multe item-uri intr-o categorie. (Altfel spus, pentru fiecare inregistrare din arbore corespund una sau mai multe inregistrari din tabela de produse). Nu e cazul tau - tu n-ai doua bibliorafturi cu id-ul 1, n-ai 3 dosare cu id-ul 7, respectiv nu ai 5 documente cu id-ul 3. In cazul tau fiecare entitate e stocata in propria inregistrare din tabela ierarhica si e caracterizata prin denumire si atat.

(btw, si ei puteau pune produsele in tabela ierarhica si n-ar mai fi fost nevoie de tabela a doua, dar au preferat sa scoata in informatia asta intr-o tabela separata ca sa ilustreze conceptul de ierarhie mai clar)

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 10:01:38 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
OK! Am inteles acuma! Dar tot nu cred ca voi putea folosii o sg tabela! Am mai multe unitati care trebuie sa foloseasca acelasi model de repartizare in bibliorafturi! Adica toate unitatile au aceleasi bibliorafturi cu aceleasi denumiri! Diferenta apare in interiorul bibliorafturilor ... aici fiecare unitate pune dosare si documente in mod diferit! Daca as folosi o sg tabela cu unitati, bibliorafturi, dosare, documente ... as avea campuri repetitive la bibliorafturi! Si cand as vrea sa modific, sa adaug sau sa sterg un biblioraft ar trebui sa fac acelasi lucru ptr fiecare unitate in parte! Atunci e bine sa am o tabela unitati, una bibliorafturi si una continutbiblioraft(aceasta sa fie de tip ierarhic)?
 3/12/2011 10:42:28 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
"Si cand as vrea sa modific, sa adaug sau sa sterg un biblioraft ar trebui sa fac acelasi lucru ptr fiecare unitate in parte!"

De ce? Fiecare unitate are acelasi numar de bibliorafturi?

Tabelele ierarhice pot sa tina un numar nelimitat de niveluri. Unitate / biblioraft / Dosar / document / pagina / litera, daca vrei. Important e ca fiecare entitate sa aiba un parinte de care apartine. Daca te duci pe modelul cu mai multe tabele o sa o iei in freza, iti GARANTEZ.

De ce sa scoti bibliorafturile din ierarhie? Daca te incurca asa de tare identificarea, poti sa mai pui o coloana in tabela:

Id       IdParinte     Denumire                Tip
1          .null.           Unitate1              "Unitate"
2            1              Biblioraftul1         "biblioraft"

si asa mai departe.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 10:44:07 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Care-i entitatea cea mai incapatoare? Unitatea sau biblioraftul? altfel spus, unitatile au bibliorafturi sau bibliorafturile au unitati?

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 11:01:38 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Unitatea e entitatea cea mai incapatoare! Ea are bibliorafturi! Deci toate unitatile folosesc aceasi structura de bibliorafturi! Difera doar interiorul bibliorafturilor la fiecare unitate! ex
Unitate1
  B1 Avize
    Dosar1
    Doc2
  B2 Registre
     Doc2
     Doc1
Unitate2
  B1 Avize
     Doc3
     Doc5
  B2 Registre
     Doc4
Unitate3
  B1 Avize
     Dos5
     Doc5
  B2 Registre
     Doc7
     Dos8

Deci  bibliorafturile mi se repeta la fiecare unitate, iar daca fac o modificare a lor trebuie sa o fac la fiecare unitate pentru ca ele trebuie sa fie identice!


 3/12/2011 11:22:07 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
#1. Si daca scoti bibliorafturile intr-o tabela separata cum rezolvi situatia, citez, "acum am vazut ca am un biblioraft care contine alt biblioraft"?
#2. Si ce daca trebuie sa propagi modificarea la toate bibliorafturile unei unitati? ce, ti-e frica sa faci un UPDATE pentru mai multe inregistrari dintr-o miscare?

lcVecheaDenumire = "Registre"
lcNouaDenumire = "AlteChestii"
Select * From tabela_ierarhica Where IsNull(IdParent) Into Cursor crsUnitati && asta iti aduce unitatile
Scan
lnIdUnitate = crsUnitati.Id
Update tabela_ierarhica Set Denumire = lcNouaDenumire Where Id = lnIdUnitate And Denumire = lcVecheaDenumire
EndScan

sau, pentru adaugarea unui biblioraft nou:
lcDenumire = "Noul biblioraft"
Select * From tabela_ierarhica Where IsNull(IdParent) Into Cursor crsUnitati
Scan
lnIdUnitate = crsUnitati.Id
Insert Into tabela_ierahica (ParentId, Denumire) Values (lnIdUnitate, lcDenumire) && am presupus ca ID-ul este autoincrement, deci nu-l inserez eu
EndScan

si asa mai departe.

Vrei sa-ti scriu eu codul de intretinere a structurii?

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/12/2011 11:36:43 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
 Grigore Dolghin wrote
#1. Si daca scoti bibliorafturile intr-o tabela separata cum rezolvi situatia, citez, "acum am vazut ca am un biblioraft care contine alt biblioraft"?


La tabela bibliorafturi i-as fi zis LocPastrare .... si in tabela ierarhica as fi avut si biblioraft, pe langa dosar, document ....
Ok! Incerc .... toate intr-o tabela ... unitati, locuri de pastrare, bibliorafturi, dosare, documente samd!
 3/13/2011 9:16:47 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
In articolul pe care mi l-ai indicat incerc:
SELECT node.name, (COUNT(parent.name) - 1) AS depth;
FROM nested_category AS node,;
nested_category AS parent;
WHERE node.lft BETWEEN parent.lft AND parent.rgt;
GROUP BY node.name;
ORDER BY node.lft


de ce imi da eroarea> SQL: ORDER BY clause is invalid (Error 1808) ?



 3/13/2011 10:19:27 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Aia e sintaxa de MySQL - s-ar putea sa fie un pic diferita de cea din VFP. Incearca asta (nota: scriu in browser si nu pot sa verific):

Select Node.Name, (Count(parent.name)-1) As depth ;
From nested_category As Node Left Join nested_category as parent on node.lft between parent.lft and parent.rgt;
group by node.name ;
order by node.lft

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/13/2011 10:28:49 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Aceeasi eroare!
 3/14/2011 7:03:36 AM
User is offlineDoru Constantin
321 posts
3rd




Re: Biblioraft
 (N/A) Modified By Doru Constantin  on 3/14/2011 8:10:44 AM)
Count(parent.name) este agregare, Count(parent.name) - 1 nu mai este.
Incearca cu Set EngineBehavior = 70
 3/14/2011 7:35:24 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
 Doru Constantin wrote
Count(parent.name) este agregare, Count(parent.name) - 1 nu mai este.
Incearca cu Set EngineBehavior = 70


Good catch, Doru.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/14/2011 8:48:43 AM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
 Doru Constantin wrote
Count(parent.name) este agregare, Count(parent.name) - 1 nu mai este.
Incearca cu Set EngineBehavior = 70


Functioneaza! Multumesc!
Dar la selectul asta tot aceeasi eroare imi da:
SELECT PADL( ALLTRIM(node.name) , LEN(ALLTRIM(node.name))+(COUNT(parent.name ) - 1)*4 , ' ' ) AS name;
FROM nested_category AS node,;
nested_category AS parent;
WHERE node.lft BETWEEN parent.lft AND parent.rgt;
GROUP BY node.name ORDER BY node.lft


cel din articol era asa:
SELECT CONCAT( REPEAT(' ', COUNT(parent.name) - 1), node.name) AS name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name

ORDER BY node.lft

 3/14/2011 9:19:27 AM
User is offlineDoru Constantin
321 posts
3rd




Re: Biblioraft
 (N/A) Modified By Doru Constantin  on 3/14/2011 10:22:22 AM)
SELECT node.lft, PADL( ALLTRIM(node.name) , LEN(ALLTRIM(node.name))+(COUNT(parent.name ) - 1)*4 , ' ' ) AS name;
FROM nested_category AS node,;
nested_category AS parent;
WHERE node.lft BETWEEN parent.lft AND parent.rgt;
GROUP BY node.lft, node.name ;
ORDER BY node.lft

Campul dupa care ordonezi trebuie sa existe in cursorul rezultat.


Edit:
Nu este aceeasi eroare. In primul caz era vorba de GROUP BY iar acum de ORDER BY.
 3/14/2011 9:31:13 AM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Ai dreptate .... functioneaza acum! Multumesc mult!
 3/14/2011 10:59:00 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Intrebare super simpla cred ptr unii ... la select de forma celor de mai sus adica pe mai multe randuri despartite prin ';' ... cum pot sa scriu thisform.list1.rowsource = " ". Daca pun ghilimele la inceput si la sf nu merge!
 3/15/2011 1:54:30 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
ThisForm.list1.Rowsource = "select camp1, camp2 " + ;
"From tabela1 left join tabela2 " + ;
"Where camp1 = camp2"

Ideea e ca trebuie sa concatenezi un string, iar acel string sa-l stochezi in proprietatea care te intereseaza.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/15/2011 8:30:24 AM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Multumesc! Unde as putea gasii mai multe detalii despre concatenare ... ca tot timpul ma intampin problema asta si nu stiu sa rezolv toate situatiile de concatenare!
 3/15/2011 8:55:28 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A) Modified By Grigore Dolghin  on 3/15/2011 9:56:23 AM)
Nicaieri. Concatenarea e adunarea stringurilor.

Daca lcVar1 = "abc" si lcVar2 = "defg", atunci lcVar1 + lcVar2 = "abc" + "defg" = "abcdefg"

Asta-i tot. Altfel spus, comanda ta se putea scrie si asa:

varPartea1 = "select camp1, camp2 " && e un spatiu la sfarsit, ca sa nu se "lipeasca"
varPartea2 = "from tabela1 left join tabela2 "
varPartea3 = "Where camp1 = camp2"
ThisForm.list1.Rowsource = varPartea1 + varPartea2 + varPartea3

Probabil ca ai remarcat faptul ca lipseste punctul si virgula de la sfarsitul fiecarei linii. Asta se datoreaza faptului ca punctul si virgula sunt necesare in editor cand ai textul pe mai multe linii, ca sa stie compilatorul ca de fapt e o singura linie. Si stii ce face? sterge punctul si virgula, ia linia urmatoare si o pune pe aceeasi linie. s.a.m.d. Adica exact ce-am facut mai devreme cu concatenarea celor trei stringuri in varPartea1 + varPartea2 + varPartea3.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/15/2011 10:00:17 AM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Multumesc ... e bine sa stii ce face compilatorul ... altfel intelegi lucrurile!
 3/15/2011 11:43:56 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
Nu stiu, dar e simpla deductie, draga Watson...

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/16/2011 1:56:44 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Daca in tabela pe care am discutat pana acum (cea din articol) as avea un ID unic pentru fiecare categorie in parte as putea face un Select in care sa-mi apara ceva de genul:
4.1.2.3.1 ... unde e entitatea cea mai mare. 1 il are ca parinte pe 4, 2 il are ca parinte pe 1, 3 il are ca parinte pe 2 si 1 il are ca parinte pe 3?
 3/16/2011 2:51:41 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A)
E descris tot in articol, la "Retrieving a full tree", doar ca in cazul tau n-o sa fie coloane separate, ci una singura: Select t1.name + "." + t2.Name + "." + t3.name, etc etc etc

Retrieving a Full Tree

The first common task when dealing with hierarchical data is the display of the entire tree, usually with some form of indentation. The most common way of doing this is in pure SQL is through the use of a self-join:

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ELECTRONICS';


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/16/2011 3:40:38 PM
User is offlineji_ci
191 posts
5th


Re: Biblioraft
 (Romania)
Si in cazul tabelei Nested_category (modelul acesta vreau sa-l folosesc) s-ar putea face Selectul?
 3/16/2011 5:52:52 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Biblioraft
 (N/A) Modified By Grigore Dolghin  on 3/16/2011 6:53:22 PM)

Nu te supara, am senzatia ca ti-e greu sa te uiti in articol si ma pui pe mine sa o fac. La Nested Category ai un capitol cu o gramada de selecturi care-ti descarca tot ce vrei:

Retrieving a Full Tree

SELECT node.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.name = 'ELECTRONICS'
ORDER BY node.lft;

Tie iti trebuie toate chestiile subordonate, deci renunti la "and parent.name=ceva". Si daca nu-ti convine, vezi ca ai un exemplu in care ti le si ordoneaza ca intr-un tree (folosind spatii inaintea denumirii). Chiar vrei sa iti arat eu linie cu linie ce trebuie sa faci? fusese vorba ca citesti CU ATENTIE articolul ala, nu?


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Biblioraft...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement