帮我!如何得到ODBC中数据源连接的数据库类型(200分)

  • 主题发起人 主题发起人 ychb
  • 开始时间 开始时间
Y

ychb

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得到ODBC中数据源连接的数据库类型,如连接的是Sybase还是SQL Server或是Access
等数据库,请大侠们帮我!!!谢谢!!!!!
 
奇怪了,你不知道是什么数据库类型又怎能连上呢
 
  
ODBC的信息是写在注册表里的。
HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBC.INI 保存数据源信息,(串1)
HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI 保存ODBC驱动程序信息,(串2)
创建一个TRegistry对象,先查找你要判断的那个数据源所在的键,假设你的数据源名
字叫dsn,那么就查找“串1+'/dsn'”、根据里边的“Driver”等串就可以判断是什么类
型,当然,还可以根据Driver等信息再到“串2”中去找,以获取全名。一般说来,文件
型的数据库会用FIL串来标示类型,如Paradox、Access、Excel。

如果你只是为了让自己的程序能够适应多种类型,那么只查找串1来判断有限的几种类型就
可以了,不必找串2,凡是不认识的就返回个错误代码,然后程序退出即可。
 
 
小菜:是用程序识别,写代码识别和我程序连接的“用户DSN”中数据源所连接的数据库类型。
fatalexception:“根据里边的“Driver”等串就可以判断是什么类型”,对于win98、WIN2000、
WINME等系统,注册表里的“Driver”信息都一样吗?
我们建立的“用户DSN”数据源都在HKEY_CURRENT_USER/software/ODBC中,我就是想用程序实现:
判断出当前和我的程序相连的HKEY_CURRENT_USER/software/ODBC中数据源连接的数据库类型,您所
说的“去找”、“查找”就是用TRegistry对象的ReadString()函数取出“字串”,然后判断吧!
如果方便您可不可以写一下实现代码!!谢谢fatalexception和小菜!!!!!!!!!!
 
可以到注册表中查找信息。
 
不会把?这东西也要写出来?
自己看一下注册表,不就明白了?
怎么操作注册表你也知道了,还有什么不明白?
 
   
要我帮你做模式识别啊? :-)

不好意思,我只在2000server下试了,其他平台下的(如果你必须用这种方法)键值和串,请自己查。

如果要正规一些,可以建立一个特征库,格式是形如(键路径,串名,串值,返回值)的四元组。
比如 a1=('hkey/abc/def','driver','c:/xyz/kkk.dll',1)
a2=('hkey/abc/def','fil','excel8.0',2)
a3=('hkey/abc/def','fil','paradox',4)
等等,返回值可以累加成8421码。

将有关ODBC的注册表子树摘出来,和每一个模式去比较,符合条件则返回相应的返回值,不
符合则返回0。将所有的模式都过一遍后,返回值相加就得到一个结果,例如(二进制)001101。

建立一张查找表,格式为 (返回值,库类型),例如:
000000 SQL Server
000001 Paradox
000010 unknown
000011 Oracle
000100 Access
....
111111 unknown
其中会有许多未知的。
累加结果必然属于其中某一个,比较得出结论。

是不是很麻烦啊?呵呵,我要不是手头有项目,我都想做一遍全的,做这种程序太解渴了。

 当然如果不要这么正规,用 if then else if then if then else if then else if then if then else 也可以啊。
 
我是新手,可能对于高手不算什么了!但我不会呀!呵呵!!谢谢帮助!尤其fatalexception,
希望能和fatalexception成为朋友!^_^!!
 
  
第一步(手工做)
  收集你能用到的数据库类型的ODBC信息,包括:在注册表里有哪些主键,各自有哪些串,
  串取哪些值,当然只写能够和其他数据库相区别的内容,不用写通用的。要写成比较规
  范的样子,以便于整理成四元组。如: 'driver','c:/xyz/kkk.dll'
第二步(手工做)
  建立一个特征表,字段为:规则号、键名、串名、串值、规则权值
  然后将第一步出来的数据填进去,每条记录赋予一个成二倍递增的权值。
第三步(手工做)
  建立一个查找表,字段为:索引值(自增整数)、结果
  生成若干个记录(记录个数=特征表记录数的阶乘),对应每一种特征的组合,可以有
  一种结果(数据库类型),将结果填到相应记录中。
第四步(编程序做)
  对给定的ODBC,用特征表过一遍筛子,用一个变量,符合哪一条,就将哪一条的权值加
  到这个变量上。最后,将这个变量和查找表中的索引值比较,符合哪一个,就是哪一种
  数据库。
  
  
 
感谢四位大侠的发言和支持,和那些看了不发言的比,体现出四位易于助人的好精神,特别是对于
一些象我这样的新手,可能问题对于有些“大虾”感觉这问题还问,呵呵!知道的话谁还问呀!
我劝有些大虾想想自己刚学时的样子,遇到难题时感觉如何!
好了,再次感谢四位发言和支持!特别感谢fatalexception。^_^!
 
后退
顶部