c++ builder 用动态sql插入数据的问题

sun_flower 2009-04-29 03:03:49
在 c++ builder中 我用下面的代码向数据库写入数据,为什么总是执行一次呢?也就是只插入一条记录。
long snLong = 0 ;
long mac1Long = 0 ;
long mac2Long = 0 ;
//Form2->Query1->Close() ;
Form2->Query1->SQL->Clear() ;
for(int i=0; i<10; i++)
{
Form2->Query1->SQL->Add("insert into label_demo (sn,pc,mac1,mac2) values (:sn,:pc,:mac1,:mac2)") ;
Form2->Query1->Params->ParamByName("sn")->AsString = ltoa(snLong, string, 10) ;
Form2->Query1->Params->ParamByName("pc")->AsString = Form2->pcVar->Text.c_str() ;
Form2->Query1->Params->ParamByName("mac1")->AsString = ltoa(mac1Long, string, 16) ;
Form2->Query1->Params->ParamByName("mac2")->AsString = ltoa(mac2Long, string, 16) ;
Form2->Query1->Open() ;
Form2->Query1->ExecSQL() ;
snLong += 1 ;
mac1Long += 8 ;
mac2Long += 8 ;
}
...全文
193 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
d52787790 2010-03-04
  • 打赏
  • 举报
回复
mark
以后用得着
sun_flower 2009-04-30
  • 打赏
  • 举报
回复
多谢大家了,程序确实没有问题。是我对数据库做了一些非法操作。
COKING 2009-04-30
  • 打赏
  • 举报
回复

long snLong = 0 ;
long mac1Long = 0 ;
long mac2Long = 0 ;
Form2->Query1->Close() ;
Form2->Query1->SQL->Clear() ;
Form2->Query1->SQL->Add("insert into label_demo (sn,pc,mac1,mac2) values (:sn,:pc,:mac1,:mac2)") ;
for(int i=0; i <10; i++)
{
Form2->Query1->Params->ParamByName("sn")->AsString = ltoa(snLong, string, 10) ;
Form2->Query1->Params->ParamByName("pc")->AsString = Form2->pcVar->Text.c_str() ;
Form2->Query1->Params->ParamByName("mac1")->AsString = ltoa(mac1Long, string, 16) ;
Form2->Query1->Params->ParamByName("mac2")->AsString = ltoa(mac2Long, string, 16) ;
Form2->Query1->ExecSQL() ;
snLong += 1 ;
mac1Long += 8 ;
mac2Long += 8 ;
}

qwd100815 2009-04-30
  • 打赏
  • 举报
回复
程序没问题
有可能是数据库设计问题
建议检查下数据库里的数据
dfdscx 2009-04-30
  • 打赏
  • 举报
回复
如果改了还是不行就断点调试吧
海嵌 2009-04-30
  • 打赏
  • 举报
回复
for(int i=0; i <10; i++)
{
Form2->Query1->SQL->Clear() ;
Form2->Query1->SQL->Add("insert into label_demo (sn,pc,mac1,mac2) values (:sn,:pc,:mac1,:mac2)") ;
Form2->Query1->Params->ParamByName("sn")->AsString = ltoa(snLong, string, 10) ;
Form2->Query1->Params->ParamByName("pc")->AsString = Form2->pcVar->Text.c_str() ;
Form2->Query1->Params->ParamByName("mac1")->AsString = ltoa(mac1Long, string, 16) ;
Form2->Query1->Params->ParamByName("mac2")->AsString = ltoa(mac2Long, string, 16) ;
//Form2->Query1->Open() ; ///////////////////// 去掉这里///////////////
Form2->Query1->ExecSQL() ;
snLong += 1 ;
mac1Long += 8 ;
mac2Long += 8 ;
}
hemiya 2009-04-29
  • 打赏
  • 举报
回复

for(int i=0; i <10; i++)
{
// 加上最后面那个分号试试; ↓ 这里
Form2->Query1->SQL->Add("insert into label_demo (sn,pc,mac1,mac2) values (:sn,:pc,:mac1,:mac2);") ;
}
sun_flower 2009-04-29
  • 打赏
  • 举报
回复
主键冲突应该会有提示的。应该不是主键冲突的。
sun_flower 2009-04-29
  • 打赏
  • 举报
回复
设置了,主键是sn。Form2->Query1->Open() ;本身是没有的,忘了注释起来了。
freshforhep 2009-04-29
  • 打赏
  • 举报
回复
Form2->Query1->Open() ; 貌似多了
你设定了主键没?会不会是主键冲突了
sun_flower 2009-04-29
  • 打赏
  • 举报
回复
为什么都没有人理我?是我分数给少了吗?55555555,本人刚刚学c++builder,请大家帮帮忙嘛!
sun_flower 2009-04-29
  • 打赏
  • 举报
回复
试过了加了也不行。
我来看看CB 2009-04-29
  • 打赏
  • 举报
回复
循环前面加上

Form2->Query1->SQL->Clear() ;


for(int i=0; i <10; i++)
{
Form2->Query1->SQL->Clear() ;
Form2->Query1->SQL->Add("insert into label_demo (sn,pc,mac1,mac2) values (:sn,:pc,:mac1,:mac2)") ;
Form2->Query1->Params->ParamByName("sn")->AsString = ltoa(snLong, string, 10) ;
Form2->Query1->Params->ParamByName("pc")->AsString = Form2->pcVar->Text.c_str() ;
Form2->Query1->Params->ParamByName("mac1")->AsString = ltoa(mac1Long, string, 16) ;
Form2->Query1->Params->ParamByName("mac2")->AsString = ltoa(mac2Long, string, 16) ;
Form2->Query1->Open() ;
Form2->Query1->ExecSQL() ;
snLong += 1 ;
mac1Long += 8 ;
mac2Long += 8 ;
}

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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