BD EM ARQUIVO BINARIO

ROGERIOHOFFMANN 18/05/2004 17:31:17
#25357
Olá,

Na seção Artigos e Dicas do vbMania existem algumas matérias sobre banco de dados em arquivos texto. Gostaria de saber se há como fazer a mesma coisa só que em arquivo binário.

Com arquivo texto os registros ficam muito expostos caso algum usuário abra o arquivo no bloco de notas por exemplo.

Grato,
Rogério José Hoffmann.
USUARIO.EXCLUIDOS 22/05/2004 15:01:13
#26131
Resposta escolhida
Primeiramente, quem escreveu esse artigo que você mencionou esta equivocado ao associar acesso à  arquivos texto/binário em VB com Banco de dados. Avise o autor para que esse revise o artigo pois conceitualmente esta disseminando informação errada para um grande número de pessoas no fórum.

Existem funcionalidades básicas num banco de dados que você não tem em arquivos textos/binários tais como: Concorrência, Segurança, Construção de índices, Construção do caminho de acesso, Restrições, Integridade referencial, Suporte a linguagem SQL, etc...

O acesso à  arquivos binários difere do acesso a arquivos textos nos seguintes pontos:
a) Os registros manuseados devem ser estruturados (estruturas concisas, UDTs).
b) Os tipos de dados armazenados devem ter tamanhos fixos.
- Nunca use campos Variant;
- Campos String devem ter o seu tamanho fixado na UDT.
c) Use Get leitura;
Put para gravação;
Seek para reposicionamento do registro.

Abaixo você ira encontrar um pequeno resumo e fragmentos de código para manusear arquivos com registros estruturados:

Definição da estrutura de dados e variáveis usados nos exemplos seguintes:

' Note que os campos string "devem" ter tamanho fixo
Public Type udtFuncionario
CodFunc As Integer
Nome As String * 40
Idade As Integer
Sexo As String * 1
' etc
End Type

Public F As udtFuncionario
Public numRegs As Long
Public Reg As Long
Public regCor As Long
Public fPtr As Integer


Abrindo o arquivo:

' Obtendo ponteiro livre para abrir arquivo
fPtr = FreeFile

' Abrindo arquivo "C:    emp\func.dat"
' Acesso randà'mico (sequencial ou via seek)
' Com permissão para as operações de leitura e gravaçao
' e bloqueio de gravação para outros acessos
Open "C:    emp\func.dat" _
For Random _
Access Read Write _
Lock Write _
As #fPtr _
Len = Len(F)


Inicializando estrutura e gravando o registro:

' Inicializando estrutura
F.CodFunc = 1
F.Idade = 28
F.Nome = "João Maria"
F.Sexo = "M"

' Gravando o registro
Put #fPtr, , F


Posicionando (seek) o ponteiro de leitura/gravação de um arquivo:

' "n" equivale a posição ordinal do registro no arquivo
Seek #fPtr, n

' Posiciona o ponteiro de leitura/gravação no primeiro registro
Seek #fPtr, 1

' Loc(fPtr) retorna a posição do registro corrente


Lendo/Regravando o enésimo registro:

' Lendo o décimo registro
Get #fPtr, 10, F
' ou ainda
Seek #fPtr, 10
Get #fPtr, , F

' Altera o conteudo do décimo registro do arquivo
Put #fPtr, 10, F
' ou ainda
Seek #fPtr, 10
Put #fPtr, , F


Obtendo o número de registros e posição relativa do registro dentro do arquivo:

' Para arquivos abertos
numRegs = LOF(fPtr) \ Len(F)

' Para arquivo fechados
numRegs = FileLen("c:    emp\func.dat") \ Len(F)

' Posição do registro dentro do arquivo
' em acesso randà'mico representa o número do registro lido/gravado
' para acesso binary representa a posição do byte lido/gravado
regCor = Loc(fPtr)


Leitura sequencial e reversa do arquivo:

' Leitura sequencial
For Reg = 1 To numRegs
Get #fPtr, Reg, F
Next Reg
' ou ainda
For Reg = 1 To numRegs
Seek #fPtr, Reg
Get #fPtr, , F
Next Reg

' Leitura reversa
For Reg = numRegs To 1 Step -1
Get #fPtr, Reg, F
Next Reg
' ou ainda
For Reg = numRegs To 1 Step -1
Seek #fPtr, Reg
Get #fPtr, , F
Next Reg



Fechando arquivo:

Close #fPtr

Tópico encerrado , respostas não são mais permitidas