我想在一张表中读取一个字段的最后一项的值,用下面的代码为什么不行啊?    
Table_power.Open;
Table_power.Last;
powerno:=Table_power.fieldbyname('Id').asinteger;
Table_power.Close;给出的错误信息是access violatioan

解决方案 »

  1.   

    Table_power.Last;
    Table_Power.prior;
    Powerno:=Table_power.FieldbyName('Id').asinteger;这样可以吗?
      

  2.   

    也不行,表里有'id’并且是主码,表原来是空的,在这段代码前面有一段代码向表里插入了记录。id是按顺序生成,用的值是powerno:=powerno+1; 所以想读出最后一个id的值,但是用如下代码给出的错误信息是access violation, 提示说错误出在table_power.open一行;
    我改为 
    try
        begin
          Table_power.Open;
          Table_power.Last;     powerno:=Table_power.fieldbyname('Id').asinteger;
         Table_power.Close;
         end;
    except
        powerno:=15;// 表里最后一个是15,所以这里用人为设定一下,仅用来试一试//结果还是不行,同样是access violation
      

  3.   

    楼主,你能够说清楚点吗?
    可能是这几天不舒服,怎么都没有看懂你说的意思……是不是取一条记录最后一列的值呢 ?
    如果是的话呢 ?
    有俩个方法:
    1。如果知道那一列的 字段号,那么可以通过fieldname 来取;
    2。或者可以通过 fields[i]来取,
    i 是通过计算fieldcount来计算出的
      

  4.   

    Select ID from table Where ID=(Select MAX(ID) from table)
      

  5.   

    Select Max(ID) from table 
    不就可以了吗,
      

  6.   

    with TQuery.create do
      begin
        databasename:=Table_power.databasename;
        sql.clear;
        sql.add('select max(id) from '+table_power.tablename');
        execsql;
        Powerno:=fields[0].asinteger;
        close;
      end;
    感觉你这个程序最大的可能还是id这个字段不存在,不过如果你想获取最大的id还是上面这样比较好
      

  7.   

    错了,上面的execsql应该是open;
    后面最好在end;前面加上free;
      close;
      free;
    end;
      

  8.   

    powerno忘记定义了?也有可能,要么没有id这个字段,要不就是前面这种情况。
    还有一种情况就是你这个table_power中的字段已经写成静态的了,而里面没有id,所以表的数据库定义中有id,而访问回来之后没了这个字段
      

  9.   

    同意:gardenyang(太阳雨) ,如果用table确实有错,就用他的方法吧