Search  
Thursday, October 22, 2020 ..:: 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  Tema pentru acasa  RECNO() in grid...
 RECNO() in grid
 
 12/29/2012 8:19:54 AM
User is offlinedorelH
15 posts


RECNO() in grid
 (N/A)
Buna ziua!

Intr-un grid am Control Source un SQL statement de genul:

SELECT col1.table2, col1.table1, col7.table1, RECNO("table1") AS recno FROM table1 JOIN col1 ON table1.col1 = table2.col1 INTO cursor1

Select-ul direct din command functioneaza perfect dar in grid cursor1.recno apare peste tot ca 1 ( restul coloanelor din cursor1 fiind corecte).
Ce am gresit?

Va multumesc!

 12/29/2012 8:35:46 AM
User is offlinedorelH
15 posts


Re: RECNO() in grid
 (N/A)
Cateva mentiuni:

Select-ul din grid are si un filtru si recno() din cursor este diferit de recno() din tabela originala.
Aveam nevoie de recno() din tabela pt. a putea sterge/edita acel record.
Din fericire am si o coloana AUTOINC in tabela si am folosit-o pe acecea pentru a identifica precis recordul din tabela originala.

Totusi, intrebarea ramane: De ce nu merge recno() in Select-ul din grid?

 12/29/2012 9:27:52 AM
User is offlineGrigore Dolghin
4001 posts
www.class-software.ro
1st






Re: RECNO() in grid
 (N/A) Modified By Grigore Dolghin  on 12/29/2012 10:29:18 AM)
Nu stiu de ce nu merge, da' ce voiai sa faci este fundamental gresit. O inregistrare se identifica NUMAI prin cheia ei primara (coloana aia autoinc), pe care o incluzi in SELECT si n-o afisezi in grid, dar o folosesti ca sa gasesti inregistrarea in tabela sursa.\

Daca te bazezi pe recno si vine cineva si-ti face un INSERT pe pozitia a doua (exista cazuri, tocmai s-a discutat unul), ghici ce-o sa se intample cand o sa vrei sa salvezi si tu inregistrarea care are RECNO() = 2....

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 12/29/2012 9:47:31 AM
User is offlinedorelH
15 posts


Re: RECNO() in grid
 (N/A)
Va multumesc, acum e OK. Chestia cu recno() nu mai are importanta.
 12/29/2012 10:34:30 AM
User is offlineDaniel Buduru
3522 posts
1st




Re: RECNO() in grid
 (N/A)
 dorelH wrote
.....
Totusi, intrebarea ramane: De ce nu merge recno() in Select-ul din grid?


In help scrie pe undeva ca intr-un select sql nu se vor utilizarea functii care au ca parametru aliasul unei tabele din clauza From, intrucat nu se poate prevedea cum anume va deschide vfp tabelele si ce alias vor avea acestea in timpul selectului.

Tu ai presupus ca vfp se va pozitiona pe inregistrarea corespunzatoare in fiecare tabela, apoi va extrage datele din ambele tabele in cursorul destinatie..
Asta insa nu inseamna ca si functioneaza asa. VFP a deschis cele doua tabele cu alt alias decat cel pe care l-ai alocat tu la deschidere, iar functia recno("tabela1") returneaza, la fiecare apel, numarul inregistrarii din tabela 1 pe care a ramas pointerul tabelei.

Ruleaza asta:

CREATE CURSOR c1 (f1 i, f2 c(10))
FOR lni=1 TO 12
 INSERT INTO c1 VALUES (lni, CMONTH(DATE(2001,lni,1)))
next
CREATE CURSOR c2 (f1 i, f2 c(10))
FOR lni=1 TO 7
 INSERT INTO c2 VALUES (lni, CDOW(DATE()+1+lni))
next
Go 7 in c1
Go 5 in c2
SELECT aa.*, RECNO("c1") as recno1, bb.*, RECNO("c2") as recno2 FROM c1 aa, c2 bb where bb.f1=(aa.f1-5)

Cursorul rezultat are peste tot recno1=7 si recno2=5, ceea ce arata ca vfp nu a folosit direct cele doua cursoare, desi erau deja deschise, ci le-a deschis din nou, cu alte aliasuri.

Asta face si ca rezultatul selectului sa nu fie influentat
de eventualele filtre active pe aliasurile din clauza From.

Daniel Buduru
 12/29/2012 5:16:12 PM
User is offlinedorelH
15 posts


Re: RECNO() in grid
 (N/A)
Va multumesc pentru explicatie. Sper sa fie de folos si altora daca vor face aceeasi greseala.

  Visual FoxPro  Tema pentru acasa  RECNO() in grid...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement