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  Cod, sintaxa si comenzi  Unire campuri t...
 Unire campuri tabele
 
 6/28/2006 1:53:00 PM
User is offlineanca.horhogea
22 posts


Unire campuri tabele
 (Romania)

Salut!

Am urmatoarea situatie in FOX Windows 2.6:

O tabela cu campurile (CNP, Medicament). Pentru un CNP am inscrise mai multe medicamente astfel:

CNP Medicament
123 aaa
123 bbb
456 aaa
456 ccc

Vreau sa duc inregistrarile in alta tabela unind campurile "Medicament" de la un "CNP" la modul urmator:

CNP Tratament
123 aaa ; bbb
456 aaa ; ccc

Sugerati-mi un programel sau daca exista o comanda care sa faca o astfel de unire de campuri.

Sincer am nevoie de o sugestie cat mai repede. Mersi!

 

 

 6/28/2006 2:01:51 PM
User is offlineanonymous
0 posts


Re: Unire campuri tabele
 (Romania) Modified By anonymous  on 6/28/2006 2:03:13 PM)

N-ai alta solutie, trebuie sa parcurgi cursorul.

iei intr-un cursor inregistrarile ordonate dupa CNP

faci scan pe cursor

construesti textul intr-o variabila si cand se schimba CNP adaugi o noua inregistrare intr-un alt cursor care il creezi inainte:

Ceva de genul:

SELECT * FROM Tabela INTO CURSOR xCursor ORDER BY CNP

local cText, cCNP

cText = ''

cCNP = ''

CREATE CURSOR xCursor2 ( cnp c( 12), Med C( 200))

SELECT xCursor

SCAN

IF !EMPTY( cCNP) AND xCursor.CNP <> cCPN

      INSERT INTO xCursor2( CNP, Med) VALUES ( xCursor.CNP, cText)

      cText = ''

      cCNP = xCursor.CNP

ENDIF

cText = cText + IIF( EMPTY( cText), '', ' ; ' + ALLTRIM( xCursor.Medicament)

ENSCAN

 

Am scris codul direct aici asa ca s-ar putea sa fie ceva erori.

 6/28/2006 2:39:48 PM
User is offlineanca.horhogea
22 posts


Re: Unire campuri tabele
 (N/A)

Cam aceeasi idee aveam si eu, dar nu stiu exact daca e buna conditia la IF. Mie nu imi da nimic.

 

 6/28/2006 2:46:24 PM
User is offlineanonymous
0 posts


Re: Unire campuri tabele
 (Romania) Modified By anonymous  on 6/28/2006 2:46:53 PM)

Conditia e buna dar mai trebuie un

    INSERT INTO xCursor2( CNP, Med) VALUES ( xCursor.CNP, cText)

dupa scan, pentru ultimul grup de CNP.

 6/28/2006 2:51:23 PM
User is offlineDanTodor
297 posts
4th


Re: Unire campuri tabele
 (Romania)
Ce nasol ca nu se poate altfel decit procedural ... Hai sa fac o incercare totusi :

- presupunem ca avem tablea test cu cimpurile id si txt
- presupunem ca txt poate lua maxim 6 valori distincte

Atunci poti incerca ceva de genul asta :

select id, txt1+ ", "+txt2+", "+txt3+", "+txt4+", "+txt5+", "+txt6 as txt from ( ;
    select id,;
     max( iif(cnt = 1, txt, '') ) as txt1,;
     max( iif(cnt = 2, txt, '') ) as txt2,;
     max( iif(cnt = 3, txt, '') ) as txt3,;
     max( iif(cnt = 4, txt, '') ) as txt4,;
     max( iif(cnt = 5, txt, '') ) as txt5,;
     max( iif(cnt = 6, txt, '') ) as txt6 ;
     from ( select a.id, a.txt, count(*) as cnt ;
         from test a ;
         inner join test b on a.id = b.id and a.txt >= b.txt ;
         group by a.id, a.txt ;
         having count(*) <=6) ; );
     group by id )



N-am un VFP la indemina, dar s-ar putea sa mearga, pe oracle functioneaza cu mici ajustari ( functii diferite ). Daca nu ai trei nivele de subselect, poti face select-uri intermediare in cursoare. Acuma, daca plaja de valori e mai mare, cred ca e relativ simplu sa-ti dai seama unde trebui modificat...
Acuma, sint de acord ca modul procedural de lucru e mai simplu, dar un masaj la neuroni nu strica din cind in cind :))

hth
 6/28/2006 3:26:10 PM
User is offlineanca.horhogea
22 posts


Re: Unire campuri tabele
 (Romania)

Sorry, dar chiar nu inteleg. Imi ia doar CNP-ul si mi-l introduce in cursorul al doilea tot de atatea ori ca in prima tabela (nu uneste campurile dupa CNP).

Faceti o proba si voi, ca poate nu inteleg eu.

Imi dau seama ca o fi vreo aberatie, dar la astea ma incurc eu. [EMO]confuse.gif[/EMO]

Multumesc pentru luarea in seama.

 6/28/2006 4:15:18 PM
User is offlineanonymous
0 posts


Re: Unire campuri tabele
 (Romania)

Ok, m-ai pus la treaba mai mult decat vroiam s-o fac :), poftim

CREATE CURSOR Medicamente ( CNP C( 12), Medicament C( 20))

INSERT INTO Medicamente ( CNP, 'Medicament') VALUES ( '123', 'aaa')
INSERT INTO Medicamente ( CNP, 'Medicament') VALUES ( '123', 'bbb')
INSERT INTO Medicamente ( CNP, 'Medicament') VALUES ( '456', 'aaa')
INSERT INTO Medicamente ( CNP, 'Medicament') VALUES ( '456', 'ccc')

SELECT * FROM Medicamente INTO CURSOR xCursor ORDER BY CNP

LOCAL cText, cCNP

cText = ''

cCNP = ''

CREATE CURSOR xCursor2 ( CNP C( 12), Med C( 200))

SELECT xCursor

SCAN

 IF !EMPTY( cCNP) AND xCursor.CNP <> cCNP

  INSERT INTO xCursor2( CNP, Med) VALUES ( cCNP, cText)

  cText = ''

 ENDIF

 cText = cText + IIF( EMPTY( cText), '', ' ; ') + ALLTRIM( xCursor.Medicament)
 cCNP = xCursor.CNP
ENDSCAN
INSERT INTO xCursor2( CNP, Med) VALUES ( cCNP, cText)

SELECT Medicamente
USE

SELECT xCursor
USE

SELECT xCursor2
BROW
USE

  Visual FoxPro  Cod, sintaxa si comenzi  Unire campuri t...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement