老弟,你问的问题真是又大又笼统. 你的第一个问题,动态的打开不同类型的、不同目录的、不同文件名的数据库文件中的"动态"是指由提供一个列表让用户动态选择吗?  在程序中动态的定义、管理数据库别名不是一件难事,只需动态生成一个TDataBase控件,并用程序给此Tdatabase控件设置别名等参数就行了。关于这方面的资料你可查阅徐新华著的《Delphi4.0核心编程技术》,里边对于数据库编程有很详尽的描述。电子版在网上有很多站点可下载。  至于你问的最后一个问题,我想你首先得找到数据库文件,再根据其扩展名推断出数据库类型。很多DBMS提供数据导入的功能,你可以很方便的利用这一功能导入数据。
    给你说了这么一大堆,是不是可以给多一点分?我可费了好长时间打字喔!
      
  

解决方案 »

  1.   

    lsx78:
      你好!首先谢谢你的指点! 我的问题并不太笼统.第一个问题和最后一个问题是一块的.正如你在最后一个问题中所提到的一样.我想你已经明白我的意识了.
      具体的说就是:我的程序分为两部分,主模块和数据采集模块.数据采集模块是以软盘的形式分发给用户的.当用户那到数据采集盘时就要根据我的要求输入数据到采集库中.我的问题是:当我需要的数据已经部分存在于客户的数据库中时.我的程序如何能将已有的数据直接导入我的采集库中?用户的数据库类型..我并不知道.我所说的动态就是指这个.不知是否恰当.谢谢
       我的问题比较急,如能及早解决,我定高分回报!
      

  2.   

    harveywang,
        你的意思是不是说,用户的数据库类型不止一种,你要做一个可自动识别数据库类型的数据导入程序。不知道你的用户一般用什么数据库,像Access,foxpro等文件型数据库在库文件的头部都有一定的标识字节,我想,通过判断这些标识字节应可以识别数据库类型。识别出类型后,就可以动态生成相应的数据库别名,接下来就可以导数据了。
      

  3.   

    lsx78:
        您好!你所说的正是我的意思.关于您的思路我也曾经考虑过.但由于我是一个新手.鉴于才疏学浅,一直没有想到很好的解决对策.所以小弟希望您能具体的讲一讲该思路在技术上如何实现.包括数据库类型的鉴别和数据别名的管理及数据导入.见笑了.谢谢!定重谢!
      

  4.   

        我对于各种数据库的文件格式也没有专门研究过,我看了一下foxpro数据库的文件头,发现每个文件的前四个字节都是03 64 07 08,当然我只看了几个文件,不敢肯定所有的foxpro数据库文件都是这样. 这里只是举一个例子,你可以用Database Desktop生成各种数据库,研究一下它们的文件,应该可以找到每种数据库的特征字符.  
        
        至于说具体实现方法,由于我没有亲自试过,也只能是说一下大概的实现过程,希望能对你有所帮助.    具体实现步骤:
        1. 判断数据库类型. 如上面所述,以二进制形式打开文件,查找文件中的特征字符,以此区分不同类型的数据库.    2.连接数据库. 这是整个实现过程中最重要的一步,  关键是要充分利用TDataBase 控件的强大功能.  通过改变TDataBase的连接属性,可分别连接不同类型的数据库. 利用这一特点, 你在判断出数据库类型后,设定好TDataBase相应的连接属性就可以连接不同数据库了. 要想知道每种数据库的连接属性, 可右击TDataBase控件选DataBase Editor菜单,你可看到一个对话框,选好Driver Name后按Defaults按钮就可看到对应此种数据库需设定的连接属性. 可利用Case 语句设定每种数据库的连接属性,实现动态连接.关于TDataBase控件的使用方法可参看徐新华先生的《Delphi4.0核心编程技术》,我这里有电子版,如果你想要,请告诉我.    3.导入数据。这里有一个难点,就是如何获取用户数据库表结构的问题。不知道你是否知道用户的数据库中对你有用的那些字段的信息(如:字段名,类型,长度),如果每一个用户数据库的这些字段的信息都相同的话,那就好办了,只需做一个函数,将这些字段的数据写入你的数据库表的相应字段就行了;如果每个用户的数据库的字段信息都不相同,就要做一个界面,针对不同的数据库由用户输入相应的字段信息,然后根据这些信息读取表的数据再导入你自己的数据库中;如果连最基本的字段信息都不知道,那就很难办了,我知道有一个BDE API:DbiOpenFieldList可以列出表的字段信息,获得表的字段信息后就可以作相应的处理,至于能怎么处理就要看你的具体情况了。     以上就是我的一些想法,你可以试一下,希望能帮到你。