一个关于更新记录的问题。

hoget 2003-02-13 02:54:26
我用sql server作为后台数据库。其中有一个表为mingxi,之中有一个字段是lsh,数据类型为char,宽度为20,;还有一个字段为jlrq,数据类型为date;现在我想作一个程序把每条记录的jlrq中的日期型数据取出来,把年、月、日转换为字符串连在一起,然后,再按记录的前后顺序编号成一个四位的,比如0001、0002等把这些全连接在一块写入到lsh这个字段中。可是在写的过程中只能写到第15条记录,然后就停止了。提示:
Project Project1.exe raised exception class EOleException with message 'Insufficient or incorrect key column information; too many rows affected by update'. Process stopped Use Step or Run to continue.
源代码如下:
if(Trim(ComboBox1->Text)=="")
{
Application->MessageBox("部门不能为空!","警告",MB_OK);
return;
}
AnsiString mysql1,my1;
mysql1=Trim(ComboBox1->Text);
my1="select * from htllsz_mingxi where bumen='"+mysql1+"' order by jlrq";
ADOQuery1->Active=False;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(my1);
ADOQuery1->Active=True;
int i;
i=1;
ADOQuery1->First();
while(!ADOQuery1->Eof)
{
Word Year, Month, Day;
TDateTime dtPresent = ADOQuery1->FieldValues["jlrq"];
DecodeDate(dtPresent, Year, Month, Day);
AnsiString p1,p2;
p1= IntToStr(Year)+IntToStr(Month)+IntToStr(Day);
p2=IntToStr(i);
int e;
e=StrLen(p2.c_str());
switch (e)
{
case 1:
p2="000"+p2;
case 2:
p2="00"+p2;
case 3:
p2="0"+p2;
default:
p2=p2;
}
ADOQuery1->Edit();
ADOQuery1->FieldValues["lsh"]=p1+p2;
i=i+1;
ADOQuery1->Next();
}
if(ADOQuery1->State==dsEdit)
{
ADOQuery1->Post();
}
Application->MessageBox("流水号整理完毕!","提示",MB_OK);
return;
请尽快回答,我着急,谢谢各位。
...全文
33 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangpublic 2003-02-14
  • 打赏
  • 举报
回复
唉!你的数据肯定有两条一模一样的啦!看看吧!在有两条一模一样的记录时休想修改其中的任可一条记录!
再有兄台,你的编号那段源代码也太落后了吧!那么麻烦;
p2=("000"+IntToStr(i)).subtring(IntToStr(i).length,4);不就可以了吗?
tangpublic 2003-02-14
  • 打赏
  • 举报
回复
唉!你的数据肯定有两条一模一样的啦!看看吧!在有两条一模一样的记录时休想修改其中的任可一条记录!
再有兄台,你的编号那段源代码也太落后了吧!那么麻烦;
p2=("000"+IntToStr(i)).subtring(IntToStr(i);.length,4);不就可以了吗?
hoget 2003-02-13
  • 打赏
  • 举报
回复
真失望啊。csdn的高手们?
hoget 2003-02-13
  • 打赏
  • 举报
回复
没人会吗?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧