很棘手的问题.急需解决.望关注

harveywang 2000-07-06 11:13:00
我现在有一个很棘手的问题急需要解决,希望各位前辈不吝指教:
在程序中如何能实现动态的打开不同类型的、不同目录的、不同文件名的
数据库文件,并且能得到该数据库的结构列表。 对此应该使用什么代码 有没
有合适的控件,什么控件能列出数据库的结构?
另外我能不能在程序中动态的定义、管理数据库别名?

我在做一个软件时遇到一个问题:在我的数据库中需要用户给我提供大量信息.而
这些信息在用户那里已经部分的存在于其自己的数据库中.我希望能通过我的程序
将这些数据直接导入我的库中,但我又不知道用户的数据库类型,甚至不知道路径
和文件名.故特向您请教以上问题.望不吝赐教 谢谢!
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
水哥驿站 2000-07-10
  • 打赏
  • 举报
回复
我对于各种数据库的文件格式也没有专门研究过,我看了一下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可以列出表的字段信息,获得表的字段信息后就可以作相应的处理,至于能怎么处理就要看你的具体情况了。

以上就是我的一些想法,你可以试一下,希望能帮到你。
harveywang 2000-07-08
  • 打赏
  • 举报
回复
lsx78:
您好!你所说的正是我的意思.关于您的思路我也曾经考虑过.但由于我是一个新手.鉴于才疏学浅,一直没有想到很好的解决对策.所以小弟希望您能具体的讲一讲该思路在技术上如何实现.包括数据库类型的鉴别和数据别名的管理及数据导入.见笑了.谢谢!定重谢!
水哥驿站 2000-07-08
  • 打赏
  • 举报
回复
harveywang,
你的意思是不是说,用户的数据库类型不止一种,你要做一个可自动识别数据库类型的数据导入程序。不知道你的用户一般用什么数据库,像Access,foxpro等文件型数据库在库文件的头部都有一定的标识字节,我想,通过判断这些标识字节应可以识别数据库类型。识别出类型后,就可以动态生成相应的数据库别名,接下来就可以导数据了。
harveywang 2000-07-07
  • 打赏
  • 举报
回复
lsx78:
你好!首先谢谢你的指点! 我的问题并不太笼统.第一个问题和最后一个问题是一块的.正如你在最后一个问题中所提到的一样.我想你已经明白我的意识了.
具体的说就是:我的程序分为两部分,主模块和数据采集模块.数据采集模块是以软盘的形式分发给用户的.当用户那到数据采集盘时就要根据我的要求输入数据到采集库中.我的问题是:当我需要的数据已经部分存在于客户的数据库中时.我的程序如何能将已有的数据直接导入我的采集库中?用户的数据库类型..我并不知道.我所说的动态就是指这个.不知是否恰当.谢谢
我的问题比较急,如能及早解决,我定高分回报!
水哥驿站 2000-07-07
  • 打赏
  • 举报
回复
老弟,你问的问题真是又大又笼统. 你的第一个问题,动态的打开不同类型的、不同目录的、不同文件名的数据库文件中的"动态"是指由提供一个列表让用户动态选择吗? 在程序中动态的定义、管理数据库别名不是一件难事,只需动态生成一个TDataBase控件,并用程序给此Tdatabase控件设置别名等参数就行了。关于这方面的资料你可查阅徐新华著的《Delphi4.0核心编程技术》,里边对于数据库编程有很详尽的描述。电子版在网上有很多站点可下载。 至于你问的最后一个问题,我想你首先得找到数据库文件,再根据其扩展名推断出数据库类型。很多DBMS提供数据导入的功能,你可以很方便的利用这一功能导入数据。
给你说了这么一大堆,是不是可以给多一点分?我可费了好长时间打字喔!



harveywang 2000-07-06
  • 打赏
  • 举报
回复
请赐教

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧