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  Cautare avansat...
 Cautare avansata
 
 3/24/2010 9:52:59 PM
User is offlineOvidiu Dobie
105 posts
5th


Cautare avansata
 (N/A)
Va salut!
Doresc sa mai cer cateva sfaturi de la voi.
Daca am o tabela cu multe produse (articole) si vreau sa caut unul din ele dupa nume sau dupa un grup de caractere care nu se afla numai la inceputul numelui folosesc aceste linii de cod:

text_de_cautat=TRIM(UPPER(thisform.text12.Value))  && text12 e textbox-ul unde scriu textul care vreau sa-l caut
SELECT produse
SCAN FOR LIKE ('*'+
text_de_cautat+'*',nume_full) && nume_full e campul din tabela produse care contine numele intreg al unui produs
    n_f=nume_full
    nr_cc=nr_crt
    c_um=um
    p_1=pret_in_lei
    p_2=pret_ie_lei_t
    cantstoc=stoc
    SELECT temp_rez
    APPEND BLANK
    REPLACE denumire WITH n_f;
            nr_crt WITH nr_cc;
            um WITH c_um;
            pret1 WITH p_1;
            pret2 WITH p_2;
            cant_stoc WITH cantstoc
ENDSCAN

Cred ca se intelege ce fac eu aici in cod... rezultatele cautarii cu scan for like le pun intr-o tabela temporara, care o afisez intr-un form denumire Rezultatul Cautarii ...
Imi dati o idee mai buna?

Si inca o intrebare: Daca intr-un grid incarc rezultatul unei vederi (view) cum pot sa fac sa ma pozitionez programatic pe articolul din grid (de fapt, din view) care are codul_id, sa zicem, egal cu o anume valoare, de exemplu 192?
Pana acum nu foloseam view, nu incarcam rezultatul unui view in grid, ci metoda amintita mai sus, cu tabele temporare (*.dbf) in care ma pozitionam cu locate for cod_id = 192!
Ce ziceti? Ma poate cineva sfatui?

Ovidiu Dobie
 3/24/2010 11:23:07 PM
User is offlineoviciandrus
762 posts
www.comptech.ro
1st




Re: Cautare avansata
 (N/A)
A)

select * from produse where AllTrim(Upper(text_de_cautat)) $ AllTrim(Upper(NUME_FULL)) INTO CURSOR "crsSearchResult"

SELECT "crsSearchResult"
BROW

B)
De fapt nu in grid trebuie sa te pozitionezi ci in tabela. Gridul iti arata inregistrarile din tabela si este evidentiata aceea pe care esti pozitionat in tabela

Pozitionarea in tabela se poate face cu mai multe comenzi sau functiii: LOCATE, SEEK, Seek(), IndexSeek()

Dupa pozitionare in tabela poate trebuie sa dai, daca imi amintesc bine, Thisform.Grid1.SetFocus() sau Thisform.Grid1.Refresh()
 3/25/2010 7:36:30 AM
User is offlineOvidiu Dobie
105 posts
5th


Re: Cautare avansata
 (N/A)
A)
Solutia este clara si eleganta. Acum trebuie sa studiez sa vad cum sa "integrez" acel cursor crsSearchResult intr-un grid existent pe un form.
Mie nu-mi place sa-i afisez utilizatorului final fereastra clasica a comenzii BROWSE si de aceea m-am obisnuit sa folosesc tabele temporare.

B)
Nu cred ca m-am exprimat prea coerent.
E clar ca pozitionarea in tabela se face cu acele comenzi sau functii amintite.
Si este adevarat ca folosesc din plin Thisform.Grid1.SetFocus() si Thisform.Grid1.Refresh() ...
Dar daca vreau sa renunt la tabele si sa folosesc vederi (views), cu ce ma voi pozitiona in vederi, daca se poate acest lucru, (pozitionarea intr-un view)?
Si daca view-ul este "incarcat" intr-un grid, eventuala pozitionare in view se va "efectua" automat si in grid?

Ovidiu Dobie
 3/25/2010 7:41:54 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Re: Cautare avansata
 (N/A)
View-ul este de fapt tot un cursor si pentru pozitionarea in el vei folosi aceleasi comenzi ca si pentru o tabela.

Mai sus la varianta A nu era musai sa folosesti comanda browse, daca aveai un grid pe form pur si simplu foloseai :
thisform.grid1.controlsource='crsRezultat'
 3/25/2010 8:30:35 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Cautare avansata
 (N/A)
Ca idee, ar fi mai indicat de folosit functia Like() in loc de $, deoarece Like() accepta si Wildcards cum ar fi "*" si "?"  in comanda de cautare, sau poate mai bine Like - operatorul de filtrare din SQL care accepta wildcards de tip" %" si " _"




 3/26/2010 7:13:07 AM
User is offlineOvidiu Dobie
105 posts
5th


Re: Cautare avansata
 (N/A)
Dar functia LIKE() ma obliga sa o folosesc impreuna cu SCAN FOR ... asa cum am scris in primul post ... si sa folosesc acea tabela temporara, pe care o leg la RecordSource-ul unui grid ... ma gandeam ca aceasta metoda pe care o folosesc de ceva vreme nu e cea mai buna, dar se pare ca tot spre ea ajung...
Iar daca folosesc SELECT ... INTO Cursor ... in faza de design a formului,la grid trebuie sa specific la RecordSourceType 4 - SQL Statement ? Cand leg tabela temporara la grid lasam pe 1 - Alias, desi acum observ ca este si 0 - Table... dar mergea ok si cu 1 - Alias ...

Ovidiu Dobie
 3/26/2010 12:18:43 PM
User is offlineRomeo
529 posts
1st


Re: Cautare avansata
 (N/A)
un exemplu posibil:

wparam='%'+UPPER(ALLTRIM(ThisForm.txtCamp.Value))+'%'
SELECT (....) FROM tabel WHERE UPPER(nume) LIKE wparam INTO CURSOR wcrs81

Slava Tatalui si Fiului si Sfantului Duh si acum si pururea si-n vecii vecilor. Amin.
 3/26/2010 12:53:57 PM
User is offlineOvidiu Dobie
105 posts
5th


Re: Cautare avansata
 (N/A)
Romeo, postul tau a venit la fix..
Eu tot ma chinuiam sa fac un view in care foloseam la filter:
tabela.nume LIKE (?txt_de_cautat)
iar in cod scriam:
txt_de_cautat = UPPER(ALLTRIM(ThisForm.txtCamp.Value))
dar nu primeam nici un rezultat in View ...
dar daca in View am completat cu '%'+ adica:
tabela.nume LIKE (?'%'+txt_de_cautat+'%') imi dau rezultate corecte ... Super!
Dar ce inseamna '%'  ??? ca eu in metoda mea veche fara View ci cu tabela temporara *dbf foloseam:
SCAN FOR LIKE ('*'+ txt_de_cautat +'*',nume_mat)
iar aici stiam ca '*' inlocuieste un caracter sau un grup de caractere ...
dar '%' ?

Ovidiu Dobie
 3/26/2010 4:35:07 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Cautare avansata
 (N/A)
Cu riscul de a ma repeta, Like() este o functie Fox care foloseste ca wildcards "*" si "?", iar celalalt Like este un operator de filtrare din SQL si face cam acelasi lucru dar foloseste ca wildcards semnele "%" si "_".

Parerea mea este ca in comanda Select este mai eficient operatorul Like, dar nu vad de ce nu s-ar putea folosi si comanda:

 Select  *  From produse Where Like("*"+AllTrim(Upper(text_de_cautat))+"*", AllTrim(Upper(NUME_FULL)))  INTO CURSOR "crsSearchResult"






 3/26/2010 9:04:12 PM
User is offlineOvidiu Dobie
105 posts
5th


Re: Cautare avansata
 (N/A)
Eugen, mii de scuze, efectiv mi-a scapat din ochi penultimul tau post...
Cand l-am citit nu prea am inteles ce ai scris, dar acum mie clara diferenta intre LIKE() cu "*" si "?" si LIKE cu "%" si "_"
Multumesc pentru rabdarea de a mai posta din nou aceeasi explicatie...

Ovidiu Dobie
  Visual FoxPro  Cod, sintaxa si comenzi  Cautare avansat...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement