1

Konu: .dbc ve .dcx uzantılı dosya boyutu

Eski forumda boyutu büyümüş olan dbc ve dcx dosyalarının tamiri veya normal boyutlarına dönüşümü ile ilgili Sayın Çetin Başöz ün bir kodu vardı. Aynı kodu veya başka bir yöntem varsa buradan verirseniz sevinirim...Herkese iyi çalışmalar....

2 Son düzenleyen, cetinyasar (14.12.2006 13:06:28)

Re: .dbc ve .dcx uzantılı dosya boyutu

Visual Fox Pro
OPEN DATABASE dbdata.DBC EXCLUSIVE

VALIDATE database RECOVER
PACK DATABASE

Başka bir yöntem ise DataBase dosyalarını silip tekrar oluşturmak.

3

Re: .dbc ve .dcx uzantılı dosya boyutu

Çetin YAŞAR Bey cevabınız için teşekkürler..Ancak hatırladığım kadarı ile Çetin BAŞÖZ ün kod örneği daha değişikti..O örneği verebilirmisiniz....Saygılar...

4

Re: .dbc ve .dcx uzantılı dosya boyutu

Üzgünüm ama bende o kodlar yok

5

Re: .dbc ve .dcx uzantılı dosya boyutu

Bu mu?

Visual Fox Pro
* RepairHeaderAndMemo

* Parameters
*    tcDBF          : Full path and name of dbf file to repair
* Remarks :
*   Has CDX flag is cleared && New copy has no CDX
Lparameters tcDBF
Local handle, lnFileSize, lnReccount, lnHeaderSize, lnRecordSize, ;
  lnCalculatedReccount, llHasMemo
Set Step On
handle=fopen(tcDBF,12) && Opened readwrite
lnFileSize = fseek(handle,0,2) && Get file size
* Read header info
lnReccount   = ReadBytes(handle, 4,4)
lnHeaderSize = ReadBytes(handle, 8,2)
lnRecordSize = ReadBytes(handle,10,2)
 
lnCalculatedReccount = floor((lnFileSize-lnHeaderSize)/lnRecordSize)
If lnCalculatedReccount # lnReccount && If calculated # recorded fix it
  WriteBytes(handle, 4,4,lnCalculatedReccount)
Endif
WriteBytes(handle, 28,1,0) && Clear has CDX, has memo, isDBC flags
llHasMemo=file(forceext(tcDBF,'FPT'))
If llHasMemo
  RepairMemo(forceext(tcDBF,'FPT'))
  WriteBytes(handle, 28,1,0x02) && Set has memo flag
Endif
=fclose(handle)
 
Function RepairMemoHeader
Lparameters tcMemoFilename
Local handle, lnFileSize, lnNextBlockPointer, lnBlockSize, lnFirstBlock, lnCalculatedFileSize
 
handle=fopen(tcMemoFilename,12) && Opened readwrite
lnFileSize = fseek(handle,0,2) && Get file size
* Read header info
lnNextBlockPointer = ReadBytes(handle, 0,4,.T.) && Stored in left-to-right format
lnBlockSize        = ReadBytes(handle, 6,2,.T.) && Stored in left-to-right format
 
* Specific to me - no blocksize setting to something other than default 0x40
If lnBlockSize # 0x40
  WriteBytes(handle, 6,2,0x40,.T.)
  lnBlockSize=0x40
Endif
*
 
lnFirstBlock       = ceiling(512/lnBlockSize) && Possible min lnNextblockpointer
lnCalculatedFileSize = lnNextBlockPointer*lnBlockSize
 
* Fix if needs repair
If !(lnFileSize >= 512 ;
    and lnNextBlockPointer >= lnFirstBlock ;
    and lnCalculatedFileSize >= lnFileSize) && Memo needs repair
  lnNextBlockPointer = max(lnNextBlockPointer, lnFirstBlock)
  lnFileSize = lnNextBlockPointer * lnBlockSize
  .WriteBytes(handle, 0,4,lnNextBlockPointer,.T.) && Fix next block pointer
  =fchsize(handle, lnFileSize) && Fix filesize
Endif
Endwith
=fclose(handle)
 
Function ReadBytes
Lparameters tnHandle, tnPos, tnSize, tlLR
Local lcString, lnRetValue,ix
=fseek(tnHandle, tnPos,0) && Go to pos
lcString = fread(tnHandle, tnSize) && Read tnSize bytes
lnRetValue = 0
For ix=0 to tnSize-1  && Convert to a number
  lnRetValue = lnRetValue + asc(substr(lcString,ix+1)) * ;
    iif(tlLR,256^(tnSize-1-ix),256^ix)
Endfor
Return int(lnRetValue)
 
Function WriteBytes
Lparameters tnHandle, tnPos, tnSize, tnNumber, tlLR
Local lcString, lnLowDword, lnHighDword,ix
lcString=''
If tlLR
  For ix=tnSize-1 to 0 step -1
    lcString=lcString+chr(tnNumber/256^ix%256)
  Endfor
Else
  For ix=0 to tnSize-1
    lcString=lcString+chr(tnNumber/256^ix%256)
  Endfor
Endif
=fseek(tnHandle, tnPos,0) && Go to pos
Return fwrite(tnHandle,lcString)

6

Re: .dbc ve .dcx uzantılı dosya boyutu

Sayın Çetin BAŞÖZ cevabınız için teşekkürler..Daha önceki kod çok kısa idi..Getfile gibi..Dosya çağrılıyor ve temizleniyor veya onarılıyor ve böylece boyutu küçülüyordu..Yukarıda Çetin YAŞAR bey in verdiği kod bu işlemi yapıyor ancak dbc. dosyasını seçimi yapmıyor..Önce database i seçecek ve sonra küçüktecek bir kod..Eğer mümkünse...Teşekkürler..

7

Re: .dbc ve .dcx uzantılı dosya boyutu

dbc'yi kucutmekten kastin ne pek anlamadim. Belki budur:

set exclusive on
open database myDatabase
pack database

8

Re: .dbc ve .dcx uzantılı dosya boyutu

arada:
validate database recover

9

Re: .dbc ve .dcx uzantılı dosya boyutu

Herhalde bu işini görür

Visual Fox Pro
lFile = GETFILE("dbc")

OPEN DATABASE (lFile) EXCLUSIVE
VALIDATE database RECOVER
PACK DATABASE

10

Re: .dbc ve .dcx uzantılı dosya boyutu

Cevaplarınız için teşekkürler..