本申请是1996年1月2日提交的申请序列号为08/582,062和1996年2月1日提交的申请序列号为08/593,118的申请的后续部分,这两个申请的题目都是《具有多数据源能力的数据恢复方法和装置(DATA RETRIEVALMETHOD AND APPARATUS WITH MULTIPLE SOURCE CAPABILITY)》,本文将这两个申请都引用为参考文献。
优选实施例的详细描述
在描述本发明的某些方面之前,提供存储信息的各种形式的例子对促进理解本发明是有用的。提供几个例子来做这个工作,包括财务信息的例子和科学或技术信息的例子。表1提供由两个不同公司存储数据的各种类型的比较。表1旨在显示两个公司的概念化的财务组织和其它信息,并不是存储在数据库中的必要的信息(尽管如果希望的话,可以成为必要的信息)。
表1 财务组织的例子
公司#1 公司#2
帐目 |
帐目 |
现金 |
现金 |
应付帐目 |
银行#1 |
应收帐目 |
银行#2 |
|
银行#3 |
|
存款 |
|
检验 |
|
应付帐目 |
|
部分 |
|
顾问 |
|
应收帐目 |
|
销售 |
|
利息 |
雇员 |
雇员 |
销售员#1 |
销售 |
销售员#2 |
销售员#1 |
|
销售员#2 |
|
研究 |
|
研究员#1 |
|
研究员#2 |
项目 |
项目 |
研究 |
研究 |
销售 |
化学 |
|
生物化学 |
|
销售 |
|
老产品 |
|
新线 |
产品 |
产品 |
产品#1 |
老产品线 |
产品#2 |
线#1 |
|
产品1 |
|
产品2 |
|
线#2 |
|
产品3 |
|
产品4 |
|
新产品线 |
|
线#3 |
|
产品5 |
|
产品6 |
|
线#4 |
|
产品7 |
|
产品8 |
|
子公司 |
|
子公司#1 |
|
子公司#2 |
在表1的第一个例子中,公司1保留财务信息,雇员信息,项目信息和产品信息并因此有四个帐目部分。公司1的财务信息仅包含三个成分:现金,应付帐目和应收帐目。公司通过两类项目(研究和销售)维持其销售员的清单,追踪信息并且维持产品的清单。表1的第二个例子是稍微长(但仍然简单)的例子。在这个例子中,帐目在一个等级中有多个部分。尽管公司2的帐目有资现、应付帐目和应收帐目类别,但是这些类别的每一个有子类并且一些子类甚至更细的划分。类似地,雇员、项目和产品信息分为几个类型和子类,公司2还有附加的追踪条目,例如子公司。
表1说明,即使在考虑数据源和/或数据存储格式之间的差异之前,公司的结构和/或公司选择组织信息的方式也将造成一个系统与另一个系统的不同。例如,如果会计师要公司1和公司2作为客户并希望对这样两个公司使用报表制作和分析的统一或标准系统,那么做这件事是极困难的,即使公司1和公司2使用同样的数据库软件,甚至在那个软件中以类似的方式组织财务信息也是如此。因此,使用以前的方法,典型地要求人工分析和理解在表1中的信息,以便在基于那些公司数据,提供统一或标准的报表制作和分析。
仍然需考虑财务信息的上下关系,几种类型的信息存储能被用于存储公司1和/或公司2的财务信息。例如,信息能以一个或多个平面文件存储。应注意,至少根据一些用途,“平面文件”信息的存储不是真正的数据库系统。然而,本发明至少在一些实施例中能够容纳平面文件数据,以及其它数据库和非数据库存储方法。
图1是许多平面文件如何能被用于存储表1的公司2的信息的简要描述。尽管图1显示信息是以在许多纸上以书面形式出现的,数据实际上将存储到计算机可读的媒介上比如硬盘上,例如,正如下面描述的。图1的格式旨在描述组成多个文件101a到101f数据的逻辑结构,每个文件有文件标识信息104,在图1中描述的作为题目或标题信息104a、104b,和多个记录,在图1中被描述为行信息106a、106b、106c,每个记录有多个字段(在图1的描述中组织成列108a、108b、108c、108d)。具有或反映图1中描述的逻辑行和列结构的存储和存取数据的方法和装置对于那些编程领域的技术人员来说是众所周知的。本发明能被用在有关大量平面文件信息存储程序中。这种信息存储程序的例子包括那些以商标名Simply AccountingTM和MAS-90TM销售的程序。
图1描述的逻辑结构组织的数据以大量不同的格式存储。例如,在一个实施例中在每个平面文件101a到101f中的数据存储在个人计算机硬盘的一个单独的文件中。图2描述一个用于存储这样文件的目录/文件结构,其中所有在图1中描述的文件被存储在单一的子目录中。正如本领领域技术人员所周知的,各种文件,即使是以图2中描述的文件目录等级来组织的,也能被物理地存储到硬盘上的大量单独的存储单元中。大量格式能用于存储文件中的数据。例子被描述在图3A到3C中。在图3A的例子中,文件包括标题信息,紧接着存储第一记录106a、第二记录106b,等等。在图3A的例子中,使用固定长度数据格式,其中每条记录106a、106b,具有同样长度304(即占据固定的位数)。在图3A的实施例中,在每条记录中的每个字段也有固定的长度308a到308d。
图3B描述另一个固定长度数据存储方法,其中数据是以列序而不以在行序存储的(所有数据连续,因此所有描述连续,等等)。在图3B中的实施例中,以便帮助查找希望的数据,存储记录数目的指示322是有用的,例如作为标题的部分。在固定长度系统中,例如,正如在图3A或3B中描述的那样,一条特定的数据将位于从数据的开始起的一个给定距离(即给定数目的位)。例如,在图3A中,如果已知标题302长4字节,已知记录长度304为8字节,第一记录106a的数据信息必定会在字节数5处找到其开始,第二记录106b的数据信息必定会在字节数13处发现其开始,等等。
图3C描述在分隔字段而不是固定长度字段的数据存储。在分隔格式中,特定符号,即一种不同于任何用于存储数据的位形式,被用于标注记录和/或字段的结束或开始。在图3C描述的实施例中,使用两个不同的特定符号,一个来标注记录开始另一个标注字段开始。这些符号分别以代表任意位形式或符号的冒号和分号的形式显示在图3C中。在图3C的数据格式中,能够鉴别显示第一记录106a的数据信息的信息,作为在第一新记录符号324a之后,并先于第一新字段符号324b的信息。来自第二记录106b的数据信息是跟随第二新记录符号326a,并早于下一个跟随的新字段符号326b的信息,等等。很多存储信息的其它格式是可能的。从图3A到3C的图解中,很明显的是多数数据存储格式还存在另一个在不同类型的信息存储系统中数据的存取、协调和组合的问题。以前,想要直接存取信息的人们(例如,不使用数据库管理系统或其他旨在读取存储信息的软件)要求数据存储格式的知识,正如,在一些情况下,分析存储信息的例子所要求的那样。因此,适应会计师的希望存取表1中公司1和公司2中存储的信息的需要,不仅要求有关数据的逻辑组织(图1)、逻辑目录结构(图2)的信息,而且要求有关数据存储格式的信息(图3A到3C)。
除作为平面文件数据的信息存储以外,还存在大量其他的可能性。图4A到图4F描述一个在关系数据库环境下可能的信息的组织。在图4A到图4F的例子中,存储第一个交易表402,具有多个记录406a到406d。应注意在图4A中描述的记录在一些方面类似于那些在图1中描述的记录,即包括数据字段、描述字段、数量字段和总计字段。在图4A的例子中,附加索引字段408提供给每一个记录。在图4A例子中的交易表不包括在图1中描述的类型的标题信息104a,仅仅提供了单一的交易表图4A(而不是在图1的实施例中许多表101a到101f)。在图4A到图4F描述的关系数据库中,提供了附加的表来反映表1中描述的组织。例如,帐目表412包括表1定义的所有类型列表,用索引414与每个帐目相关。类似地,雇员表416包括表1雇员的姓名,每一个有与之相关的索引418。此外,在图4C中对每个姓名都有一个指示,用于指示该个人是否与销售力量与研究力量相联系(反映表1中显示的等级)。另外,包含一个字段,用于显示雇员的位置。还可以提供附加的表(没有画)来列出反映表1组织的公司2的各种项目、产品和子公司。
图4D描述一个链接表422,它对于交易表402的每一条记录都表示任何与希望的其他表的链接。例如,如果第一笔交易406a是与银行1现金帐目部分相关的交易,提供一条记录428,表示对于索引号为1的交易记录,适当的帐目参考是索引号为为424的交易记录。相似地,对雇员表416或其他的表(没有显示)可以做链接。因此,鉴于在图1中需要为每个可能的帐目、子公司、产品和项目等等的组合提供单独的文件(对一个相对复杂的帐目结构可能导致大量文件),在图4A到图4F的实施例中仅仅要求单一的交易表402,和链接表图422来提供信息,在图1的例子中,该信息是通过了解交易被存储在哪个平面文件中来得到。
在一个典型的关系数据库中,可以鉴别和显示满足某种标准的唯一信息,例如,仅有那些用于特定帐目和特定雇员的交易。在一些数据库软件中,可以存储这样的标准或“查询条件”以便使用,例如,当选择的信息是通常需要的信息时使用。图4E描述的表存储多个例如使用结构化查询语言(structured query language,SQL)的查询条件。用于特定数据库系统中的查询反映了一个公司分析或组织数据的方式。因此,对标准化报表的设计和基于这样数据库的信息分析有兴趣的会计师希望了解和/或能够复制由各种存储的查询条件(图4E)代表类型的数据分析。
另外,数据库的很多类型允许用户设计一个报表(不是显示就是打印)并在某些情况下,存储定义这样的报表的信息,例如,反复使用。所以,另一个表格或表格集(没有显示)被存为关系数据的一部分或与之相关的部分,以保存有关这样的报表信息。
在图4A到4F中描述的信息和结构以大量不同的方式存储。图5描述了用于存储多个数据表、链接表、查询表和/或报表格式的目录/文件等级。这样的数据能以大量不同的数据格式来存储,比如在图3A到图3C中描述的任意一种,或者本领域的技术人员所知道的其他格式。
以不同格式存储的信息的另一个例子是科学和技术信息。在图6中,平面文件系统提供给,例如气象研究,来存储表面温度信息。在图6的例子中,每个文件602a、602b、602c存储特定位置和测量单位信息(例如,华氏或摄氏),显示为标题信息604。对于每个记录606a、606b、606c,数据和每天每小时的读数存储在单独的字段中。存储这类数据的关系数据库系统在图7A到图7D中描述。数据表702包括所有观察数据和,对于每个观察数据的测量单位704a,和索引704b。表706(图7B)和708(图7C)存储涉及位置和每日的小时数信息。链接表(图7D)的每一行722、724能用于对存储在图7A中的任意数据点(正如其索引值704b显示的)显示有关数据点位置的索引值和有关那个数据点的每日时间。尽管图6和7A到7D的例子被简化,对本领域的技术人员如何建造信息系统来存储更多的诸如气象数据的更复杂数据集是很明显的,气象数据包括风速和风向,射频伴音数据,等等。所以,如果研究人员希望从两个气象数据源中关联信息,这两个气象数据源一个存储图6中描述系统的信息,另一个存储图7A到图7D中描述系统的信息,在以前的方法中典型地需要有顾问和其他专家来分析在图6中和在图7A到图7D中描述的信息存储结构和组织,并手工的开发出一套系统来访问这样类型的信息来允许其中数据的组合和协作。
图8是根据本发明的实施例,为克服以上描述的涉及不同信息系统中访问、协作或组合数据中的困难的所用系统的方框图。在图8的实施例中,根据在多个数据源806a、806b、806c、806d中与分析和/或访问信息有关的需要,主程序802选择性地激活各种驱动程序804b、804c、804d。为讨论的目的,在图8中描述的源数据806a到806d可以是由大量的程序或系统中的任何一个或一些存储或创造的数据,这些程序或系统用于组织或存储诸如平面文件系统、数据库、电子表格等上面讨论的数据。图8的数据和程序可以驻存在一个或多个计算机中。在一个实施例中,程序在局域网(LAN)的环境下实现,局域网有网络服务器计算机,和相关的磁盘或其他存储器件,以及一个或更多个客户机计算机。在一个实施例中,主程序802在客户机计算机上执行,而信息源806和新数据库808的数据文件存储在相关网络服务器的磁盘(或其他数据存储器件)上。本发明能用许多其他结构体系实现,比如在单个计算机上、在多个非网络计算机上,使用由诸如广域网、调制解调器通信,通过互连网等等的通讯链接的计算机,等等。大量类型的计算机能用于实现本发明,包括大型机和个人计算机,比如那些由国际商用机器公司(International Business Machines)(例如386、486或Pentium或Pentium Plus基本计算机)、Apple公司(比如MacIntosh计算机)生产的计算机和这些计算机的复制(clone)。在一个实施例中,使用DOS操作系统和/或MicrosoftWindow或Window 95用户接口实现程序。
这里称为驱动程序804a到804d的项目,不应该和某些数据库程序中提供的一类数据滤波器相混淆。根据用户确定的标准,数据滤波器典型地用于选择某种记录和/或字段的一类查询或逻辑测试。驱动程序804a到804d,在另一方面,正如下面更详细描述的,是用于分析和存取不同类型源数据而具有的多功能程序。在一个实施例中,功能模块804以本领域技术人员在理解了本发明所披露内容之后所理解的方式,作为动态链接库(dynamic linklibraries,DLL)提供。配置驱动程序804a到804d是用于一种或多种类型的数据源的操作,比如使用特定数据库程序产生的数据文件。取决于数据库程序的特性,必须具备比如,两个单独的由两个单独版本的数据库软件包产生的数据文件驱动程序。在一些情况下,可以提供单一驱动程序,单一驱动程序能用在有关的使用两个(或更多)不同类型或品牌的软件(或一个给定品牌数据库的不同版本或其他软件)产生的数据文件中。
在图8中描述的源数据806a到806d,通常情况下,可以是任何计算机可读的信息源。例子包括平面文件源数据、分级数据库、关系数据库、电子表格等。尽管图8描述了显示四个数据源的实施例,本发明能用在仅有单一数据源,或者有五个或更多的数据源的情况。尽管本发明可以用在其中每一个源数据806a到806d是使用不同类型或商标的软件产生的情况,但是也可以将本发明用在其中由相同品牌或类型的数据库或其他软件产生两个或多个数据源的情况中。作为一个例子,可以配置第一个驱动程序804a,用于从使用dBase II产生的数据文件中恢复的信息,可以配置第二个驱动程序,用于从使用dBase III产生的数据文件中恢复的信息,可以配置第三个驱动程序,用于从使用诸如Simple AccountingTM的平面文件系统产生的数据文件中恢复的信息,可以配置第四个驱动程序,用于从使用Microsoft Access产生的数据文件中恢复的信息。
一旦已分析数据源或多个数据源(如下面更完全描述的),这种分析的结果能以大量的方式使用,包括提供用户访问数据源中信息来浏览或编辑,拷贝一些或全部数据,并且最好能访问它们的更新版本(enhancements)(如下面所描述的),以创建新数据库、创建数据报表(以便浏览、打印、存储、传输、等等)、查询等等。
在图8的实施例中,在主程序802之后,使用驱动程序804,执行源数据806a到806d的分析,它能创建一个或多个新数据库808,包含来自各种数据源806a到806d中的一个或多个的数据。在一个实施例中,为每个数据源创建新数据库。希望联合两个或更多这样的数据库,例如,使用标准的数据库技术,例如当这样的数据库具有类似的结构时。在另一个实施例中,一个数据库808包含来自两个或更多数据源的信息(例如,如果一个公司使用一个数据库或其他数据源来存储销售信息,并且使用另一个数据库或其他数据源来存储雇员信息)。至少在一些实施例中,一些数量的准备或重新格式化或源数据的其他过程执行最好和创建新数据库808相联系。尽管在一个实施例中,所有这样的过程由适当的驱动程序处理,在其他的实施例中,一些这样的过程在数据源806和/或在新数据库808中处理。在一个实施例中,数据以这种方式准备或处理后,能被用在有关填充新数据库808,通过使用通用例程,即能操作有关多个不同数据源中的任何数据源的例程。
新数据库或多个新数据库808,如果希望的话能用于产生报表,例如使用报表写入器810,并且如果希望的话,能用于进入、浏览或分析数据,例如使用数据库管理系统812或其他软件814。在一个实施例中,数据库808是MicrosoftAccess数据库,它包括具有一个或多个向导、模板、过滤器和/或工具箱软件(正如由那些精通Microsoft Access编程的人理解的术语)的基础代码,比如用于提供诸如输出标准财务报表的数据库报表制作和分析。在一个实施例中,财务和管理报表制作软件的提供是作为从Bellevue,WA的Timeling公司的商标METAVIEWTM下得到的扩展或修改。
在一个实施例中,在新数据库或多个新数据库808中的信息被增强,例如,通过主程序802在一定程度上信息被配置来产生、显示或输出通过或使用源数据806a到806d不能显示或输出的分析或数据关系。
正如图13所描述的,在一个实施例中,新数据库808仅仅是许多被格式化数据库中的一个。在所描述的实施例中,通过使用新数据库808作为信息源对信息终端使用者分布数据库1302a-1302c来提供多个数据库1302a-1302c。数据库1302a-1302c中的每一个至少用一些来自数据库808的信息填充。在一个实施例中,数据库1302a-1302c互相不同,例如,通过具有不同的数据和/或不同的数据库结构、报表、查询,等等而不同。作为一个例子,当数据库808包含相关多个不同公司的信息时(例如一个父公司的不同子公司),数据库1302a-1302c中的每一个数据库可以包含这些公司之一所使用的信息,并典型地仅包含相关那个公司的信息。因为不同子公司或许组织上不同,每一个或许有自己预先定义的报表或其他结构。也可能数据库1302a-1302c中的一个或多个可以包含相关两个或多个子公司的信息,例如帐目信息,对所有子公司(或选择的组)的总结活动,例如,由父公司使用。数据库1302a-1302c可以起源于所谓的推动(push)程序(起源于新数据库808所驻留的计算机系统的一系列命令)和/或起源于所谓的拉(pull)程序(起源于数据库1302a-1302c所驻留的计算机系统的一系列命令)。每一个数据库1302a-1302c的建立是作为查询数据库808、选择包括在数据库1302a-1302c中的结构和数据的结果而建立的,正象在理解本发明所披露内容之后本领域的技术人员所清楚的那样。
在一个实施例中,每一个典型地包括在数据库1302a-1302c中的增加和更新信息的数据库终端用户,可以正常的方式使用数据库1302a-1302c。最好是,这种新的或更新的信息,最好以全部或部分自动的形式,也被写回到数据库808中。以这种方式,访问数据库808的其他人,或者访问包含涉及已经增加或更新的信息(例如,父公司)的信息的其它数据库1302a-c的人将收到最新的数据。写回到数据库808能应要求周期性地发生,或在所连接的任何数据库1302a-1302c每一次被更新的时候执行。在一些情况下,通过改变数据库808的一些结构(比如增加新表、新字段、新索引、新报表等等)最好地处理了对数据库1302a-1302c的改变。更可取的是,改变数据库808的一些结构的合理性被至少部分自动地检测,比如通过把数据库现有结构和在数据库1302a-1302c中自动检测的结构定义信息相比较,例如,使用类似上面描述的有关检测数据源806的结构定义信息的技术。
在一个实施例中,数据库1302a-1302c的一些或全部用查询、报表和类似的结构来配置,但至少一些或全部数据永久存储在数据库808中。例如,在一个实施例中,数据库1302a可以具有某种定义的查询,但是当执行一个查询时,使用通讯链路1304,从而对驻留在数据库808中的数据执行查询。在一个实施例中,从执行查询的结果中得到的信息被高速缓冲于(cached in)存储器中或数据存储器件中,不是位于数据库808的位置就是位于请求数据库1302的位置。如果希望的话,仅当至少接收到等于阈值数量的相同查询请求时才执行这样的高速缓冲。不考虑阈值数量是否实现,可得到的用于捕获数据的存储器或存储能够循环,例如,在最近使用基础上循环,正如那些本领域技术人员在理解了本发明所披露内容之后理解的那样。最好,在响应于查询或其他请求而提供高速缓冲数据之前,执行检验以确定是否有数据的相关改变(即是否高速缓冲数据与在最新可得到的数据上执行查询的响应是相同的)。相对于每一个可能的数据源改变/更新来执行这种检验。当配置的系统使数据库808能被直接存取时,数据库808应被检验来确定是否有影响高速缓冲数据的任何直接产生的改变。执行这样的检验的一个方式是除存储高速缓冲数据本身之外,还存储用于提供高速缓冲数据的某种数据类型的标识(例如表、字段等等的标识)。在数据库808中每一次发生变化,都要确定是否改变用于高速缓中数据的任何表、字段等。如果是与这个表、字段相关的高速缓冲数据被标注(例如,通过设置数据标志)以显示高速缓冲数据不再是最新的,最好,存储器或用于这样高速缓冲数据的存储为循环而释放(即为存储另一个查询或请求的响应而释放)。
当系统为从数据库1302a-c到数据库808写回的数据配置时,于是,在提供高速缓冲数据之前,应确定是否有在数据库1302a-c中产生的改变(例如,对存储的查询的改变),所述改变尚未反映在数据库808中,这一点能使高速缓冲数据过时。类似地,当系统被配置使得对数据源806产生这样的改变,而这种改变没有反映在数据库808的更新中时,在响应于一请求而提供所述高速缓冲数据之前,对于可能影响最新高速缓冲数据性质的改变应进行检验。在一些情况下,应在响应于请求而提供高速缓冲数据之前执行多次检验(对数据库808、1302a-c和数据源806的改变的检验)。
图9是各种驱动程序804a到804d的简要描述。每一个驱动程序包括多个定义的程序或功能块901到910。每个功能块可包括计算机程序指令912,例如,用于完成和执行一个或更多的在下面描述和在图10中示出的步骤。在一个实施例中,功能块901到910中的每一个功能块是可调用的子程序或程序。在给定驱动程序804b中定义的功能块901到909包括必须执行的功能或取决于数据源806a、806b的类型而不同地执行的功能。因此,例如,考虑功能块一901,它被设计成选择在希望的信息被存储的硬盘或其它信息存储器件上的某种目录的功能块,依据源数据806的类型,选择目录的程序会不同,正如能从,例如图2的例子和图5的例子的比较中看到的那样。因此,在第一个驱动程序804a中实现功能块一的编程912不同于在第二个驱动程序804b中实现相应功能块的编程代码。用这种方式,每个驱动程序定义一个或多个程序,用来执行具有为容纳两个或更多不同类型源数据的不同字符而配置的程序的功能。例如,图11A描述一种用伪码表示的程序的一部分,它能被用于选择和/或查找有关在图2中描述的目录结构的目录,而图11B显示可用于选择或查找图5中描述的目录结构的目录的程序伪码的相应部分。从图11A和11B的例子中,本领域技术人员将理解如何配置驱动程序来在两种不同类型的源数据上执行相同的功能。尽管图9描述了一个有九个功能的功能模块,本发明能被用在具有更多或更少功能的功能模块中。可以配置其中不同功能模块定义不同数量功能的系统,和/或配置其中一个或多个功能被配置的系统,以提供或返回零值或常值或信息。
大量程序能被使用来启动(步骤1002)在图10中描述的方法。在一个实施例中,图10的方法是使用存储在诸如硬盘、CD-ROM或其它非易失媒介上的计算机程序实现的,同时通过给计算机发布指令(例如,通过键盘,鼠标等等)来启动程序,即把程序装载到存储器并执行程序来启动这个方法。作为选择,程序可由其它程序启动。例如,在一个实施例中,数据库新数据库808是Microsoft Access数据库,它包括诸如所谓的“导航器(wizard)”的例程来启动程序,接着又利用该程序(图10)来存取在信息源806中的数据,以填充或更新数据库808。在一个实施例中,为了按需要请求用户输入(例如对于步骤1020),使用导航器来显示提示符或“对话框”是有用的,所以用户接口将具有与数据库808用户接口一致的外观。因此,可以看到,即使在这里描述的程序是部分或全部自动的,并且/或者即使程序执行不需要用户输入,然而,希望为各种目的提供用户输入,例如,提供选项来减少执行时间、删除或选择缺省(default)或选择特征,等等。
在图10中描述的程序中,在程序开始(步骤1002)之后的第一步是辨别和初始化动态驱动程序(步骤1004)。在这样的环境下,驱动程序804被认为是动态的,就精确意义而言驱动程序804能被成块地加入或删除,例如,容纳一种新的或不同类型的数据源。例如,用诸如在图8中描述的具有4个驱动程序的系统最初提供给用户,但是可以在将来的时间,通过从软件商购买,从信息服务器、网络、互连网连接等等下载,或通过写一个用户驱动程序来增加附加的驱动程序。因为模块和驱动程序的动态性质,预先并不知道哪个驱动程序是可用的,因此,当程序被启动(步骤1002)时,程序辨别程序可得到的驱动程序。在一个实施例中,所述过程通过为其中具有预定(部分)文件名或文件扩展名的文件搜索磁盘或目录来执行。在一个实施例中,程序还分析每一个文件的选择部分,例如,标题信息,来验证由这个文件名和/或扩展名鉴别的文件是希望的驱动程序。初始化驱动程序一般包括辨别和链接驱动程序功能和在每个驱动程序中初始化数据。
然后,确定是否程序将执行输入或更新(步骤1006),在输入中,在数据源中的所有或大多数数据和结构被访问并存到新的数据库的程序首先被执行。在更新中,其中仅有一个选择数据和/或结构部分被访问的程序被执行,例如,确保在新数据库808中的信息反应最近的变化或已经对数据源806做过的增加。在一种典型的情况下,第一次当图8的系统从给定的数据源中访问或使用信息时,或如果对数据源产生相关的主要改变或增加时,输入被执行。典型地,以便与具有新数据库808中的数据的数据源806中的数据同步,更新在规则的基础上(例如,每天,每周,等等)将被执行。在一个实施例中,对输入或更新的选择(步骤1006)被自动执行,即通过执行更新而执行,除非这是第一次程序访问特定数据源。在另一个实施例中,通过提供输入,即通过键盘选择,使用指示器等等,用户被允许在输入和更新间选择。
如果输入已被选择(步骤1008),主程序802将初始化一个或多个驱动程序功能的执行来选择要搜索的目录(步骤1010)。由主程序802装载或调用的驱动程序804将取决于哪一种类型的源数据被访问。特定地,对于给定的数据源806a,主程序802将使用驱动程序804b,它是为容纳源数据806a的类型而配置的。如果访问多于一个数据源806,主程序802将使用为源数据806的每一种类型配置的任何一个驱动程序804。最好,基于诸如文件名(或“扩展名”)和/或文件的目录、数量、大小和结构、文件中的标题和其它信息,数据源的类型被自动确定。在另一个实施例中,用户被允许或请求指示数据源的类型(即通过鉴别用于创建数据源文件的软件的商标名和版本号或指示是否用户希望程序仅仅搜索本地磁盘文件或执行包括网络文件的查询)。
在一个实施例中,驱动程序(或驱动程序子程序或参数)的选择是取决于在源数据806中使用的语言。例如,以便合理地确定数据源的类型,当这种确定部分取决于文件名或文件标题信息时,这样的名字或信息可以采用不同的形式(甚至对相同商标的源数据信息),这取决于源数据是否是为了由讲英语、西班牙语、日语等的人使用而安装的。因此,在一个实施例中,将不同的驱动程序用于相同类型的数据源,该数据源是为不同语言的讲话者安装的。可供选择的是,可以为不同的语言数据源使用本质上类似的驱动程序,但这些驱动程序配置成用适当的语言获得寻找的文件名等,例如从表、从过去的参数中获得。以这种方式,驱动程序能用多个语言中的任何一个来分析数据库。尽管一个实施例基本上自动地提供这种语言能力,但可以配置驱动程序来允许(或请求)用户输入指定源数据的一种或多种语言。
另外,当建立新数据库808时,能使用一种语言(例如数据库808输出中的字段名、题注(caption)、题目等)建立数据库,这种语言与多种不同语言中的安装数据源806所使用的语言相同或不同,例如,该语言使用表来提供相应字段名、题注、题目等。能使用这样一种结构,例如,使用数据库或其它数据源,其创建和安装是为了由第一语言使用,为了至少部分自动创建或包括为不同语言定位的数据库808,这个给终端用户使用终端用户的本族语言来查询外国语言数据库的能力。例如,终端用户能强制当地语言数据库808更新其本身(如果需要的话),这是基于在外国语言数据源806中的信息,通过为当地语言数据库808提交本族语言查询或报表请求来完成的。类似地,数据库1302a-c(图13)可以以不同语言用字段名、标识符、题目、题注等配置数据库,但是每个数据库都能够通过从数据库808访问和更新来访问相同的原始数据,以便使用本地货币和/或使用本地语言标识符在一个报表中显示所请求的数据。
在步骤1010的最后,主程序802将访问存储的目录列表,该目录将用于搜索所有的数据源806,就象在步骤1004中由驱动程序804鉴别的那样。在步骤1010之后,主程序802加装或激发或调用功能模块804a到804d的另一个功能块902,以便搜索在步骤1010中为将被输入的数据选择的目录(步骤1012)。目录的搜索(步骤1012)是以一种方式执行的,这种方式取决于信息如何被存储在不同的数据源806中。例如,对于一些类型的源数据,鉴别具有某个文件名和/或某个文件扩展名的文件可以就足够了。对于源数据806的其他类型,必须扫描各种文件中的数据来鉴别具有某种结构或内容的文件,例如,在一个文件的标题部分或其他地方。因此,不同的模块804将被配置成以不同的方式提供“搜索目录”功能块902,以容纳不同的数据源806。
如果要执行更新(步骤1014)而不是输入(步骤1008),则不需要选择和搜索目录,因为最好是当输入被最初执行时,用于选择和搜索目录的功能块901、902的结果以一种方式被存储,以这种方式存储后,主程序802可以在其后时间访问。因此,使用这样存储的信息,主程序802能够鉴别以前输入或鉴别的数据。在一个实施例中,这一点对防止装载冗余数据即已经出现在新数据库808中的数据是有用的。一般情况下,希望在步骤1016中鉴别哪些是由于最后一次的输入或更新导致的新的或被改变的数据,这样就可以使已经在数据库808中的某些数据不必被重新装载。在一个实施例中,为了防止冗余信息装载,系统将试图鉴别没有因为最后一次输入或更新而改变的数据。一般情况下,如果紧接着是程序,在程序的末尾在新的数据库808中的数据将与在源数据806中的信息同步,即它将包含精确指示在其当前状态的数据源806的结构和数据的信息。
在图10的实施例中,被输入或更新的数据标识符被显示(步骤1018),以便给用户一个机会来选择要被输入或更新的数据,或者选择抑制输入或更新某些数据。将被更新或输入的数据的指示被组织以显示的方式取决于哪种类型的数据源被访问,并因此被提供以响应调用或激活驱动程序804(902a)之一的功能。例如,为用于有关图4A到图4F中描述的数据源而配置的驱动程序的一个功能块902a能显示从表430(图4F)中画出的一个子公司列表,以便给用户一个机会来为一些公司而不是另一些公司输入或更新数据。最好,用户能从一个显示的列表中选择一个或多个公司。显示和选择步骤1 018、1020能被重复,以用于其他类型的组织或数据源中的数据,例如,显示和允许选择某些雇员416所特有的数据、某些会计师412所特有的数据,这取决于驱动程序的显示功能块902a如何被写或配置。在一些情况下,可以预先确定希望总是输入或更新所有从数据源得到的信息,因而用于所用驱动程序的功能块902a仅能将程序流程返回到主程序802。例如,对于在图7A到图7D中描述的数据源,可以确定,在每一次输入和更新中,总是包括从所有站点(sites)可得到的所有表面温度数据。在一个实施例中,可向用户提供一种显示,这种显示说明相应于用户选择的数据的位置,比如包含信息的目录、子目录和文件的显示,并能选择性地给用户一个机会,该机会用于选择要访问哪个目录、文件等。
一旦例如通过步骤1018和1020已确定了将被输入或更新的数据,则装载普通信息(步骤1022)。如果希望访问来自两个或更多数据源的信息,则该访问可以被串行执行(即使用第一模块对第一数据执行步骤1022到1046,接着使用适当的驱动程序对第二数据源执行步骤1022到1046,等等),也可以被并行执行(即在对每一个信息模块执行后面的步骤之前,使用适当的驱动程序对每个希望的数据源执行步骤)。
普通信息包括有关在数据源中的数据结构的信息。在所述步骤1022中装载的普通信息的类型的变化取决于各种类型的源数据。例如,对于写入或配置的功能块903来说,普通信息例如可包括帐目或用在数据源806中的其它目录的标识符,所述功能块903用于诸如在图4A到图4F中描述的数据库。另一方面,如果写入或配置的驱动程序804的功能块903用于图1描述的数据源,则仍然希望确定多少组分(component)在数据源中被使用,但是,在这种情况下,信息将由在数据源806中发现的平面文件101a到101d的数量来确定。普通信息也可包括诸如有多少项目112、多少产品114和/或产品线116、或者多少子公司118的信息,这些信息在数据源806中被确定。普通信息也可包括公司名称、财政年度的第一个月和(一般来说)任何其他能被一次装载的信息(与之成对比,比如,在步骤1024、1033和1036中装载的信息,典型地在一个循环中装载)。如果一个“装载普通信息”的功能块903被提供在一个为用于在图6中描述的数据源而配置的驱动程序中,则在步骤1022中可装载诸如在数据库中的位置612的数量的普通信息。
主程序802也调用或激发适当的驱动程序或模块804的功能块904以装载数据定义(步骤1024)。数据定义可包括的信息比如为存储成用于数据源806中的特定类型或类别的标识符的文本名称、字段长度、数据类型(字符串、整数或十进制数、十进制数位置(decimal places)数目)和用于各种数据类型的类似特征。最好,装载数据定义包括查询数据,以获得存储数据源中信息的结构或构造体系的指示所必需的信息,以及按需要查询数据源中的数据单元,以产生一个或多个新数据库808,该数据库808将包含所有的对新数据库执行报表制作或分析的类型所需要的结构和数据。在“装载数据定义”步骤中的数据查询是智能查询,更精确地说它能真正地适合任何数据源,并鉴别什么是存储数据源的标准形式所要求的,例如,对于报表制作和分析。在图4A到图4F的例子中,指示源数据的体系结构所需要的信息包括,例如,四个帐目部分(帐目、公司、雇员和位置)的名称,也包括数据类型(例如,数字或字符串)和存储任何字符串帐目部分所要求的长度。在图6的例子中,指示那个数据源的体系结构所需要的信息将包括存储帐目部分(位置和时间)的名称以及用于该数据(单元)的参考的名称。查询可包括鉴别能被装载的其它可选择数据,例如,发票号。执行查询的特定类型将取决于被分析的特定数据源的特性,因而对于每个驱动程序804是不同的。一般情况下,装载数据或信息的步骤1022、1024、1033、1036由驱动程序804中的功能块执行,但是存储信息的步骤1026、1028、1030、1032、1034、1038由主程序802执行。
然后,主程序802鉴别或创建数据库仓库(repository)1026,即在新数据库808中鉴别或创建一个文件或其他数据存储结构,新数据库808将用作从一个数据源或多个数据源8006装载的信息将被保存的位置。一次更新通常不需要创建新数据库或数据库表,因为更新信息经常是简单地加到已经存在的数据库中的已经存在的表。
在一个实施例中,一个或多个新数据库具有预先定义的结构,因此,在本实施例中,不需要为新数据库创建或定义结构,或者为了定义这样的结构而从一个或多个数据源获得信息。然而,一般来说,希望并不是所有可能的预先定义的数据库表或其他数据仓库都用一个数据源的数据填充。例如,预先定义的数据库可以具有用于保持公司分部信息的表,而数据源可以涉及到不具有公司分部的公司。因此,在本实施例中,一个或多个驱动程序最好被配置成确定来自一个或多个数据源的哪些数据应被适当地装载到预先定义的数据库的哪些表中(或其他数据结构中),例如,该确定取决于在一个或多个数据源中可得到什么数据。
当数据库808的表尚未创建时,主程序802则会调用一个或多个驱动程序的适当功能块905来创建将被用于把来自数据源的数据保存到新数据库808中的数据库表(步骤1028)。创建数据库表的方式最好还考虑两种因素,一种是数据和一个或多个数据源的结构,另一种是新数据库808将被用于比如分析、产生报表等的方式。因为被创建的特定表将随着数据源806中信息特性的变化而改变(例如,就象由步骤1022和1024确定的那样),创建数据库表(步骤1 028)是由驱动程序804提供的功能,驱动程序804是为用来访问的特定数据库配置的。例如,当“创建数据表”功能块905被写入或配置,以用于比如在图4A到图4F中描述的数据源的数据源时,所创建的数据库表可包括,例如,帐目表、雇员表、子公司表(可以是帐目的滚动条(rollup))、和细节表(正如下面更完全描述的),而一个写入或提供于驱动程序中的“创建数据库表”可以包括位置表、数据表、时间表、单元表和细节表,所述驱动程序配置成用于图7A到图7D中描述的数据库。
尽管用于新数据库808的结构和数据至少部分取决于在数据源806中可得到什么信息,也可以将系统配置成使得要装载到新数据库808的结构和/或数据可以至少部分地从多个选项中指定或选择(手动或自动地)。例如,可以将系统配置成使得用户可指定或选择(或系统可通过缺省方式自身自动配置)一个用于新数据库808的通用分类总帐数据库结构。在一个实施例中,将系统配置成辨认某些通用的术语(例如,“净收入”),并使用驱动程序,该驱动程序对于每一个不同类型的数据源自动地将所述通用术语映射为定义、子程序命令等获得所数据所需要的(并且,正如执行计算所需要的)数据,在驱动程序所配置的数据源类型环境下,用于在新数据库808中提供“净收入”信息。在多数据源环境下,这一点允许用户使用相同的请求来从每个数据源得到相应数字,不需要例如具有基础(underlying)数据源806或它们的结构、命令等的知识。这就是说,用户的一个或多个查询请求指定(最好是以语义学(semantic)或“自然”语言描述的)可以使适当的驱动程序建立希望的新数据库808。
最好,在新数据库808中创建的表有动态结构或体系,确切地讲,它实际上可以容纳可从各种数据源806中找到的任一类型的数据定义或结构。在一个实施例中,新数据库808旨在主要用于输出信息,诸如产生报表和分析,因而如下面所描述的,最好被配置成提供更好的输出性能,比如输出类型和可用分析的高灵活性,以及相对较快地执行这种分析和/或输出。在此情况下,对一数据库进行输出速度和/或灵活性方面的优化,以使其提供的输出速度或灵活性优于一些其它可能配置的速度或灵活性。因此,在这种情况下,“优化”并不是必须要求数学上的精确优化。在一个实施例中,在步骤1028中提供三个通用类型的表:多个类型表(包括适当的滚动(rollup)表)、至少一个细节表和至少一个登录表。最好,一种类型表提供给每一种方式,用这种方式,特定数据指针或记录能被分类。例如,如果“创建数据库表”功能块905提供于驱动程序804中,该驱动程序804被构造成用于如图4A到图4F中描述的数据库,则如在图12中描述的,新数据库将包含多个类型表1202,类型表1202例如包括:帐目表,它列出所有可能的帐目1203的帐目分类;子公司表1230,它列出在数据源806中发现的所有可能的子公司;产品表1232,它列出所有在数据源806中提到的产品;雇员表1216,它列出所有在数据源806中提到的雇员;和位置表1234,它列出各种在数据源806中提到的位置、销售区域,等等。在描述的实施例中,每一个类型表1202中的每个记录项目与在下面描述的细节表中使用的索引有关。
在图12中描述的实施例中,将提供细节表1240,该细节表1240一旦被填充则会具有用于一个或多个数据源806中的帐目登录或交易的记录。在图12的实施例中,相应于数据源(图4A)中的交易,对字段1244提供了日期字段1242b、描述符字段1242c、数量字段1242d、和总量字段1242e。提供了索引字段1242a,用于存储用于每一条记录的标识数字或索引数字。另外,为每一个记录提供一单独的字段,用于为在装载普通信息步骤1022中定义的每一个类型存储任何适当信息的指示,在图12中的例子中,包括帐目类型1242f、子公司类型1242g、产品类型1242h、和雇员类型1242i。一般情况下,希望提供尽可能多的不同字段,即类型,它出现在数据源806中正是分析和输出数据所需要的。因此,由于可能希望输出一种报表,这种报表按照交易所涉及的帐目来分组交易,因而有帐目类型是有用的。此外,可能出于希望的记帐目的,希望为每个子公司打印出单独的报表,或打印出其中由子公司分组交易的报表,因此有子公司类型1424g是有用的。一般情况下,对于每一种选择、分组、制作报表、或打印数据的希望的方式,都在细节表1240中提供单独的字段。
在图12中描述的数据库结构与在图4A到图4F中描述的数据源的结构以及在图1中描述的数据源的结构形成对比。例如,在图4A到图4F描述的结构中,特定交易(图4A)与特定帐目(图4B)联系的方式被指示在一个单独的链接表中(图4D),而在图12的实施例中,适当的帐目1242f的索引将被存储在包含交易信息1244的相同记录的其自己的字段中。因此,尽管具有在图12中描述的表的数据库808能存储在图1中描述的数据源或在图4A到图4F中描述的数据源(或以其他方式建造的源数据)中找到的信息,在图12中描述的例子中数据库的结构或体系是不同于图1中描述的数据源或在图4A到图4F中描述的数据源的结构或体系的。类似地,图12的关系数据库结构不同于在图1中描述的平面文件结构,即使存储在两个组织中的信息是类似的也是这样。
主程序802能构造成在例如提供于数据库808中的附加表中保存通用信息1030(在步骤1022中装载的)和保存数据定义1032(在步骤1024中装载的),例如,用于图10的后面步骤和/或在以后时间执行的更新。
主程序802使用一个或多个驱动程序804的适当功能块908,以在新数据库808中装入在步骤1028(1033)中创建的各种表的数据定义代码(例如,字段宽度、数据类型,等等)。在一个实施例中,滚动信息也在这个时间装载。一般情况下,滚动信息指用于定义子类型数据的信息,即在多个类型表中的一个类型表内的分组项目。作为一个例子,正如在图12中描述的,雇员类型表可与位置或区域代码相关,例如,用于识别每位公司雇员所处的或所负责的位置或站点或区域。例如,一个公司有大量的销售人员,每一家公司与一个销售区域关联。作为另一个例子,公司的各种产品能被滚动到或分组到产品线中。通过为位置滚动代码定义一个字段1238,图12的结构使输出由销售区域分组的报表成为可能。滚动也能用于提供组数据的统计分析,诸如平均值、中间值、标准偏差,等等。尽管在图12的实施例中,位置滚动代码1238的字段被指示为雇员类型表1216的字段,如果希望的话,位置字段1238也能在细节表中被提供。
用于装载滚动代码的功能块908所操作的方式将随着源数据806的类型改变而变化,功能块908使用源数据806来配置,并因此其提供为各种驱动程序804的功能,因此,可提供不同的编程指令,以用于源数据的不同类型。作为一个实施例,“定义滚动代码”功能块908可提供于驱动程序804中,该驱动程序804配置成用于图4A到图4F中描述的数据库。在这个例子中,位置字段已经在雇员表416中定义,雇员表416能直接为位置代码目的而使用。作为对比,在图1中描述的实施例中,没有用于与特定平面文件101a相关的雇员120的位置的指示。因此,在一个实施例中,位置滚动对从图1的数据源中得到的数据是不可能的。然而,如果存在比如另一个文件,该文件提供公司的每一个雇员的家庭地址,则可能使用例如每一个销售人员居住的州来推测那个人负责销售地区,并因此推断性地定义位置滚动代码。另外,“定义滚动代码”功能也包括访问能被用于定义滚动代码的信息。例如,在图6中描述的有关数据源中,“定义数据滚动”功能块908能在那个功能范围内包含一个表,该表用于为每一个潜在的温度位置612指示是否那个位置是北半球或南半球的位置,并因此在这个基础上创建半球滚动代码。在一些情况下,可能想要在数据库中提供字识别和/或关键字查询,以便定义附加的滚动和/或结构。
在一些情况下,滚动代码涉及没有在数据源中作为分析和分组数据(例如,图6为数据源的半球滚动代码)的基础所使用的信息。因此,在这些情况下,提供的滚动代码涉及通过自动提供附加元素来提供数据的充实,所述附加元素不能用于(或者至少没有用于)输出或分析数据源806中的信息。最好,数据被分类成类型,并通过深入地分析数据源的数据来分组。
除定义滚动之外,程序也能存储可选参考字段。一般情况下,可选参考字段涉及通常没有被用于分组数据的字段,诸如免税字段(注释、备忘录字段,发票号,等等)但是希望包含在报表中,等等。
接下来,装载数据定义代码和滚动条,这些数据定义代码和滚动条被保存(步骤1034)在新数据库808中,例如,通过把类型列表成各种类型表1202来完成。以循环方式(步骤1035)执行装载和保存数据定义和滚动代码(步骤1033、1034),以便装载和保存特定类型(特定帐目、公司、雇员和位置,在图4A-4F的例子中)。
总之,按照所描述的实施例,步骤1024定义类型(例如,帐目、公司、雇员和位置)以及它们的数据类型(例如,字符或数字)。步骤1028创建在步骤1024(和在步骤1022中定义的任何其它表)中定义的类型表。步骤1032通常在一个标准表中保存数据定义。步骤1033和1034装载和保存数据定义和滚动代码。
此时,在此处理过程中,尽管与数据结构有关的信息已被放置在新数据库808中,作为源数据806的主题的数据(例如,在帐目源数据情况下的帐目登录项或交易、在气象温度源数据情况下的温度数据)还没有被装载到新数据库808中。因此,主程序802在适当的驱动程序804中调用或激发功能块909来装载数据(步骤1036)、保存数据(步骤1038)、并重复程序(步骤1039),直到所有希望的数据被装载和保存到(步骤1040)。因此,在程序1036、1038、1040的末端,新数据库808将用来自一个或多个数据源806的数据填充。
在一个实施例中,信息作为在这里描述的系统的一部分被验证。例如,为控制从一个或多个数据源806中提取的数据,规则能在驱动程序中定义或作为新数据库808的一部分被定义。规则可以确认数据的形式存在,就象被带进新数据库808中一样,并且,最好是报告不满足这种规则的任何项目,以提供错误捕获(trapping)和报表。例如,在帐目封装的情况下,本发明可以构造成验证“帐簿(book)”是否是平衡的。
当组合两种或多种具有不同结构和/或使用不同商标或类型的软件所产生的数据源时,通过利用图10的处理过程,来自不同类型源的这些数据能被填充到共同的数据库结构中,例如,就象在图12中描述的那样。这就有助于数据的共同或标准化分析和报告,最好是为输出灵活性和速度而优化。
在图10的实施例中,主程序802现在能建立并且(如果希望的话)执行数据查询,诸如总结查询(步骤1042)。一般情况下,能建立至少三种类型的查询。提供的第一种类型的查询对于利用图10的程序创建的所有新数据库808来说是共同的,例如提供细节表的登录项号码或给定数据范围(例如,每个地区)的登录项号码的一种查询。另一类型的查询建立可以至少部分取决于普通信息和相对于一个或多个数据源806所得到的数据定义,包括已经提供的滚动条,因此,如果希望的话,可作为驱动程序804的一部分提供,特定于特定的数据源。提供的第三种类型的查询可用于复制或包括用在最初数据源中的查询或报表(例如,在图4E中描述的)。
一旦新数据库808被填充并且建立了适当的查询,主程序802能关闭表和数据库(步骤1044)和动态驱动程序(步骤1046),例如,释放存储器。
尽管本发明的一个主要预期的应用涉及到提供对一个或多个数据源中的数据的标准化和/或增强的报告和分析,也可以将本发明用于通过与新数据库808相关的数据库管理系统(例如,Microsoft Access、Excel、FoxPro、Btrieve,等等)进行数据登录和数据存储。尽管本发明的一个主要预期的应用涉及到继续原始源数据806来输入和存储,同时又能维持新数据库808中相同信息的复制,以用于报告和分析的目的,也可以利用本发明将数据从一种类型的源数据806a、806b转换为另一种数据源比如为806c,这是通过首先将源数据806a、806b存储到新数据库808中,如上面所描述的,然后从新数据库808下载或输出信息到不同类型的源数据806c中来执行的。
按照上面的描述,能看到本发明的大量优点。尽管所使用的源数据的商标或类型有多种变化,本发明有助于报告和分析的标准化。本发明提供了能被优化的系统,或者说另外提供了在输出或报告数据方面的改进的性能。本发明提供了数据报告和分析的能力,这种能力与数据源的数据报告和分析能力相比增强了。通过源数据的复杂的查询,在帐目系统的环境下,本发明能够反映出在数据源中帐目建立的图表。在一个实施例中,程序抽取一些或所有定义的滚动、可选参考字段、计帐时期的信息。通过自动地执行任务并除去(或减少)人工分析的需要,本发明与以前的方法相比减少了劳动强度和所用时间,在一些情况下,用以前的方法要求几天或几周完成填充新数据库808,用本发明可能在几分钟或几小时内完成。在一个实施例中,配置驱动程序804来在新数据库808中检测、分析和维持用在数据源806中的任何安全、口令、允许等等。以这种方式,系统管理员不需要为新数据库808维持新的和单独的帐目、口令、允许等的集合,除了用原始数据源806来维持之外。更可取的是,系统被配置成基本上以预先设定的间隔比如每天、每周等执行更新。
可以对本发明进行许多修改和变化。可以使用本发明的一些方面而不用其它方面。例如,可以填充一个新数据库808而不用定义新的或附加的滚动条。尽管在上面的描述中,各种驱动程序804能被提供成单独的DLL文件,并且是动态的,确切地讲是可以通过在适当的目录中存储附加的DLL文件而简单地加入尽可能多的所需项目,但也可以制作本发明的可操作的版本,在这个版本中,由功能模块执行的功能被提供为由主程序802调用的部分或子程序,而不是单独存储的模块。
尽管已经通过优选实施例对本发明进行了有某些变化和修改的描述,也能使用其他的变化和修改。本发明由后附的权利要求书来限定。