Search  
Monday, January 27, 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  Baze de date, tabele, view-uri si indecsi  Tabel corupt...
 Tabel corupt
 
 4/15/2013 7:27:23 PM
User is offlineMarcel_Arad
55 posts


Tabel corupt
 (N/A)
Vfp8

Am un dbf corupt. As vrea sa aflu ceva solutii alternative la ADR. Ultima data cand am reparat cu ADR (un alt tabel dintr-o alta aplicatie) au aparut ca si valide inregistrarile marcate pentru stergere (s-au demarcat) si a trebuit ceva munca de chinez pana le-am dibuit care trebuie sterse din nou. Dbf-ul este free si are si index compus (.cdx). De asemenea, are camp autoincrement.

Multumesc mult!
 4/15/2013 9:11:52 PM
User is offlineSCHRECK
478 posts
2nd


Re: Tabel corupt
 (N/A)
 Marcel_Arad wrote
Vfp8

Am un dbf corupt. As vrea sa aflu ceva solutii alternative la ADR. Ultima data cand am reparat cu ADR (un alt tabel dintr-o alta aplicatie) au aparut ca si valide inregistrarile marcate pentru stergere (s-au demarcat) si a trebuit ceva munca de chinez pana le-am dibuit care trebuie sterse din nou. Dbf-ul este free si are si index compus (.cdx). De asemenea, are camp autoincrement.

Multumesc mult!


INCERCA SA-L DESCHIZI CU EXCEL, IAR DACA MERGE IL SALVEZI CU EXTENSIA DBF.
SI EU AM AVUT TABELE CORUPTE SI DE MULTE ORI AM RECUPERAT CU METODA DE MAI SUS
 4/15/2013 11:13:33 PM
User is offlineMarcel_Arad
55 posts


Re: Tabel corupt
 (N/A)
Multumesc, maine o sa incerc.
 4/16/2013 8:55:29 AM
User is offlineRomeo
664 posts
1st


Re: Tabel corupt
 (N/A)
Orice tabel foxpro incepe cu un header in care se gasesc tot felul de informatii (http://msdn.microsoft.com/en-us/library/aa975386%28v=vs.71%29.aspx). Dupa acest header, urmeaza una dupa alta, secvential inregistrarile cu datele concrete la care se adauga un camp de un caracter corespunzand marcajul pt stergere.

Pe baza unui tabel necorupt, fara nici o inregistrare, identifici dimensiunea headerului, dupa care citesti inregistrare cu inregistrare informatiiler din tabel ( http://msdn.microsoft.com/en-us/library/8z336cs7%28v=vs.80%29.aspx ). le desfaci camp cu camp si le treci intr-un nou tabel (necorult).
 4/16/2013 9:43:01 AM
User is offlineRomeo
664 posts
1st


Re: Tabel corupt
 (N/A)
Headerul unei tabele are 296 octeti + 32 octeti*numarul de campuri din structura. In cazul unei tabele teste_diverse.dbf cu structura:
Nume C, 40
Datanast D, 8 octeti
Localitate C, 20
Headerul va avea o lungime de 296 + 32*3 octeti. Datele propriuzise vor incepe de la octetul 323.

Urmatorul program recupereaza datele (Fotache-Visual FoxPro Ghidul dezvoltarii aplicatiilor profesionale, Polirom 2002, pag 110-111)

Listing 4.14. Program pentru citirea unor date în format binar
* incercare de recuperare a datelor dintr-o
* tabela .DBF compromisa
* numele si structura tabelei:
* TESTE_DIVERSE(nume, C(40), datanast D, localitate C(20))
CLEAR
* deschidem fisierul (extensia e obligatorie)
nTabela=FOPEN("k:\database\teste_diverse.dbf")
IF nTabela=-1
MESSAGEBOX("Nu pot deschide fisierul. Exista sau e cumva deschis deja?")
ELSE
* deplasare 392 de octeti (296+3cimpuri*32octeti per camp)
FSEEK(nTabela,392)
* in fiecare inregistrare primul octet
* constituie marcajul de stergere
marcaj=FREAD(nTabela,1)
* citim tabela pana la sfarsit
DO WHILE NOT FEOF(nTabela)
camp1=FREAD(nTabela,40)
camp2=FREAD(nTabela,8)
camp3=FREAD (nTabela, 20)
? marcaj, camp1
?? DATE(VAL(LEFT(camp2,4)),VAL(SUBSTR(camp2, 5,2)), VAL(SUBSTR(camp2,7,2)))
?? " ", camp3
* citim primul octet de pe inregistrare: dupa ultima inregistrare
* el nu mai este marcaj de stergere, ci caracterul EOF
marcaj=FREAD(nTabela,1)
ENDDO
* inchidem fisierul
FCLOSE(nTabela)
ENDIF
 4/16/2013 9:53:14 AM
User is offlineMarcel_Arad
55 posts


Re: Tabel corupt
 (N/A)
Pana la urma am reusit repararea cu ADR si a fost ok (era urgent).

Multumesc mult pentru raspunsuri!
 4/16/2013 11:45:00 AM
User is offlineRomeo
664 posts
1st


Re: Tabel corupt
 (N/A)
Atunci cand ai o aplicatie cu date .dbc, .dbf ori de cate ori se intrerupe tensiunea brusc, exista posibilitatea ca sa se strice fisierele (.dbf) in special in cazul in care calculatorul pe care ruleaza aplicatia este mai vechi.
Este necesar sa ai la dispozitie un modul care sa permita refacerea datelor automat, de catre utilizator. De aceea tii dbc si dbf-uri goale intr-un director de rezerva, iar utilizatorul sa poate copia tabelul corupt intr-o zona de manevra dupa care sa reconstruiasca automat tabelul corupt.
Alternativa ar fi ca pe fiecare statie unde ruleaza aplicatie sa ai un UPS.

PS: Prin 1996 o firma a fost aproape gata sa intre in faliment, deoarece nu a prevazut acest tip de incidente si nu era pregatita sa le trateze (aplicatii cu vfp3).
 4/16/2013 11:51:42 AM
User is offlinemyself
153 posts
5th


Re: Tabel corupt
 (N/A)
O alta varianta(in cazul in care preferi DBF-uri) ar fi sa nu mai lucrezi direct pe tabele(DBF) ci sa folosesti view-uri si cursoare. :)
Cea mai buna varianta ar fi sa treci la server de baze de date(MySQL, FIREBIRD, ORACLE, etc.) si in felul asta scapi de astfel de probleme.

Eu personal stiu pe cineva care la un momendat a preferat sa iti tina bazele de date in fisiere txt, pentru ca nu se stricau. Asta de pe vreamea Fox-ului de DOS.
 4/16/2013 2:20:04 PM
User is offlineMarcel_Arad
55 posts


Re: Tabel corupt
 (N/A)
Ori de cate ori se poate, incerc sa lucrez acum doar cu alte baze de date decat cele native vfp (MySql, MSSQL).
Cand lucrez cu dbf-uri, am o interfata de start (in care stabilesc calea catre tabelele aplicatiei, diferite setari, etc.) din care lansez un form meniu care ramane in spate pe tot parcursul aplicatiei, la initializarea caruia deschid toate dbf-urile (bineinteles shared) necesare aplicatiei.
Nu lucrez niciodata direct cu tabelele (pentru vizualizari in grid-uri, select din combo-uri) ci doar cu select-uri in cursoare. Cand fac modificari sau inserari folosesc buffering pe tabele, sau comenzi sql de insert, update, delete, dupa care reiau interogarile pentru vizualizari. Chestia frustranta cand lucrezi cu dbf-uri free este ca nu se pot folosi tranzactii cand se fac actualizari pe mai multe tabele. Cu .dbc-uri m-am ars de doua ori, din fericire la inceputul proiectarii aplicatiilor, motiv pentru care am renuntat definitiv la folosirea acestora (oricum sunt din ce in ce mai mult de domeniul trecutului).
 4/16/2013 5:09:02 PM
User is offlineMarcel_Arad
55 posts


Re: Tabel corupt
 (N/A)
Pt. Romeo: Multumesc pentru pt. program!
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Tabel corupt...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement