我用的是Delphi7+Access,欲实现轻轨票价的查询。
数据库中表名为“zd”,有“站点序号”、“站点名”、“与下站距离”三个字段,在form上有两个DBlookupcomboBox控件连接“站点名”字段用来选择要查询的起始站和终止站。
我遇到的问题是如何把选择的两个站点名所对应的“与下站距离”字段之间的数据进行累加以求出两站间的距离(当然还要减去终止站“与下站距离”数据),求出两个站点间的距离再求票价就简单了。麻烦各位了!
数据表结构如下:
站点序号 站点名 与下站距离(公里) 1 火车站 3 2 清大路 3.5 3 理工大学 4
数据库中表名为“zd”,有“站点序号”、“站点名”、“与下站距离”三个字段,在form上有两个DBlookupcomboBox控件连接“站点名”字段用来选择要查询的起始站和终止站。
我遇到的问题是如何把选择的两个站点名所对应的“与下站距离”字段之间的数据进行累加以求出两站间的距离(当然还要减去终止站“与下站距离”数据),求出两个站点间的距离再求票价就简单了。麻烦各位了!
数据表结构如下:
站点序号 站点名 与下站距离(公里) 1 火车站 3 2 清大路 3.5 3 理工大学 4
那你的站点顺序一定要正确,查询的时候用>起点站<终点站 (select zdxh,zdmc,count(与下站的距离)as 与下站的距离 from zd where zdh>起点站序列号 and zdh<终点站序列号 )
站点序号 站点名 与下站距离(公里) 1 火车站 3 2 清大路 3.5 3 理工大学 4
假如选择起始站点(火车站)和终点站(理工大学),则应该计算出的结果是7.5。
如果是这样的话应该查询站点序号大于等于起始站的序号且小于终点站序号的所有记录中与下站距离数的和。
SQL语句就不写了。
则有,要查A站到B站的距离,先查出来A站相对B站在起始站一头还是终点站一头。A在B的起始站方向,则查的方式是: A->B,这样子就从A站开始把下站的距离加起来,一直加到B站,由于不到B的下一站,所以要扣减B站记录的到下一站的距离。A在B的终点站方向,则查的方式是: B->A,这样子就从B站开始把下站的距离加起来,一直加到A站,由于不到A的下一站,所以要扣减A站记录的到下一站的距离。
where 站点序号 >= 起点序号 and 站点序号 < 终点序号说明: 终点序号值应 >= 起点序号值
function TForm1.getlong:integer;
var
sitename:string;
s:integer;//距离
begin
adotable1.location('站点名',startsite_edit.txt,[]);//定位开始站点
s:=0;
sitename:=adotable.fieldbyname('站点名').asstring;
while sitename<>endsite_edit.txt do
begin
s:=s+adotable.fieldbyname('与下站距离(公里)').asinteger;
adotable.next;
sitename:=adotable.fieldbyname('站点名').asstring;
end;
getlong:=s;
end;