在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好。那天无意中发现一个UDL文件,打开时自动弹出标准的数据库链接属性配置窗体,用过ADOConnection的一定知道。可惜的是UDL文件是明码,而且要放在一个目录下,要是能放在注册表中多好,还可以加密存放,我们如何调用这个窗体呢?通过查找注册表,发现打开UDL文件的是MSDASC,再查MSDASC,OK,在OLEDB32.dll中。好啦,我们开始编程吧。
为了找到OLEDB32.DLL中的接口描述,以便知道有什么接口和方法,我们先来生成一个接口类型库文件。
新建一个ActiveX Library,再新建一个COM Object,随便起个名字吧。保存。
然后选菜单View->Type Library,在右边Uses页中点右键,选择查看所有类型库,找到Microsoft OLE DB Serivce Component 1.0 Type Library,保存。OK,在你的保存目录下有了一个MSDASC_TLB.pas,拷出来,其它的可以删除啦:)
再新建一个Delphi工程,保存。
添加我们刚才的文件MSDASC_TLB.pas到工程,在主窗体中uses MSDASC_TLB,我们要用的是其中的IDataSourceLocator接口。
添加一个按钮,一个ADOConnection。代码如下
procedure TForm1.Button1Click(Sender: TObject);
var
DataSourceLocator:IDataSourceLocator;
ADOConn:IDispatch;
begin
DataSourceLocator := CoDataLinks.Create; //创建接口指针
ADOConn := DataSourceLocator.PromptNew; // 打开配置窗体
self.ADOConnection1.ConnectionObject := IDispatch(ADOConn) as _Connection;//赋值给ADOConnection
showmessage(self.ADOConnection1.ConnectionString); //打出来看看对不对
DataSourceLocator := nil; //记着释放啊
end;
取到字符串啦,你可以自己加密,你可以存到你能读到的任何地方。
打开MSDASC_TLB.pas,你可以看到IdataSourceLocator接口还有PromptEdit方法,看名字就知道是干什么的啦,参数类似,就不多说啦。
欢迎有兴趣的兄弟一起研究,有新发现的请不吝帖出:)
为了找到OLEDB32.DLL中的接口描述,以便知道有什么接口和方法,我们先来生成一个接口类型库文件。
新建一个ActiveX Library,再新建一个COM Object,随便起个名字吧。保存。
然后选菜单View->Type Library,在右边Uses页中点右键,选择查看所有类型库,找到Microsoft OLE DB Serivce Component 1.0 Type Library,保存。OK,在你的保存目录下有了一个MSDASC_TLB.pas,拷出来,其它的可以删除啦:)
再新建一个Delphi工程,保存。
添加我们刚才的文件MSDASC_TLB.pas到工程,在主窗体中uses MSDASC_TLB,我们要用的是其中的IDataSourceLocator接口。
添加一个按钮,一个ADOConnection。代码如下
procedure TForm1.Button1Click(Sender: TObject);
var
DataSourceLocator:IDataSourceLocator;
ADOConn:IDispatch;
begin
DataSourceLocator := CoDataLinks.Create; //创建接口指针
ADOConn := DataSourceLocator.PromptNew; // 打开配置窗体
self.ADOConnection1.ConnectionObject := IDispatch(ADOConn) as _Connection;//赋值给ADOConnection
showmessage(self.ADOConnection1.ConnectionString); //打出来看看对不对
DataSourceLocator := nil; //记着释放啊
end;
取到字符串啦,你可以自己加密,你可以存到你能读到的任何地方。
打开MSDASC_TLB.pas,你可以看到IdataSourceLocator接口还有PromptEdit方法,看名字就知道是干什么的啦,参数类似,就不多说啦。
欢迎有兴趣的兄弟一起研究,有新发现的请不吝帖出:)
解决方案 »
- 关于delphi调用带ado DLL窗体后,调用程序出错的问题
- sqlserver某varchar字段存储内容为RTF格式的数据,如何用where查询
- [求助]请各位大侠帮忙改错~~紧急!!!!!!!!!!!!!!
- 关于在dbgrid 动态改变某一个网格的颜色(不是某一行一列)
- 请问这两段代码问题出在哪里了(有关Indy的)
- 关于socket的基础问题
- 菜鸟问题!!
- 请delphi database板块的版主进来
- 北京的朋友们,你们哪个公司要人啊?
- 请高手指点下,TStringGrid--DrawCell中创建按钮问题
- 我想用paradox做一个单机版的软件,想知道一些paradox操作相关的Sql语句
- 提问!!学习中,定结贴!
http://expert.csdn.net/Expert/topic/1590/1590460.xml?temp=.6771814
欢迎指点