Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1710050
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: 数据库开发技术

2012-04-05 11:31:38

它的访问接口顺序是这样的:dbExpress组件--->ODBC的dbExpress驱动---数据库的ODBC驱动--->数据库

系统中自带了access的odbc驱动,如果是连接myql,oracle之类的话就要先安装一下mysql或是oracle相应的odbc驱动再进行操作,无论什么数据库,下面第二步开始以后都一样的。这里以access为例

一、在odbc数据源里面添加一个连接到access数据库的odbc数据源

1、打开 开始菜单--》控制面板--》管理工具--》数据源

2、创建新ODBC数据源

      方法:ODBC数据源管理器添加创建新数据源对话框中中选Microsoft Access Driver(*.mdb) 驱动程序(这个大家跟据自己对应的数据库选,我是access所以选这个)完成

       在显示的对话框中输入数据源名MyAccessDatabase和相应的文字描述(我设置描述为空)。并选择”-》选好我们的access的数据库data.mdb文件,我是E:\data.mdb。按确认按钮,数据源就建成了,也已经设置好数据源对应的数据库了。确定

二、Delphi新建一个程序,我是放在E:\MyProgram\delphi\DelphiDbExpress目录下

放入一个 dbExpress组件下的TSQLConnectionTsimpleDataSet

再放入DataAccess组件下的TdataSource 

再放入一个Data Controls下的TDBGrid 显示控件

各属性设置如下:

    对象             对象类型             属性                         

 SQLConnection1     TSQLConnection       (我们等等设置这个)

 SimpleDataSet1     TsimpleDataSet        connection            SQLConnection1

 DataSource1        TdataSource          DataSet               SimpleDataSet1

 DBGrid1            TDBGrid              DataSource            DataSource1

三、设置dbExpress

下载文件:


上面地址不能用了,下载这个试试

并解压出来。

这里面我们会用到dbxconnections.inidbxdrivers.inidbxoodbc.dll 这三个文件,前面两个是配置文件 ,后面一个就是dbexpress连接ODBC的驱动了

1)先把这个驱动文件dbxoodbc.dll复制到我们的项目目录E:\MyProgram\delphi\DelphiDbExpress下;

2)打开C:\Program Files\Common Files\Borland Shared\DBExpress,这里面也有dbxdrivers.ini并把我们下载的那个dbxdrivers.ini里面的内容复制添加到C盘的这个dbxdriver.ini里面,注意添加到相应的位置。我添加完的Cdbxdrivers.ini文件内容如下:

[Installed Drivers]

DB2=1

Interbase=1

MySQL=1

Oracle=1

Informix=1

MSSQL=1

OpenOdbc=1

 

[OpenOdbc]

LibraryName=dbxoodbc.dll

GetDriverFunc=getSQLDriverODBC

VendorLib=odbc32.dll

 

。。。

(3)并把下载的dbxconnections.ini里面的

[Odbc Prompt]

' Prompt for Odbc login info (? denotes driver prompt)

DriverName=openodbc

Database=MyAccessDatabase

这几行复制到C:\Program Files\Common Files\Borland Shared\DBExpress目录的dbxconnectiions.ini文件的最后面。注意这里面我把问号换成 我之前第一步设置的odbc里面的那个数据源名字了。还有其它的ini文件里面其它的连接方式自己看吧。我这里就先用这种要手动输入密码的

四、添加一个按钮,名字默认并设置代码:

procedure TForm1.Button1Click(Sender: TObject);

begin

     SQLConnection1.Connected:=false;

 

     SimpleDataSet1.Active:=false;

     SimpleDataSet1.DataSet.CommandText:='select * from total where 编号 between :StartId and :EndId';  //冒号后面的,Delphi会默认是参数的

 

     //SimpleDataSet1.Params.Create; //或下面一行也行

     SimpleDataSet1.Params.Clear;  //这一行很重要 ,没这一行会提示找不到参数的

 

     SimpleDataSet1.Params.Add;

     SimpleDataSet1.Params[0].Name:='StartId';

     SimpleDataSet1.Params[0].DataType:=ftInteger;//这是什么类型的就写什么,还有ftDateTime

     SimpleDataSet1.Params[0].ParamType:=ptInput;  //输入参数

     SimpleDataSet1.Params[0].Value:=4;

 

     SimpleDataSet1.Params.Add;

     SimpleDataSet1.Params[1].Name:='EndId';

     SimpleDataSet1.Params[1].DataType:=ftInteger;

     SimpleDataSet1.Params[1].ParamType:=ptInput;

     SimpleDataSet1.Params[1].Value:=9;

 

     SQLConnection1.Connected:=true;    //执行查询

     SimpleDataSet1.Active:=true;

end;

五、保存工程到和dbxoodbc.dll同一个文件夹下,不然它会提示找不到dll文件之类的。

运行结果:

好,再来一个按照时间查的把上面的代码改成:

procedure TForm1.Button1Click(Sender: TObject);

begin

     SQLConnection1.Connected:=false;

 

     SimpleDataSet1.Active:=false;

     SimpleDataSet1.DataSet.CommandText:='select * from total  where 日期 between :StartTime and :endTime';

 

     //SimpleDataSet1.Params.Create; //或下面一行也行

     SimpleDataSet1.Params.Clear;  //这一行很重要 ,没这一行会提示找不到参数的

 

SimpleDataSet1.Params.Add;

     SimpleDataSet1.Params[0].Name:='StartTime';

     SimpleDataSet1.Params[0].DataType:=ftDateTime; //时间类型

     SimpleDataSet1.Params[0].ParamType:=ptInput;    //参数是输入的

     SimpleDataSet1.Params[0].Value:= StrToDateTime('2010-4-19 15:00:00');

 

     SimpleDataSet1.Params.Add;

     SimpleDataSet1.Params[1].Name:='EndTime';

     SimpleDataSet1.Params[1].DataType:=ftDateTime;   //时间类型

     SimpleDataSet1.Params[1].ParamType:=ptInput;

     SimpleDataSet1.Params[1].Value:=StrToDateTime('2010-4-19 21:00:00');

 

     SQLConnection1.Connected:=true;    //执行查询

     SimpleDataSet1.Active:=true;

 

end;

上面是我运行的,按照上面做的应该就可以了。如果你运行不可以的话,可以先做我另外两篇日志的程序,然后再来做这篇,因为我之前做下面两个程序的时候就建好了数据源,直接连接的。如果运行过后仍然不行的话,欢迎留言指出,我会改正的。谢谢

sql语句中带冒号的,Delphi会自动认为是参数,为什么还要我们手动进行Add添加呢?就可以这么写:
procedure TForm1.Button1Click(Sender: TObject);
begin
    SimpleDataSet1.Active:=false;  
    SimpleDataSet1.DataSet.CommandText:='select * from total  where 日期 between :StartTime and :endTime';    
    SimpleDataSet1.DataSet.ParamByName('StartTime').AsDateTime:=StrToDateTime('2010-4-19 15:00:00'); //这里字段
    //类型是TDateTime, 如果字段类型是String的话就用SimpleDataSet1.DataSet.ParamByName('ColumnName').AsString:='abc'; 其它类推.  
  // 因为这个是SimpleDataSet1.DataSet的参数,而不是SimpleDataSet1的参数, 所以之前写的不行,现在这个可以了

    SimpleDataSet1.DataSet.ParamByName('endTime').AsDateTime:=StrToDateTime('2010-4-19 21:00:00');
    SimpleDataSet1.Active:=true;
end;
这样就可以了.

阅读(5723) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

xuebabybaby2012-04-05 12:04:34

上面有提到 SimpleDataSet1.DataSet的sql语句中冒号后面的:StartTime :EndTime 默认会认为是参数的但是“没有 SimpleDataSet1.Params.Create或是Clear 这 行创建参数的话会提示找不到参数或是List index out of bouds(0)"??

后来才知道可能是SimpleDataSet1.Param认不到SimpleDataSet.DataSet的参数。要通过SimpleDataSet.DataSet的Param才会认得到。还是像下面这样写更好,因为这些参数本身是属于SimpleDataSet.DataSet的,不是SimpleDataSet的。
下面这段代码就可以运行:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLConnection1.Connected:=false;

  &nb