分类: 数据库开发技术
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组件下的TSQLConnection、TsimpleDataSet
再放入DataAccess组件下的TdataSource
再放入一个Data Controls下的TDBGrid 显示控件
各属性设置如下:
对象 对象类型 属性 值
SQLConnection1 TSQLConnection (我们等等设置这个)
SimpleDataSet1 TsimpleDataSet connection SQLConnection1
DataSource1 TdataSource DataSet SimpleDataSet1
DBGrid1 TDBGrid DataSource DataSource1
三、设置dbExpress
下载文件:
上面地址不能用了,下载这个试试
并解压出来。
这里面我们会用到dbxconnections.ini、dbxdrivers.ini和dbxoodbc.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里面,注意添加到相应的位置。我添加完的C盘dbxdrivers.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;
这样就可以了.
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