主任下达的任务,没办法,装了在学校学的delphi5.0,连个access自己试着做。。碰到几个问题,向大家请教:)1、数据库中第一个“序号”字段设的自动编号,怎样实现删除某条记录(如#14),让其后面的自动往前移?(以便能从最后一条记录的序号直观的看出记录总数)2、数据库中有一“面积”字段,通过一定条件查询,显示在DBGrid中,怎样求这些特定的记录的面积和?
numLabel.Caption:='共有'+inttostr(Query.recordcount)+'条记录';
这个是得到查到的记录数;
想类似的得到面积和,dbgrid或query有相应的属性/方法吗?3、最后一个问题,当新建一条记录后,此记录显示在上面的dbgrid中,却不能对其进行修改/删除,提示“无法为更新行集定位,一些值可能已在最后读取后改变”,只有重新启动程序后才能对此记录操作不知什么问题?渴望帮助,谢谢大家!

解决方案 »

  1.   

    1,自动累加的字段是不能修改的 改变不了2,
    query.Close;
    query.sql.clear;
    query.sql.add('select sum(面积) as  面积和 from table where ...');
    open;
    query.fieldbyname('面积和').value就是你要得面积的和
    3,
    老问题了 可能有默认值 也可能触发器的原因 又很多的这个帖子 所搜一下吧 就不写了
      

  2.   

    第二个问题用计算字段更方便点   你要显示在DBGRID嘛 
      第三个  应该是数据集刷新的问题 不行试试赖招  关了再打开 
    access好象不支持触发器
      

  3.   

    1、自动累加的字段是不可以改变的,但是也可以做,就是有点技巧(1)删除记录后,把这个自动累加的字段的数据类型改为int,然后,再改回自动累加类型。这时,就会对所有的数据进行重新编号了。缺点:改动后,如果和这个自动编号字段有关联的表数据,可能会出错。
      

  4.   

    这样做的虽然手工活多了一点,如果你非要这样实现,可以用SQL语句,对这些手工的活用SQL语句实现。
      

  5.   

    1、直接改变自动累加字段的值是不行的;楼主不是想看出记录条数吗;
       select count(*) from yourtable;就行了;没必要非改变自动累加字段的值;
    2、select count(面积) from yourtable where ......
    3、insert记录是不用post的;
      

  6.   

    谢谢诸位的热心解答!调试ing……打算这样来:
    1、序号没什么用,去掉算了
    2、
    query.sql.clear;
    query.sql.add('select sum(面积) as  面积和 from table where ...');
    open;
    query.fieldbyname('面积和').value谢谢指点:)
    但是我现有dbgrid的内容就是query查询来的,一clear原来内容就没有了再用一个query1?TO:dh9450(谁有我菜)
    计算字段?
    dbgrid中显示不显示无所谓,
    总归最后要做到的是:根据一定条件将查询汇总到的数据显示在dbgrid中,打印出来,并在最后一行给个记录总数/面积和/等的统计数据
    3、
    TO:47522341(睡到8:30)
    晕~~我一直post的,哈哈,谢谢,我再看看:) 
      

  7.   

    呵呵,第一个问题其实没有多大的实际意义;如果非要做的话呢 ?
    建议你不要使用累计字段属性,而是 自己编程实现;
    2.其实你可以参考计算字段,那样的话只需要写一 段代码就可以了 
    3.从安全性方面考虑,建议不要在dbgrid 中进行修改 、编辑
      但是删除应该可以的哦,选中后点击删除就可以了哦 
    做一个actionlist 就可以了
      

  8.   

    就是加一个临时的 总计字段嘛  每次打开数据集的时候自己计算 DBGRID加个固定列指向他  不过你要写SQL 也是不错的方法
      

  9.   

    1,自动累加的字段是不能修改的 无法实现,除非你不要设自动增,而是用一个整数字段,用程序控制来实现。2。
    with query do
    begin
       Close;
       sql.text:='select sum(面积) as  面积和 from yourtable where 你的条件 ';
       open;
    end;
    area:=query.fieldbyname('面积和').asfloat;area为面积变量就是你要得面积的和.3.数据集刷新问题。