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  Client/Server  Problema simpla...
 Problema simpla (cred)
 
 1/9/2006 12:25:49 PM
User is offlineAlin Berce
371 posts
3rd




Problema simpla (cred)
 (Romania)
Avand in vedere faptul ca lucrez pe sql server 7... am de rezolvat o chestie, eu m-am gandit la o modalitate insa nu stiu un lucru care cred ca e destul de simplu

Pot face un select de pe o tabela la care sa mai adaug un camp care sa contina numarul liniei din tabela?
Ex:
select nume,prenume, (ceva) as nr_line from personal

iar in campul nr_line sa fie pe rand valorile 1,2,3,4... cate linii are tabela. Deci nr_line incepe de la 1 si se incrementeaza cu 1.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/9/2006 1:01:28 PM
User is offlinerlutia66
229 posts
4th




Re: Problema simpla (cred)
 (United Kingdom)
Nu cred ca merge altfel decat procedural...

Cred ca mai bine le numerotezi in Fox dupa incarcare

Rares LUTIA
Matricia Solutions
 1/9/2006 1:07:23 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Problema simpla (cred)
 (N/A)

Vezi aici:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q186133

si aici:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=6195

In SQL Server 2005 exista ROW_NUMBER() ...

 


Daniel Buduru
 1/9/2006 1:07:34 PM
User is offlineAlin Berce
371 posts
3rd




Re: Problema simpla (cred)
 (Romania)
si in fox 6 cum fac asta?
VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/9/2006 1:16:48 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Problema simpla (cred)
 (N/A)

 alinescoo wrote
si in fox 6 cum fac asta?

In select creezi un camp numeric 
 SELECT ...., CAST(0  as int) as RowNum .....

apoi, in vfp:
Replace all RowNum with recno()

 


Daniel Buduru
 1/9/2006 1:31:24 PM
User is offlinerlutia66
229 posts
4th




Re: Problema simpla (cred)
 (United Kingdom)
SAU:

Faci selectul normal in SQL, sa zicem ca obitn MyAlias, dupa care in Fox (6):

select  recno() as RowNum, * from MyAlias into cursor MyCursor

Rares


Rares LUTIA
Matricia Solutions
 1/9/2006 2:21:24 PM
User is offlineAlin Berce
371 posts
3rd




sfaturi
 (Romania)
Multumesc tuturor pentru sfaturi!
Am incercat cu:
"Faci selectul normal in SQL, sa zicem ca obitn MyAlias, dupa care in Fox (6):

select recno() as RowNum, * from MyAlias into cursor MyCursor

Rares"

si merge foarte bine.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/10/2006 8:18:12 AM
User is offlineAlin Berce
371 posts
3rd




Re: sfaturi
 (Romania)
Revin iar... In fox am reusit sa fac sa mearga, in sensul ca cursorul imi vine de la server si ii adaug eu inca o coloana care contine numarul liniei in fox.

As vrea sa fac acest lucru in procedura stocata de pe server. In sensul ca in fox sa vina cursorul gata construit. Nu gasesc in sql server nici o modalitate prin care sa inlocuiesc recno() din fox.
Any sugestions ?
Va multumesc.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/10/2006 8:27:46 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: sfaturi
 (N/A)

 alinescoo wrote
Revin iar... In fox am reusit sa fac sa mearga, in sensul ca cursorul imi vine de la server si ii adaug eu inca o coloana care contine numarul liniei in fox.

As vrea sa fac acest lucru in procedura stocata de pe server. In sensul ca in fox sa vina cursorul gata construit. Nu gasesc in sql server nici o modalitate prin care sa inlocuiesc recno() din fox.
Any sugestions ?
Va multumesc.

De unde rezulta ca nu te-ai obosit sa te uiti pe link-urile date.


Daniel Buduru
 1/10/2006 8:30:14 AM
User is offlinerlutia66
229 posts
4th




Re: sfaturi
 (United Kingdom)
Nu-l mai certa, Dan. Ce vrei, vrea si el daca se poate mura in gura...

Rares LUTIA
Matricia Solutions
 1/10/2006 8:38:09 AM
User is offlineAlin Berce
371 posts
3rd




raspuns
 (Romania) Modified By Alin Berce  on 1/10/2006 9:41:09 AM)
Eu m-am uitat pe linkurile date de dumneavoastra si da, e adevarat ce zic ei acolo. Am incercat si merge. Insa in cazul in care eu nu am o cheie primara, deja treaba nu mai merge, in sensul ca daca se repeta sa zicem linia cu nr_fact din tabela detalii_fact daca voi avea acelasi numar de factura voi avea nr_linie 1 peste tot... Nu stiu daca m-am facut inteles.

Imi cer scuze daca cateodata sunt prea insistent. Sunt foarte nou in domeniu si de abia incep sa imi dau seama cum sta treaba cu sql server si cu fox pro. Oricum, am extrem de multe de invatat. Si deja m-am pus cu burta pe carte. Nu vreau mura in gura... as vrea doar sa stiu daca exista vreo posibilitate de recno() in sql server

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/10/2006 8:41:26 AM
User is offlinerlutia66
229 posts
4th




Re: sfaturi
 (United Kingdom) Modified By rlutia66  on 1/10/2006 9:42:27 AM)
Hmmm. Si nu gasesti tu o coloana suplimentara,ceva care sa identifice unic fiecare inregistrare? Chit ca nu le vei folosi in afisarea finala?

Detaliile facturilor nu au o cheie primara in tabele in care se tin?

Rares LUTIA
Matricia Solutions
 1/10/2006 8:45:08 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: sfaturi
 (N/A)

Dupa cum ai vazut, primul link e de la Microsoft, celalalt de la un forum SQL. Daca nici acolo nu se stie ...

Ar mai fi o solutie:  Select *, identity into tabela_temporara pe server.
Vezi sintaxa exacta pentru crearea unei coloane identity in select.

Si cu asta, s-au cam epuizat optiunile pentru SQL 7 - cel putin cele stiute de mine.


Daniel Buduru
 1/10/2006 8:54:07 AM
User is offlineAlin Berce
371 posts
3rd




raspuns
 (Romania)
Ideea de baza era ca avand numarul fiecarei linii dintr-un cursor eu pot selecta exact cate linii din acel cursor sa imi returneze...

select * from cursor where linie>1 0 and linie <100

Asta m-ar fi ajutat la crearea unui raport.

Va multumesc tuturor pentru sfaturi.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/10/2006 9:06:19 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: raspuns
 (N/A)

Problema este mai simplu de rezolvat client-side decat pe server.

Daca faci un report in VFP, poti pune in init-ul reportului ceva de genul:

Select * from rezultset having recno()>0 and recno()<100 into cursor cursor_pentru_raport

apoi folosesti in raport acest cursor

Mia sunt si alte optiuni in raport, cum ar fi un filtru :

REPORT FORM  myreport FOR BETW(recno("mycursor"),1,99)


Daniel Buduru
 1/10/2006 9:10:15 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: raspuns
 (Romania)

Alin,

Intr-un server SQL sa nu te bazezi niciodata pe faptul ca inregistrarile iti vin intr-o ordine stiuta si ca setul de date returnat este constant in timp. Where linie>1 and linie<100 o sa-ti dea azi niste inregistrari, maine altele, poimaine altele, s.a.m.d.

Intotdeauna trebuie sa folosesti cheia primara si, daca este cazul, cheia externa in clauza Where. Cu alte cuvinte, cheia primara este obligatorie in tabele, indiferent de datele pe care le contin. Daca acum ai tabele care n-au cheie primara, sugestia mea foarte serioasa este sa te opresti din ce faci, sa le pui chei, apoi sa modifici codul existent astfel incat sa folosesti cheile alea. Si sa continui dupa aia. Daca nu faci asa, este doar o chestiune de timp pana cand o sa faci exact asa ca in avatarul tau.

Pentru exemplul din mesajul tau anterior, numerele alea de linie depind de ceva: marja de facturi, date calendaristice, id-uri de clienti, whatever. Ca sa obtii setul de date (si sa fie constant in timp) trebuie sa pui in clauza Where chestiile de care depinde setul de date (Where Between(DataFact, @datainceput, @datasfarsit), de exemplu). Dar in nici un caz numarul randului...


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 1/10/2006 9:29:13 AM
User is offlineAlin Berce
371 posts
3rd




raspuns
 (Romania) Modified By Alin Berce  on 1/10/2006 10:34:06 AM)
Multumesc tuturor si mai ales multumesc Domnule Dolghin pentru raspuns.

Eu nu stiam ca
"Intr-un server SQL sa nu te bazezi niciodata pe faptul ca inregistrarile iti vin intr-o ordine stiuta si ca setul de date returnat este constant in timp."
asa ca nici nu mai are rost sa mai incerc pe server. Am facut lucrul acesta in fox si merge excelent... insa eu m-am gandit ca pe server ar merge mai rapid. Acum m-am lamurit: fara numarul randului.

In legatura cu cheia primara... folosesc cheie primara si cheie externa in exemplele (programelele) pe care le fac incercand sa invat. Si DA, sunt de acord ca fara chei primare nu se poate. In exemplu pe care incercam eu sa fac era o tabela simpla... dar o sa ii fac o cheie primara. Am mai citit si despre normalizare si alte cele. Multumesc tuturor celor care ajuta oamenii ca mine (ucenicii) pe acest forum.
Traiasca Profox si Profesionistii acestuia.


Momentan studiez UML... As putea sa scriu un articol despre asta (eventual un tutorial) si sa il postez la Articole. Ar fi cineva interesat de asa ceva? Are rost sa ma apuc sa scriu?

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 1/10/2006 9:43:03 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: raspuns
 (Romania)
Sigur ca da. Daca ai timp si vrei sa faci asta, you're welcome.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 1/10/2006 10:24:57 AM
User is offlinerlutia66
229 posts
4th




Re: raspuns
 (United Kingdom)
Daca asta era scopul cautariklor tale, pot sa iti spun ca la folosirea comenzii REPORT FORM .... se poate precize scope-ul, adica:
poti sa zici
GO 10
report form MyReport next 50 to ....

care inseamna ca ruleaza raportul plecand de la inregistrarea 10 pentru urmatoarele (maximum) 50 de inregistrari.

Got the Point?

Rares LUTIA
Matricia Solutions
 1/10/2006 11:28:10 AM
User is offlineanonymous
0 posts


Re: raspuns
 (Romania)
 alinescoo wrote
Ideea de baza era ca avand numarul fiecarei linii dintr-un cursor eu pot selecta exact cate linii din acel cursor sa imi returneze...

select * from cursor where linie>1 0 and linie <100

Asta m-ar fi ajutat la crearea unui raport.

Va multumesc tuturor pentru sfaturi.


Sau poti s-o faci direct pe server, daca stii exact :
a) - modul de ordonare ( clauza where )
b) - cite linii vrei ( clauza SELECT TOP )

  Visual FoxPro  Client/Server  Problema simpla...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement