我用的mysql5.1 使用ODBC+ADO进行访问, 用delphi编写应用程序
我的数据表定义如下:CREATE TABLE `datas` (
`num` int(15) NOT NULL AUTO_INCREMENT COMMENT '序号\0e',
`nodenum` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '设备节点号',
`channelnum` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '设备通道号',
`sDate` datetime NOT NULL COMMENT '采样时刻\0\0ME',
`phase` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '相别(0-A,1-B,2-C)',
`base` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '电流或电压基波有效值',
`thd3` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '三次谐波含量(%)',
`thd5` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '五次谐波含量',
`thd7` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '七次谐波含量',
`C` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '电容值(pF)',
`absolutePhi` float NOT NULL DEFAULT '0' COMMENT '绝对介损角',
`absoluteTan` float NOT NULL DEFAULT '0' COMMENT '绝对介损',
`deltaPhi` float NOT NULL DEFAULT '0' COMMENT '相对介损角',
`deltaTan` float NOT NULL DEFAULT '0' COMMENT '相对介损',
`groupPhi` float NOT NULL DEFAULT '0' COMMENT '同组相对介损角',
`groupTan` float NOT NULL DEFAULT '0' COMMENT '同组相对介损',
`groupDeltaPhi` float NOT NULL DEFAULT '0' COMMENT '同组差角',
PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=33310 DEFAULT CHARSET=gb2312 COMMENT='InnoDB free: 9216 kB';delphi里的更新数据语句如下: dsSelf.Insert;
dsSelf.FieldByName('nodenum').AsInteger :=i+1;
dsSelf.FieldByName('channelnum').AsInteger :=j+1;
dsSelf.FieldByName('phase').AsInteger :=k;
dsSelf.FieldByName('sDate').AsDateTime :=rec.sDate;
这里dsSelf是一个TADODataset控件。
当运行程序时就会出现"multiple-step operation generated errors check each status value"的错误。
但是如果我把代码改成如下:
dsSelf.Insert;
//dsSelf.FieldByName('nodenum').AsInteger :=i+1;
dsSelf.FieldByName('channelnum').AsInteger :=j+1;
dsSelf.FieldByName('phase').AsInteger :=k;
dsSelf.FieldByName('sDate').AsDateTime :=rec.sDate;
即把第二行“dsSelf.FieldByName('nodenum').AsInteger :=i+1;”注释掉,程序就一切正常了。怎么也想不出原因,谁能帮我分析一下啊,真的有些莫名奇妙了。
我的数据表定义如下:CREATE TABLE `datas` (
`num` int(15) NOT NULL AUTO_INCREMENT COMMENT '序号\0e',
`nodenum` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '设备节点号',
`channelnum` int(11) unsigned NOT NULL DEFAULT '1' COMMENT '设备通道号',
`sDate` datetime NOT NULL COMMENT '采样时刻\0\0ME',
`phase` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '相别(0-A,1-B,2-C)',
`base` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '电流或电压基波有效值',
`thd3` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '三次谐波含量(%)',
`thd5` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '五次谐波含量',
`thd7` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '七次谐波含量',
`C` float(9,3) NOT NULL DEFAULT '0.000' COMMENT '电容值(pF)',
`absolutePhi` float NOT NULL DEFAULT '0' COMMENT '绝对介损角',
`absoluteTan` float NOT NULL DEFAULT '0' COMMENT '绝对介损',
`deltaPhi` float NOT NULL DEFAULT '0' COMMENT '相对介损角',
`deltaTan` float NOT NULL DEFAULT '0' COMMENT '相对介损',
`groupPhi` float NOT NULL DEFAULT '0' COMMENT '同组相对介损角',
`groupTan` float NOT NULL DEFAULT '0' COMMENT '同组相对介损',
`groupDeltaPhi` float NOT NULL DEFAULT '0' COMMENT '同组差角',
PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=33310 DEFAULT CHARSET=gb2312 COMMENT='InnoDB free: 9216 kB';delphi里的更新数据语句如下: dsSelf.Insert;
dsSelf.FieldByName('nodenum').AsInteger :=i+1;
dsSelf.FieldByName('channelnum').AsInteger :=j+1;
dsSelf.FieldByName('phase').AsInteger :=k;
dsSelf.FieldByName('sDate').AsDateTime :=rec.sDate;
这里dsSelf是一个TADODataset控件。
当运行程序时就会出现"multiple-step operation generated errors check each status value"的错误。
但是如果我把代码改成如下:
dsSelf.Insert;
//dsSelf.FieldByName('nodenum').AsInteger :=i+1;
dsSelf.FieldByName('channelnum').AsInteger :=j+1;
dsSelf.FieldByName('phase').AsInteger :=k;
dsSelf.FieldByName('sDate').AsDateTime :=rec.sDate;
即把第二行“dsSelf.FieldByName('nodenum').AsInteger :=i+1;”注释掉,程序就一切正常了。怎么也想不出原因,谁能帮我分析一下啊,真的有些莫名奇妙了。
感觉上应该是ODBC没有把语句翻译正确。
5.11.1. 错误日志
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#error-log