Página 1 de 1

Arquivos .DBT aumentar capacidade??

Enviado: 27 Jun 2011 20:35
por Robinson
Olá gostaria de saber se é possível aumentar a capaciade de armazenamento, pois no meu programa abre normalmente e depois começa a embaralhar tudo. O que posso fazer...Obrigado

Arquivos .DBT aumentar capacidade??

Enviado: 27 Jun 2011 23:22
por alxsts
Olá!

Seja bem-vindo ao fórum Robinson!

Este tipo de arquivo costuma mesmo causar problemas. Tanto é que muitos abandonaram seu uso logo no princípio.

A capacidade do arquivo já está definida e você não poderá alterar. Cada registro do arquivo DBT poderá ter até 64Kb e o arquivo em si, no máximo 32Mb.

Tente abrir as tabelas que contem campos memo e fazer um COPY TO outra tabela. Depois exclua a antiga e renomeie a nova.

É possível migrar a sua base de dados para DBFCDX. Usando este driver, além de ser mais seguro, diminuirão os problemas com aquivos memo (que neste RDD tem a extensão .FPT), pois os mesmos são compactados.

Existe também um programa que lê a tabela DBFNTX com DBT e gera em DBFCDX com FPT:

Código: Selecionar todos

/*
   DBT2FPT.PRG - Memo file converter by Loren Scott / SuccessWare 90, Inc.

   This is a simple program demonstrating how to convert Clipper .DBT's
   to FoxPro-compatible FPT's using the Clipper 5.2 DBFCDX RDD.

    Compile:  CLIPPER dbt2fpt /n/w
    Link   :  BLINKER FI dbt2fpt LIB dbfcdx,clipper

   ---------------------------------------------------------------------
*/

#include "RDDSYS.CH"

REQUEST DBFCDX


FUNC DBT2FPT( cOldFile, cNewFile )

LOCAL aFile := {}

cOldFile := Upper( AllTrim( cOldFile ))
cNewFile := Upper( AllTrim( cNewFile ))

IF "." $ cOldFile
  cOldFile := Left( cOldFile, at( ".", cOldFile )-1 )
ENDIF

IF "." $ cNewFile
  cNewFile := Left( cNewFile, at( ".", cNewFile )-1 )
ENDIF

// Display a message
? "DBT2FPT - Memo File Converter"
?

// Make sure we got the correct parameters
IF PCOUNT() < 2
  ? "USAGE:  DBT2FPT <oldfile> <newfile>"
  ?
  ? "where:  <oldfile> = Name of the database containing the memo"
  ? "                    field to convert."
  ? "        <newfile> = New file to create"
  ?
  Return(1)
ENDIF

// Check for the original file
IF !File( cOldFile + ".DBF" )
  ? "Cannot find " + cOldFile + "!"
  ?
  Return(2)
ENDIF

// Open the original file (using DBFNTX)
USE (cOldFile) VIA "DBFNTX"

// Set DBFCDX Driver as the default for creating new dbf
RDDSetDefault("DBFCDX")

// Show that we're doing something
? "Working"

// Now copy to the new file (with nifty UDF)
COPY TO (cNewFile) FOR ShowDot()

// Look, we made it!
?? "Done!"
?

// Clean up before leaving
CLOSE ALL

// Compare file sizes
aFile := Directory( cOldFile + ".DBT" )
? PadR( "Old " + cOldFile + ".DBT Size",21 ) + ": "
?? Str( aFile[1,2] ) + " bytes"
aFile := Directory( cNewFile + ".FPT" )
? PadR( "New " + cNewFile + ".FPT Size",21 ) + ": "
?? Str( aFile[1,2] ) + " bytes"
?

Return(0)

FUNC ShowDot()
  ?? "."
Return (.T.)
Mas você terá que migrar a base para DBFCDX.

Arquivos .DBT aumentar capacidade??

Enviado: 28 Jun 2011 10:17
por Pablo César
Como disse o colega Alexandre, esse tipo de campo MEMO (responsável pela existência do arquivo .DBT) sãoproblemáticos. Tem muito material aqui no fórum falando disso, veja este prara começar:

https://pctoledo.org/forum/viewto ... 398#p17337

Então aconselho a você se desfazer desse tipo de campo e partir para gerar arquivos individuais que cujo nome_de_arquivo esteja amarrado ao registro. Daí a criação e manutenção (edição do arquivo) sugiro que seja feita não com memowrit nem memoedit. Faça sua própria função seja importando para dbf e editando em tbrowse (por exemplo) ou uma função que trate tudo em baixo nível (com FOPEN/FCLOSE/FWRITE) pela razão que a princio os arquivos poderão ser muito grandes.

Então, os arquivos são muito grandes para cada registro ou são muitos em quantidade total de registros ? Se forem arquivo até 640k cada, então pode serem editados ou criados com MEMOWRIT.

Arquivos .DBT aumentar capacidade??

Enviado: 28 Jun 2011 14:06
por ANDRIL
Pablo César escreveu:Se forem arquivo até 640k cada
Para usar as funções MEMOEDIT, MEMOWRIT e etc do clipper, o tamanho máximo do arquivo é de 64Kbytes. Já no [x]harbour parece não ter mais este limite.

Abraços.