1. Levantando a questão
Em um projeto recente, encontrei um problema com a operação de tabelas da biblioteca FoxPro (*.DBF) pelo ASP. Na realidade, existem muitos softwares aplicativos que usam tabelas DBF. Como usar esses dados em um ambiente de rede deixou muitos amigos perdidos.
Também verifiquei muitas informações e não consegui encontrar uma explicação detalhada da solução. Após o teste, resolvi inicialmente esse problema e irei compartilhá-lo com todos.
Este artigo tenta resolver os seguintes problemas:
1. ASP junta-se à tabela livre (arquivo *.dbf) gerada pelo FoxPro
2. Armazene vários tipos de arquivos de dados e gráficos na tabela dbf ao mesmo tempo
(O programa de exemplo está disponível em Set conn = Server.CreateObject("ADODB.Connection")
connstr = "Driver={Driver Microsoft Visual FoxPro};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusivo=Não"
conn.Open connstr
No código acima, data é o caminho relativo onde meu arquivo DBF está localizado (em relação ao arquivo onde este código está localizado) e é convertido em um caminho absoluto através de Server.MapPath(db).
http://www.connectionstrings.com fornece cadeias de conexão para muitos tipos de arquivos de tabela de biblioteca. Para arquivos DBF, as cadeias de conexão fornecidas são:
"Driver={Driver Microsoft dBASE (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
Não me conectei com sucesso usando esta string de conexão e não realizei mais testes. Amigos interessados podem tentar a string acima.
.www.downcodes.com
2. Declare o nome da tabela na instrução SQL
Você pode declarar o nome da tabela a ser operado na instrução SQL na forma de [nome da tabela] ou [nome da tabela.extensão]. Por exemplo, o nome do arquivo da tabela é t1.dbf e a instrução SQL é:
selecione * em [t1] ou selecione * em [t1.dbf]
3. Operações de armazenamento de vários tipos de dados
DBF não suporta muitos tipos de dados, entre os quais vale destacar Data (tipo de data), Memo (tipo de nota) e Geral (tipo geral). Aqui nos concentramos nos dados do tipo de dados, os tipos Memo e Gen são usados ao armazenar arquivos gráficos, que serão explicados posteriormente.
Geralmente uso dois métodos para escrever operações de banco de dados, um é usar a instrução insert e o outro é usar o método addnew. Para tabelas DBF, esses dois métodos são ligeiramente diferentes.
Ao usar a instrução insert, observe que o formato de escrita dos dados do tipo Date é {^yyyy-mm-dd} e o delimitador é diferente do # do Access e do SQL Server. A instrução SQL específica é:
insira em valores [t1.dbf] (nome, aniversário) ('MeuNome',{^1970-1-1})
Ao usar o método addnew, o código que usei originalmente foi:
rst.open "[t1]",conn,0,3
primeiro.addnew
rst(0).value = "MeuNome"
primeiro(1).valor = {^1970-1-1}
primeira atualização
primeiro.fechar
Não há problema ao operar o SQL Server e o Access, mas há um problema ao operar arquivos DBF. Depois de experimentar, finalmente encontrei o método correto:
sql = "selecione * de t1"
primeiro.abrir sql,conn,0,3
primeiro.addnew
rst(0).value = "MeuNome"
primeiro(1).valor = {^1970-1-1}
primeira atualização
rst.close
Observe que a diferença entre os dois trechos de código acima está principalmente na instrução SQL. Conforme mencionado anteriormente, em instruções SQL, você pode declarar arquivos de tabela na forma de [nome da tabela] ou [nome da tabela.dbf], mas ao usar o método addnew, o nome da tabela não pode ter extensão e colchetes não podem ser adicionados, caso contrário, será exibido "Não é um nome de tabela simples, não pode ser atualizado".
4. Armazenamento de arquivos gráficos
Na tabela DBF, os campos memorando e geral podem ser usados para armazenar gráficos, áudio e vídeo, texto e outros arquivos (consulte http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 ). Aqui, definimos o tipo de campo como memo(binary) (tipo de preparação binária), usamos o método rst(n).AppendChunk() para gravar os dados binários da imagem resultante e usamos o método Response.BinaryWrite() para restaurar o binário dados para imagem. Existem muitos artigos relacionados ao armazenamento de imagens, então não entrarei em detalhes aqui.
Quanto a usar o campo Geral para armazenar fotos, tentei, mas não funcionou, então não tentei novamente.
5. Exclusão de dados
Você pode usar a instrução delete para excluir os dados, mas ao abrir o arquivo da tabela após a exclusão, você descobrirá que os dados são marcados apenas para exclusão e não são realmente excluídos da tabela. No Foxpro, use o comando pack para excluir dados permanentemente. Depois de verificar algumas informações, foi dito que o VB não pode implementar a operação de pack e, claro, o VBS não pode implementá-la. A solução geral é importar os dados da tabela (sem marca de exclusão, é claro) para uma nova tabela de vez em quando, excluir a tabela original e, em seguida, renomear a nova tabela com o nome da tabela original.
6. Dados e imagens são armazenados no banco de dados ao mesmo tempo
A propósito, esse problema não está no escopo deste artigo. Existem muitos artigos na Internet que fornecem soluções.
Implementei esta função usando o programa de upload sem componentes "Huajing". Alguns amigos podem perguntar: o upload de "Huajing" é gravado como um arquivo e não há como armazená-lo no banco de dados. Nada mal, mas com uma pequena alteração, você pode obter os dados binários da imagem e armazená-los no banco de dados. No meu exemplo, as alterações no programa de ambiente são comentadas, consulte-as.
4. Conclusão
Este artigo discute principalmente a operação de tabelas livres de DBF do ASP. Se for uma biblioteca DBC, a cadeia de conexão correspondente é fornecida em inc/conn.asp no exemplo.
Neste ponto, acredito que os amigos tenham uma compreensão geral do funcionamento das tabelas DBF. Combinado com meus exemplos, acredito que você possa desenvolver mais funções.
BOA SORTE!