我用的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;”注释掉,程序就一切正常了。怎么也想不出原因,谁能帮我分析一下啊,真的有些莫名奇妙了。

解决方案 »

  1.   

    ODBC的驱动用的是什么版本的?
      

  2.   

    检查一下MYSQL的错误日志,看其中有些什么提示。
    感觉上应该是ODBC没有把语句翻译正确。
      

  3.   

    没找到mysql5.1的错误日志在哪里啊
      

  4.   

    在你的 datadir 对应的目录中,以 err 结尾
      

  5.   

    按照你的说法,我可以监视到odbc翻译后的语句吗?
      

  6.   

    5.11. MySQL日志文件
    5.11.1. 错误日志
    http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#error-log
      

  7.   

    这个手册我以前看过的,但是我依然没有找到,甚至数据目录我也没找到。我曾经使用windows的search来搜索.err,根本没有mysql5.1的,只有5.0的(我的电脑上5.0和5.1并存)。我想是不是5.1和5.0共用一个呢,但打开这个err文件,里面很清楚记录的都是mysql5.0的日志。所以我有点晕了...
      

  8.   

    还有一个问题就是,即使我确定了是odbc没有把sql语句翻译对,那么我要怎样才能解决这个问题呢?