急求解决:mysql数据库有关问题
急求解决:mysql数据库问题
各位高人:我先在我的机器上编写了一个可以写入数据库(access)的程序,后来将程序修改到写入远程Mysql数据库,用ADO,不知为啥一运行写入数据库的命令(ADOTable1->Post();)后,总是提示“table has no partition for value 735299”。
说明下:我用的是BCB6.0,odbc连接(测试连接成功),ado控件(ADOConnection1,ADOTable1,DataSource1,DBGrid1),同样的程序在写到Access(mdb)里没有出现任何问题,就是写入Mysql时出问题。附些源码:
.......
ADOTable1->Open();
ADOTable1->Insert();
ADOTable1->FieldByName("id")->Value=id0;
ADOTable1->FieldByName("Net_code")->Value=tmpstr20;
ADOTable1->FieldByName("Sta_code")->Value=tmpstr21;
..................
ADOTable1->FieldByName("Waveform")->Value=seed_data_record;
ADOTable1->Post();//就在这句出问题。
.......
------解决方案--------------------
用Query直接写SQL试试?
------解决方案--------------------
是不是值有问题,越界了,超过了最大值。
你把复制给个小点的常量试试
------解决方案--------------------
我也觉得应该是值超越了你在数据库字段给该字段设置的最大值.
------解决方案--------------------
用ADOQuery试试
AnsiString sql = "insert into table (id,Net_code,Sta_code,...,Waveform) values('" + id0 + "','" + tmpstr20 + "','" + tmpstr21 + "','" + ... + seed_data_record + "')";
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->ExecSQL();
------解决方案--------------------
我大概知道原因了,插入数据的那个表在创建的时候,是创建了分区的,当你的值不在分区条件的时候,就会报错。例如:
mysql> create table sales(money int unsigned not null,
-> date datetime
-> )engine=innodb
-> partition by range (year(date)) (
-> partition p2008 values less than (2009),
-> partition p2009 values less than (2010),
-> partition p2010 values less than (2011)
-> );
如果你插入 date字段的时间是 2012-01-01,那么就会报错 :
Table has no partition for value 2012
so,你明白的。
各位高人:我先在我的机器上编写了一个可以写入数据库(access)的程序,后来将程序修改到写入远程Mysql数据库,用ADO,不知为啥一运行写入数据库的命令(ADOTable1->Post();)后,总是提示“table has no partition for value 735299”。
说明下:我用的是BCB6.0,odbc连接(测试连接成功),ado控件(ADOConnection1,ADOTable1,DataSource1,DBGrid1),同样的程序在写到Access(mdb)里没有出现任何问题,就是写入Mysql时出问题。附些源码:
.......
ADOTable1->Open();
ADOTable1->Insert();
ADOTable1->FieldByName("id")->Value=id0;
ADOTable1->FieldByName("Net_code")->Value=tmpstr20;
ADOTable1->FieldByName("Sta_code")->Value=tmpstr21;
..................
ADOTable1->FieldByName("Waveform")->Value=seed_data_record;
ADOTable1->Post();//就在这句出问题。
.......
------解决方案--------------------
用Query直接写SQL试试?
------解决方案--------------------
是不是值有问题,越界了,超过了最大值。
你把复制给个小点的常量试试
------解决方案--------------------
我也觉得应该是值超越了你在数据库字段给该字段设置的最大值.
------解决方案--------------------
用ADOQuery试试
AnsiString sql = "insert into table (id,Net_code,Sta_code,...,Waveform) values('" + id0 + "','" + tmpstr20 + "','" + tmpstr21 + "','" + ... + seed_data_record + "')";
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->ExecSQL();
------解决方案--------------------
我大概知道原因了,插入数据的那个表在创建的时候,是创建了分区的,当你的值不在分区条件的时候,就会报错。例如:
mysql> create table sales(money int unsigned not null,
-> date datetime
-> )engine=innodb
-> partition by range (year(date)) (
-> partition p2008 values less than (2009),
-> partition p2009 values less than (2010),
-> partition p2010 values less than (2011)
-> );
如果你插入 date字段的时间是 2012-01-01,那么就会报错 :
Table has no partition for value 2012
so,你明白的。