我用的是Delphi7+Access,欲实现轻轨票价的查询。
数据库中表名为“zd”,有“站点序号”、“站点名”、“与下站距离”三个字段,在form上有两个DBlookupcomboBox控件连接“站点名”字段用来选择要查询的起始站和终止站。
我遇到的问题是如何把选择的两个站点名所对应的“与下站距离”字段之间的数据进行累加以求出两站间的距离(当然还要减去终止站“与下站距离”数据),求出两个站点间的距离再求票价就简单了。麻烦各位了!
数据表结构如下:
           
              站点序号       站点名          与下站距离(公里)                 1           火车站               3                 2           清大路              3.5                 3           理工大学            4

解决方案 »

  1.   


    那你的站点顺序一定要正确,查询的时候用>起点站<终点站 (select zdxh,zdmc,count(与下站的距离)as 与下站的距离 from zd where zdh>起点站序列号 and zdh<终点站序列号 )
      

  2.   

    不知道理解得对不对?
    站点序号       站点名          与下站距离(公里)                 1           火车站               3                 2           清大路              3.5                 3           理工大学            4
    假如选择起始站点(火车站)和终点站(理工大学),则应该计算出的结果是7.5。
    如果是这样的话应该查询站点序号大于等于起始站的序号且小于终点站序号的所有记录中与下站距离数的和。
    SQL语句就不写了。
      

  3.   

    这个应该还算简单吧...毕竟没有中间换乘的情况进行考虑,如果有的话估计就要麻烦一点。其实,如果实在不知道如何应用数据库处理,那就用最笨的办法,一站站查下去。假设站点按起始站到终点站的方式依数字从小到大排列,并且每站记录了与下一站之间的距离,终点站没有下一站,则它的下一站距离记0。
    则有,要查A站到B站的距离,先查出来A站相对B站在起始站一头还是终点站一头。A在B的起始站方向,则查的方式是: A->B,这样子就从A站开始把下站的距离加起来,一直加到B站,由于不到B的下一站,所以要扣减B站记录的到下一站的距离。A在B的终点站方向,则查的方式是: B->A,这样子就从B站开始把下站的距离加起来,一直加到A站,由于不到A的下一站,所以要扣减A站记录的到下一站的距离。
      

  4.   

    select sum(与下站距离) from zd 
    where 站点序号 >= 起点序号 and 站点序号 < 终点序号说明: 终点序号值应 >= 起点序号值
      

  5.   

    感谢大家的回复!不好意思,可能是我没说太明白。上面oyb330理解的是对的,不过应该是6.5啊呵呵!我输入的两个站不一定是挨着的,所以要将他们“与下站距离”相加。能把sql语句讲一下吗?unsigned 你说的很详细思路也很正确,但是能告诉我相关代码吗?我是个新手,谢谢了!
      

  6.   

    给你做成了一个函数,startsite_edit为开始站点名称,endsite_edit为结束站点名称
    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;
      

  7.   

    谢谢你hys_427,我才看到。一会我运行一下。我现在只有这17分了,先给你。