那位帮忙解释一下原因

muyi 2003-08-21 08:16:56
ADOTable1->Active=false;
AnsiString MyConnectionString;
MyConnectionString="Provider=MSDASQL.1;Persist SecurityInfo=False;Data Source=MS Access Database;Initial Catalog="+ExtractFilePath(Application->ExeName)+"GANGGUAN.MDB";
ADOTable1->ConnectionString=MyConnectionString;
ADOTable1->TableName="热轧无缝钢管";
ADOTable1->Active=true;
ADOTable1->First();
.....
for(int i=0;;i++)
{
temp=ADOTable1->FieldByName("外径")->AsFloat;
if(temp>=Gang_OutDiameter)
break;
ADOTable1->Next();
}
float i=temp;
我的意思是用一个ADOTable控件连接一个GANGGUAN.MDB数据库文件,其中有一个名为"热轧无缝钢管"的表,其中一个字段名为"外径",它的值从1...550...630有很多个,我想从1开始递增查询外径值,直到大于或等于Gang_OutDiameter的值就终止并输出这个值,奇怪的是我每次运行查询,程序并不是从1开始递增的查询,而是直接跳到了550,再才往上递增,造成输出结果不真实,这是为何?那位大虾帮忙解释一下原因?
...全文
54 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi 2003-08-21
  • 打赏
  • 举报
回复
^-^
muyi 2003-08-21
  • 打赏
  • 举报
回复
先散分,我再试试
swites 2003-08-21
  • 打赏
  • 举报
回复
对了你用For语句效率是很低的,用过滤方法最好.
lvjack 2003-08-21
  • 打赏
  • 举报
回复
那就这样
ADOQuery->SQL->Text="select top 1 [外径] from [热轧无缝钢管] where [外径]>=" + Gang_OutDiameter + " order by [外径]-" + Gang_OutDiameter
swites 2003-08-21
  • 打赏
  • 举报
回复
TO :muyi ()
实际方法很简单,我看你用的是MsAccess数据库,你只需要用MsAccess将"外径"字段排序,在用CB打开数据库,字段自然按你的要求查找了.(注意在ADOTable1设置索引字段)
zhpsam109 2003-08-21
  • 打赏
  • 举报
回复
建议用select实现查询!
CityHost 2003-08-21
  • 打赏
  • 举报
回复
1.将lvjack(叶飞)的可以改写为:
ADOQuery->SQL->Text="select top 1 [外径] from [热轧无缝钢管] where [外径]>" + Gang_OutDiameter + " order by [外径] ASC";
这样可以将所有外径大于Gang_OutDiameter都列出来,同时按照递增排序,然后只取第一个。
这样就可以满足你的要求。

2.在ACCESS里有一个索引值在作怪,单独看时可能就会这样。

3.不用ADOTable1,而用ADOQuery,这就和1一样了。
muyi 2003-08-21
  • 打赏
  • 举报
回复
1、对lvjack(叶飞)的搞法我想不大好,因为大于Gang_OutDiameter的数据有很多个,这样查询出的结果可能不是我需要的刚好大于Gang_OutDiameter的值.
2、我单独打开数据库文件可以看到是递增排序的.
3、那么如果要使表先递增排序要怎样实现呢?
myan18 2003-08-21
  • 打赏
  • 举报
回复
首先你的“热轧无缝钢管”表内数据是递增排列。
然后
ADOTable1->First();
while (!ADOTable1->Eof)
{
temp=ADOTable1->FieldByName("外径")->AsFloat;
if(temp>=Gang_OutDiameter)
break;
ADOTable1->Next();
}
lvjack 2003-08-21
  • 打赏
  • 举报
回复
关系数据库,数据在数据库中是没有顺序之说的(可以理解为无序的),所以你无法按顺序逐步查询

对于你的要求,这样做即可
用ADOQuery
执行ADOQuery->SQL->Text="select [外径] from [热轧无缝钢管] where [外径]>=" + Gang_OutDiameter + " order by [外径]";
ADOQuery->Open();


然后处理返回的记录集即可
c2y 2003-08-21
  • 打赏
  • 举报
回复
首先要对表进行递增排序,才能达到你的查询要求。

1,178

社区成员

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

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