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  Form-uri si generatoare de form-uri  stergere valoar...
 stergere valoare din cimp cu autoincrementare
 
 5/25/2006 4:54:46 PM
User is offlineadrifox
9 posts
www.contesti.ro


stergere valoare din cimp cu autoincrementare
 (France)

buna ziua,
fericire mare cind am dat peste acest forum. sper sa ma ajutati si pe mine cu o problema:

se da o baza de date sa zicem clienti.dbf. avem cimpul client_id care este un cimp cu auto incrementare, setat cind se creaza baza de date (cimp din ala integer). cu ajutorul wizard fac un formular si ma folosesc de butoanele care se genereaza : inaite, inapoi, add.....exit. cind actionez butonul add in client_id se pune valoarea 1, dupa cum este si normal. salvez. repet instructiunea aveam valoarea 2 s.a.m.d.

acum intervine beleaua: daca dau add, in mod normal urmeaza 3, si e corect! dar, sint cazuri in care vrei sa renunti la o noua adaugare si dai renuntare. foarte bine, instructiunea se respecta, dar daca vreau sa aduc o noua inregistrare aici e surpriza : in loc sa puna la client_id valoarea 3, care trebuie sa urmeze in mod normal, tine minte ca a fost tentativa de adaugare a ceste valori si pune .... 4 si tot asa...

intrebare : cum sa fac sa nu mai tina minte valoarea la care am dorit sa renunt? ce sa pun in propietati pe la metodele acelea, eventual pe la lost focus sau destroy, chiar nu stiu .....

multumesc de raspuns - evntual un mic exemplu daca se poate sa atasati (un form)

adrian

 5/25/2006 5:59:41 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: stergere valoare din cimp cu autoincrementare
 (Romania)

Poate te ajuta cu ceva:

CLEAR
CLOSE DATABASES

* Transactions are only supported within a DBC
OPEN DATABASE (HOME(2) + 'Data\testdata')

SET MULTILOCKS ON      && Required for buffering


USE customer
=CURSORSETPROP("Buffering",5)
? 'The original company field'
LIST FIELDS cust_id, company NEXT 5
REPLACE ALL company WITH "***" && Change field contents

BEGIN TRANSACTION
   =TABLEUPDATE(.T.)
   GO TOP
   ? 'The modified company field'
   LIST FIELDS cust_id, company NEXT 5
   ROLLBACK           && Restore original field contents

=TABLEREVERT(.T.)
GO TOP
? 'The restored company field'
LIST FIELDS cust_id, company NEXT 5
 
Exemplul este din help. (BEGIN TRANSACTION)

Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 5/25/2006 6:11:34 PM
User is offlineedyshor
1450 posts
1st




Re: stergere valoare din cimp cu autoincrementare
 (Romania)
interesant .. se pare ca NextValue se incrementeaza cand adaugi nu cand sa face tableupdate .. nashpa intr-adevar ..
 
o metoda de evitare e sa mapezi campurile in variabile de memorie sau intr-un obiect obtinut cu "scatter name ox blank" de ex. si apoi la butonu de salvare executi un "insert into 'table' from memvar" sau "from name ox"
 
eviti si problemele care pot apare cu buffering-ul si practic le trimiti in tabela doar dand dai save i.e. NextValue nu se incrementeaza :)
dar dupa stergere o sa ai discrepante..
 
 5/25/2006 6:21:15 PM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: stergere valoare din cimp cu autoincrementare
 (N/A)
Dupa stergere o sa se ajunga oricum sa dispara coduri din campul client_id, iar daca nu se fac stergeri (desi nu imi pot imagina un scenariu in care sa nu se foloseasca stegeri niciodata) poti sa folosesti pur si simplu recno().

Alex Dobrin
Algis Info
 5/25/2006 9:50:39 PM
User is offlineanonymous
0 posts


Re: stergere valoare din cimp cu autoincrementare
 (Romania)

In primul rand nu ar trebui sa te intereseze ce valoare are campul client_id. Acest camp trebuie folosit exclusiv pentru a identifica unic o inregistrare. Niciodata nu se arata utilizatorului.

Poti face ceea ce vrei tu folosind view-uri. Datele se vor salva in tabela doar in momentul in care se executa linia Tableupdate. In view nu te intereseaza ce valoare are cheia. Aceasta va fi adaugata doar in momentul in care salvezi datele. Pentru folosirea view-urilor da jos din sectiunea Downloads/Tutoriale incepatori/Contacts pentru incepatori.

 5/25/2006 9:54:56 PM
User is offlineanonymous
0 posts


Re: stergere valoare din cimp cu autoincrementare
 (Romania)

Adaugi 100 de clienti. Vei avea campul client_id ordonat de la 1 la 100. Insa probabil ca este mult mai interesanta o ordonare alfabetica, dupa numele clientului. Daca sortezi dupa acest camp, s-a dus ordinea in campul client_id.

 5/26/2006 8:35:02 AM
User is offlineadrifox
9 posts
www.contesti.ro


Re: stergere valoare din cimp cu autoincrementare
 (France)
 Horatiu wrote

Adaugi 100 de clienti. Vei avea campul client_id ordonat de la 1 la 100. Insa probabil ca este mult mai interesanta o ordonare alfabetica, dupa numele clientului. Daca sortezi dupa acest camp, s-a dus ordinea in campul client_id.

multumesc de interes,

practic am nevoie de cimpul acesta care sa reflecte unic o inregistrare pentru ca exista posibilitatea ca sa am pe inregistrarea 1 nume_client = popescu si acelasi popescu poate fi si pe inregistrarea x din celelalte 99 ramase...

in plus prin client_id va trebui sa am asigurata relatie in alta baza de date solicitari.dbf, unde va trebui ca sa am aceeasi valoare client_id sa pot face relatia 1:M. adica un client poate avea mai multe solicitari ! 

 5/26/2006 9:48:15 AM
User is offlineTibisan
269 posts
4th


Re: stergere valoare din cimp cu autoincrementare
 (Romania)
pai atunci da-le userilor posibilitatea sa caute ce clienti au bagat. faptul ca ei duplica un acelasi client in tabela de clienti tine de organizare a muncii si folosire a aplicatiei, nu de legaturile din aplicatie. Intr-o aplicatie eroarea umana este inevitabila si, pentru ca mereu avem ceva de imbunatatit, se dovedeste ca nu 100% controlabila... decat daca face foarte putine lucruri. sau poate nici atunci...
 5/26/2006 10:56:05 AM
User is offlineadrifox
9 posts
www.contesti.ro


Re: stergere valoare din cimp cu autoincrementare
 (France)

 Tibisan wrote
pai atunci da-le userilor posibilitatea sa caute ce clienti au bagat. faptul ca ei duplica un acelasi client in tabela de clienti tine de organizare a muncii si folosire a aplicatiei, nu de legaturile din aplicatie. Intr-o aplicatie eroarea umana este inevitabila si, pentru ca mereu avem ceva de imbunatatit, se dovedeste ca nu 100% controlabila... decat daca face foarte putine lucruri. sau poate nici atunci...

sa admitem ca la un moment dat pot fi "en" de popescu, si in acest caz ei (clientii ca si entitati) se vor diferentia prin cnp. acum o sa vina intrebarea de ce mai am nevoie de client_id cind pot avea unic cimpul cnp ? Nu toti clientii vor dori sa-si decline identitatea cnp ! in acest caz poate fi completat manual de forma 1000000000000 s.a.m.d., existind posibilatetea de dublaj, sau poate fi lasat cimp gol pina la obtinerea, pe o alta cale, a cnp de la client 

hai ca ne-a cam abatut de la tema subiectului, deci cum fac sa nu mai tina minte acea valoare incrementata ?

 5/26/2006 11:33:13 AM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: stergere valoare din cimp cu autoincrementare
 (N/A)
Poti ca in momentul in care apesi "Add' sa nu scrii automat si in tabela pentru a rezerva numarul, ci sa faci un cod care sa identifice urmatorul cod sau sa nu-l completezi decat in momentul confirmarii adaugarii.

Totusi intrebarea ramane. De ce te deranjeaza ca se foloseste urmatorul cod cand sunt sanse f. mari ca la un moment dat sa stergi unul dintre clienti si sa ajungi sa ai un cod lipsa?

Alex Dobrin
Algis Info
 5/26/2006 11:48:35 AM
User is offlineTibisan
269 posts
4th


Re: stergere valoare din cimp cu autoincrementare
 (Romania) Modified By Tibisan  on 5/26/2006 11:50:32 AM)
 adrifox wrote

sa admitem ca la un moment dat pot fi "en" de popescu, si in acest caz ei (clientii ca si entitati) se vor diferentia prin cnp. acum o sa vina intrebarea de ce mai am nevoie de client_id cind pot avea unic cimpul cnp ? Nu toti clientii vor dori sa-si decline identitatea cnp ! in acest caz poate fi completat manual de forma 1000000000000 s.a.m.d., existind posibilatetea de dublaj, sau poate fi lasat cimp gol pina la obtinerea, pe o alta cale, a cnp de la client 

hai ca ne-a cam abatut de la tema subiectului, deci cum fac sa nu mai tina minte acea valoare incrementata ?

Diferenta intre cele 2 tipuri de valori, cnp si client_id, este ca mai degraba poti face relatii pe campul id, si cautari prin index, decat prin cnp. Exista o diferenta intre unicitatea datelor si unicitatea inregistrarilor. Cea din urma urmareste independenta fata de prima, iar prima se asigura prin validari de date. Iar programatorul trebuie sa asigure conlucrarea intre cele 2 pentru a asigura date consistente.

Dar ca sa nu incep monologuri, solutia pe care o cauti tu are 2 taisuri: poti sa te uiti in exemplul furnizat in Solution.app care vine cu foxul, in capitolul "what's new in vfp8" unde este implementata o incrementare manuala la care poti umbla. Dar odata ce renunti la metoda alocarii unice, o singura data, a unui id, renunti la siguranta 100% ca id-ul acela este unic, tocmai datorita faptului ca dai inainte/inapoi id-ul ala in functie de salvarea inregistrarilor.

De ce nu faci altfel? Nu adaugi inregistrare decat in momentul cand esti sigur ca informatia trebuie salvata prin verificari. Trebuie sa-ti regandesti metodele, pentru ca eu nu vad cum ai putea impune unicitatea cum vrei tu....

Si mai este un aspect: daca vrei continuitate de id, va trebui sa umbli la golurile lasate de stergerea unora dintre id-uri, si sa le refolosesti astfel incat sa nu existe (prea multe) gauri. Bataie de cap nu gluma....

 5/26/2006 12:12:44 PM
User is offlineadrifox
9 posts
www.contesti.ro


Re: stergere valoare din cimp cu autoincrementare
 (France)

Multumesc Tibisan, Dobrin, Horatiu, Bogdan cum dealtfel multumesc tuturor care s-au aplecat asupra acestei probleme. Am retinut fiecare aspect si diseara (programatorii umbla noaptea, ca liliecii !) am sa incerc sa experimentez tot ce m-ati sfatuit voi. Daca mai sint idei accept orice.

multumesc

adrian

  Visual FoxPro  Form-uri si generatoare de form-uri  stergere valoar...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement