求TTable的locate方法替代方案

hitripley 2005-01-14 06:01:17
我的程序在插入每条记录到数据库之前,都要做一下查询工作以免重复插入,
代码是这样写的:
......
if(tab_variable->Locate(IDExchange[iTablecount - 1], SKey, TLocateOptions() << loPartialKey))
{
......
}
......
由于记录数目太多,这个操作大概做了几万次,其间内存出现了严重不足,
把这行注释掉之后,运行正常。我想基本可以确定是这个locate调用引起的,
请问大家,在需要大量重复查询数据库时,一般采用什么方法比较合适?
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
真如实观 2005-01-16
  • 打赏
  • 举报
回复
哈哈!楼上的方法很好!

我一般是使ID自动生成,有些编号也可以自动生成,先定义一个变量:
int nIncrease,数据Insert前先算
出编号的最大值如int nMaxBM,

在AfterInsert(TDataSet *DataSet)内写:
++nIncrease;
ADODataSet1->FieldByName("fieldname")->AsInteger=nMaxBM+nIncrease;
CB1013 2005-01-15
  • 打赏
  • 举报
回复
void __fastcall TDM::Table1PostError(TDataSet *DataSet, EDatabaseError *E,
TDataAction &Action)
{
if(dynamic_cast<EDBEngineError*>(E)!=0)
{
if(dynamic_cast<EDBEngineError*>(E)->Errors[0]->ErrorCode==eKeyViol)
{
MessageBox(0,"数据己存在,请重新输入!","警告",MB_OK);
return;
}
}
pcclever 2005-01-14
  • 打赏
  • 举报
回复
应该可以增加一个Query,来对其进行查询,这样方便一些。

hitripley 2005-01-14
  • 打赏
  • 举报
回复
表已经有主键了,这么做是为了不在运行时出现警告。
该怎么办呢?
空中猎手 2005-01-14
  • 打赏
  • 举报
回复
一般做唯一性索引吧~~
要么用select

1,178

社区成员

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

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