分类: WINDOWS
2013-03-20 17:01:13
用DBExpress的TSQLConnection, TSQLDataSet, TDataSetProvider, TClientDataSet来查询和修改数据库,时有“Unable to find recod. No key specified”的错误.除武装解决办法就是:
给DataSetProvider.DataSet指定的那个数据集设置主键字段就好了.
例子:
这里是mysql数据库, 数据名是test, 里有一张表:
CREATE TABLE t3 (
class int(11) COMMENT '班级',
id int(11) COMMENT '座号',
name varchar(6) COMMENT '名字',
score int(11) COMMENT '分数',
PRIMARY KEY (class,id) -- 主键字段
);
里面已有数据: insert into t3 values (1, 1, 张三, 50)
insert into t3 values( 1, 5, 王六, 50)
insert into t3 values( 1, 8, 周七, 50)
insert into t3 values(2, 1, 赵五, 50)
加入各组件, 并且各组件的属性设置如下:
对象 对象类型 属性 值
SQLConnection1 TSQLConnection 设置连接到数据库...
SQLDataSet1 TSQLDataSet SQLConnection SQLConnection1
DataSetProvider1 TDataSetProvider DataSet SQLDataSet1
updateMode upWhereKeyOnly
Options.[poAllowCommandText] true
ResolveToDataBase false
ClientDataSet1 TClientDataSet ProviderName DataSetProvider1
DataSource1 TDataSource DataSet ClientDataSet1
DBGrid1 TDBGrid DataSource DataSource1
eScore TEdit
btSelect TButton
btEdit TButton
btApplyUpdates TButton
其中: DataSetProvider1的updateMode设置为upWhereKeyonly表示更新数据库时, DataSetProvider生成的sql语句是根据主键来生成where语句;
DataSetProvider1的Options 设置为poAllowCommandText表示可以把sql语句写在ClientDataSet1中,不然的话我们就必须要写在SQLDataSet1中了.
加入查询桉询事件代码如下:
还有更新数据库的按钮事件代码如下:
当加入设置主键字段的代码(注释掉的那部分)时就不会出错了.
转: http://blog.csdn.net/xieyunc/article/details/4140573