BD EM ARQUIVO BINARIO
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.
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.
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:
Abrindo o arquivo:
Inicializando estrutura e gravando o registro:
Posicionando (seek) o ponteiro de leitura/gravação de um arquivo:
Lendo/Regravando o enésimo registro:
Obtendo o número de registros e posição relativa do registro dentro do arquivo:
Leitura sequencial e reversa do arquivo:
Fechando arquivo:
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