将文件保存到数据库记录但不是blob - 保存在PC上的目录中

时间:2015-05-28 08:19:04

标签: delphi delphi-xe2 sybase-asa

有没有人保存过针对数据库记录的文件,但是将它们存储在PC上的目录中?

这样的软件允许您根据数据库记录添加文件,但在添加文件时,它会创建一个目录并获取该文件的副本并将其放入其中。仍然允许用户进入数据库记录并从软件中查看文件。

非常感谢任何帮助。 谢谢,

2 个答案:

答案 0 :(得分:1)

您可以将文件存储在文件夹中并将路径保存在数据库记录中,但这会使文件仅对同一台计算机上运行的软件可用。您可以使用FTP服务器并在其上存储文件,使其名称等于数据库记录中的唯一字段,例如自动生成/自动增量ID字段。这样,在任何计算机上运行的客户端软件都可以轻松检索与数据库记录对应的文件。

答案 1 :(得分:0)

我实际上在我的一个程序中使用了这种方法。

现在请注意我有一个自定义的数据库和数据库引擎。

我真的怀疑这可以用普通的数据库引擎进行,而不需要对它们进行一些更改。为什么呢?

为了使其工作,您需要修改记录准备程序。什么是记录准备程序?

记录准备例程是从多个数据库表(关系数据库连接)读取数据然后将它们连接到最终发送到客户端的单个结构化记录的函数数。

正是这些例程控制着一些数据的读取方式和位置。

为什么我决定实施这个?

很多年前,当我只拥有旧的基于Win98的计算机时。并且因为Win98不支持NTFS文件系统但只支持FAT32我受到3 GB文件大小的限制,当将一堆文件直接保存到数据库中时可能会很快超出该数据库,该数据库通常存储在单个文件或几个不同的文件中(每个数据库一个)表)在一些数据库中。

由于今天的计算机文件系统不再具有此限制,因此不再需要此类解决方案。

但我仍然决定保留这项功能。为什么?

我存储的大多数文件都是文本文件。因此,为了减少数据库服务器上的空间需求,我去实现了单词压缩。

因此所有文件都被压缩,但是当客户端请求包含这些文件之一的某些记录时,文件将被解压缩并发送给客户端(以保持与旧客户端软件的向后兼容性)。

在较新的客户端软件中,我将这些文件以压缩格式与解压缩所需的单词字典一起传输。所以文件现在在客户端解压缩。

至于我还存储的非文本文件我计划实现自定义文件服务器,因此这些文件甚至不会通过数据库引擎本身传输,因为这会导致一些减速,特别是在更大的情况下文件。