用ado+acess+bcb做数据的插入操作,速度很慢,请帮忙,谢谢!

wanglei9802 2004-12-27 09:50:17
用ado+acess+bcb做数据的插入操作,速度很慢,请帮忙,谢谢!

void __fastcall TSql::InserSgyd(AnsiString cpzh,AnsiString cpfl,AnsiString jszh,AnsiString rq,AnsiString sj,int sd,float x,AnsiString rqd,AnsiString clsbh,AnsiString s)
{
TADOQuery *adoInserSgyd;
try
{
adoInserSgyd = new TADOQuery(NULL);
adoInserSgyd->Connection=mainfrm->ADOConnection2;
adoInserSgyd->Close();
adoInserSgyd->SQL->Clear();
adoInserSgyd->SQL->Add("insert into sgydb (cpzh,cpfl,jszh,rq,sj,sd,x,zdxh,zdxh1,rqd,clsbh,jjd,jjd1,yjd,yjd1,zd,zd1,yd,yd1,kmxh,kmxh1,wd,wd1,cs,cs1)");
adoInserSgyd->SQL->Add("values(:cpzh,:cpfl,:jszh,:rq,:sj,:sd,:x,:zdxh,:zdxh1,:rqd,:clsbh,:jjd,:jjd1,:yjd,:yjd1,:zd,:zd1,:yd,:yd1,:kmxh,:kmxh1,:wd,:wd1,:cs,:cs1)");
adoInserSgyd->Parameters->ParamByName("cpzh")->Value=cpzh;
adoInserSgyd->Parameters->ParamByName("cpfl")->Value=cpfl;
//adoInserSgyd->Parameters->ParamByName("sjdm")->Value=sjdm;
adoInserSgyd->Parameters->ParamByName("jszh")->Value=jszh;
adoInserSgyd->Parameters->ParamByName("rq")->Value=rq;
adoInserSgyd->Parameters->ParamByName("sj")->Value=sj;
adoInserSgyd->Parameters->ParamByName("sd")->Value=sd;
adoInserSgyd->Parameters->ParamByName("x")->Value=x;
if(s.SubString(1,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("zdxh")->Value=290;
adoInserSgyd->Parameters->ParamByName("zdxh1")->Value=true;
}
else if(s.SubString(1,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("zdxh")->Value=0;
adoInserSgyd->Parameters->ParamByName("zdxh1")->Value=false;
}
adoInserSgyd->Parameters->ParamByName("rqd")->Value=rqd;
adoInserSgyd->Parameters->ParamByName("clsbh")->Value=clsbh;
if(s.SubString(2,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("jjd")->Value=160;
adoInserSgyd->Parameters->ParamByName("jjd1")->Value=true;
}
else if(s.SubString(2,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("jjd")->Value=0;
adoInserSgyd->Parameters->ParamByName("jjd1")->Value=false;
}
if(s.SubString(3,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("yjd")->Value=180;
adoInserSgyd->Parameters->ParamByName("yjd1")->Value=true;
}
else if(s.SubString(3,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("yjd")->Value=0;
adoInserSgyd->Parameters->ParamByName("yjd1")->Value=false;
}
if(s.SubString(4,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("zd")->Value=200;
adoInserSgyd->Parameters->ParamByName("zd1")->Value=true;
}
else if(s.SubString(4,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("zd")->Value=0;
adoInserSgyd->Parameters->ParamByName("zd1")->Value=false;
}
if(s.SubString(5,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("yd")->Value=220;
adoInserSgyd->Parameters->ParamByName("yd1")->Value=true;
}
else if(s.SubString(5,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("yd")->Value=0;
adoInserSgyd->Parameters->ParamByName("yd1")->Value=false;
}
if(s.SubString(6,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("kmxh")->Value=240;
adoInserSgyd->Parameters->ParamByName("kmxh1")->Value=true;
}
else if(s.SubString(6,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("kmxh")->Value=0;
adoInserSgyd->Parameters->ParamByName("kmxh1")->Value=false;
}
if(s.SubString(7,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("wd")->Value=260;
adoInserSgyd->Parameters->ParamByName("wd1")->Value=true;
}
else if(s.SubString(7,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("wd")->Value=0;
adoInserSgyd->Parameters->ParamByName("wd1")->Value=false;
}
if(s.SubString(8,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("cs")->Value=280;
adoInserSgyd->Parameters->ParamByName("cs1")->Value=true;
}
else if(s.SubString(8,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("cs")->Value=0;
adoInserSgyd->Parameters->ParamByName("cs1")->Value=false;
}
adoInserSgyd->ExecSQL();
}
__finally
{
adoInserSgyd->Free();
}
}
...全文
158 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jb9802 2004-12-29
  • 打赏
  • 举报
回复
直接用语名不能提高速度吧,很post()快很多
jixiaoqiang 2004-12-29
  • 打赏
  • 举报
回复
各个字段尽量设计的合理点,字符串长度尽量够用就行,不要臃肿。

除了这,你想用SQL语句提高执行速度,估计很难。提醒一下,别钻牛角了

使用DAO 3.51试一下,不过这会牺牲标准的SQL语法。或者换个驱动试试?
jixiaoqiang 2004-12-29
  • 打赏
  • 举报
回复
不知道你的慢到什么程度? 难道插入一条需要几秒钟? 你的程序需要执行多快?

还是你的机器速度慢?
真如实观 2004-12-29
  • 打赏
  • 举报
回复
谁说“CB操作Access库就比较慢”了,我怎么快得要命呢?
我从来不这样用过。
wanglei9802 2004-12-29
  • 打赏
  • 举报
回复
重复的记录是先判断好了的,不用考虑重复的记录,你现在这种方法并不能提高插入的速度
13571863167 2004-12-29
  • 打赏
  • 举报
回复
CB操作Access库就比较慢
jixiaoqiang 2004-12-29
  • 打赏
  • 举报
回复
用搞这么复杂吗?
放个ADOConnection控件ADOConn1,放个ADOCommand控件ADOCmd1.
以下写个大概意思,不一定能运行.但格式是这样的.

ADOConn1->ConnectionString=""; //连接字符串自己写吧,不写了
ADOCmd1->Connection=ADOConn1;
ADOConn1->Open();

ADOCmd1->CommandText="insert into sgydb (cpzh,cpfl,jszh,rq,sj,sd,x,zdxh,zdxh1,rqd,clsbh,jjd,jjd1,yjd,yjd1,zd,zd1,yd,yd1,kmxh,kmxh1,wd,wd1,cs,cs1) values ('" + Edit1->Text + "','" + Edit2->Text + "','" + Edit3->Text + "','" + ...........+ EditX->Text + "')";
if(ADOConn1->Connected)
{
ADOCmd1->Execute();
ShowMessage("插入成功");
}
else
ShowMessage("连接数据库失败!");

你的插入语句还有问题,如果数据库中存在同样的记录,你用Insert into 会出错。应该在插入之前判断是否有重的记录,或者在库中设定ID自动增长(这种方法不推荐,因为数据库中重复记录不报错,数据库会很大)

访问Accesss时使用SQL语句的注意:
1。各项之间最好用单引号引住,除了整型的不用.最好都用单引号
2。各字段名如果与关键字重复,字段名必须用[]括起来
wanglei9802 2004-12-27
  • 打赏
  • 举报
回复
void __fastcall TSql::InserSgyd(AnsiString cpzh,AnsiString cpfl,AnsiString jszh,AnsiString rq,AnsiString sj,int sd,float x,AnsiString rqd,AnsiString clsbh,AnsiString s)
{
TADOQuery *adoInserSgyd;
try
{
adoInserSgyd = new TADOQuery(NULL);
adoInserSgyd->Connection=mainfrm->ADOConnection2;
adoInserSgyd->Close();
adoInserSgyd->SQL->Clear();
adoInserSgyd->SQL->Add("insert into sgydb,cpzh,cpfl,jszh,rq,sj,sd,x,zdxh,zdxh1,rqd,clsbh,jjd,jjd1,yjd,yjd1,zd,zd1,yd,yd1,kmxh,kmxh1,wd,wd1,cs,cs1)");
adoInserSgyd->SQL->Add("values(:cpzh,:cpfl,:jszh,:rq,:sj,:sd,:x,:zdxh,:zdxh1,:rqd,:clsbh,:jjd,:jjd1,:yjd,:yjd1,:zd,:zd1,:yd,:yd1,:kmxh,:kmxh1,:wd,:wd1,:cs,:cs1)");
adoInserSgyd->Parameters->ParamByName("cpzh")->Value=cpzh;
adoInserSgyd->Parameters->ParamByName("cpfl")->Value=cpfl;
//adoInserSgyd->Parameters->ParamByName("sjdm")->Value=sjdm;
adoInserSgyd->Parameters->ParamByName("jszh")->Value=jszh;
adoInserSgyd->Parameters->ParamByName("rq")->Value=rq;
adoInserSgyd->Parameters->ParamByName("sj")->Value=sj;
adoInserSgyd->Parameters->ParamByName("sd")->Value=sd;
adoInserSgyd->Parameters->ParamByName("x")->Value=x;
if(s.SubString(1,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("zdxh")->Value=290;
adoInserSgyd->Parameters->ParamByName("zdxh1")->Value=true;
}
else if(s.SubString(1,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("zdxh")->Value=0;
adoInserSgyd->Parameters->ParamByName("zdxh1")->Value=false;
}
adoInserSgyd->Parameters->ParamByName("rqd")->Value=rqd;
adoInserSgyd->Parameters->ParamByName("clsbh")->Value=clsbh;
if(s.SubString(2,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("jjd")->Value=160;
adoInserSgyd->Parameters->ParamByName("jjd1")->Value=true;
}
else if(s.SubString(2,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("jjd")->Value=0;
adoInserSgyd->Parameters->ParamByName("jjd1")->Value=false;
}
if(s.SubString(3,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("yjd")->Value=180;
adoInserSgyd->Parameters->ParamByName("yjd1")->Value=true;
}
else if(s.SubString(3,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("yjd")->Value=0;
adoInserSgyd->Parameters->ParamByName("yjd1")->Value=false;
}
if(s.SubString(4,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("zd")->Value=200;
adoInserSgyd->Parameters->ParamByName("zd1")->Value=true;
}
else if(s.SubString(4,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("zd")->Value=0;
adoInserSgyd->Parameters->ParamByName("zd1")->Value=false;
}
if(s.SubString(5,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("yd")->Value=220;
adoInserSgyd->Parameters->ParamByName("yd1")->Value=true;
}
else if(s.SubString(5,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("yd")->Value=0;
doInserSgyd->Parameters->ParamByName("yd1")->Value=false;
}
if(s.SubString(6,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("kmxh")->Value=240;
adoInserSgyd->Parameters->ParamByName("kmxh1")->Value=true;
}
else if(s.SubString(6,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("kmxh")->Value=0;
adoInserSgyd->Parameters->ParamByName("kmxh1")->Value=false;
}
if(s.SubString(7,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("wd")->Value=260;
adoInserSgyd->Parameters->ParamByName("wd1")->Value=true;
}
else if(s.SubString(7,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("wd")->Value=0;
adoInserSgyd->Parameters->ParamByName("wd1")->Value=false;
}
if(s.SubString(8,1)=="1")
{
adoInserSgyd->Parameters->ParamByName("cs")->Value=280;
adoInserSgyd->Parameters->ParamByName("cs1")->Value=true;
}
else if(s.SubString(8,1)=="0")
{
adoInserSgyd->Parameters->ParamByName("cs")->Value=0;
adoInserSgyd->Parameters->ParamByName("cs1")->Value=false;
}
adoInserSgyd->ExecSQL();
}
__finally
{
adoInserSgyd->Free();
}
}
h98458 2004-12-27
  • 打赏
  • 举报
回复
能不能先整理你的代码再发上来?
好乱。。。
jb9802 2004-12-27
  • 打赏
  • 举报
回复
BCB中如果用Insert 语句一个个插入本地库(ACCESS)是非常慢的(SQL就很快), 用控件自身的,Appand() Pos(); 会快很多倍, 如果后台是SQL就没有这个问题。

13,870

社区成员

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

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