在PB中,用GetItemString(row,colname)来定位取数,比如当前行为第1行,要取100行的数据,可以用GetItemString(100, 'name'),取完后当前行仍然为第1行
但在Delphi中,必须通过数据集的定位如next、MoveBy等,而且会影响当前的数据行,很不方便,比如在CalcFields事件中能用这些定位函数吗,会不会引起混乱?或者是不是还有其他的方法,大家谈谈看法吧……

解决方案 »

  1.   

    用Tquery,例如:
    with query1 do
    begin
    close;
    sql.clear;
    sql.add('select * from dbo.table1 where id='23'');
    open;
    end;用FILTERED过滤:
    table.Filtered := false;
    table.Filter :=  '字段1='''+dbcombobox1.text+'''';用LOCATE:
    table.Locate('a',a,[loCaseInsensitive, loPartialKey]);用Seek
    ADODataSet1.Seek(VarArrayOf([90030, 90020]), soFirstEQ);
      

  2.   

    是这样的:我要实现一个环比的功能:
    1到12月的科目金额相比,2月比1月,3月比2月……12月比11月
    比例是一个计算字段,在CalcFields事件中计算
    请问应如何编比较好?
      

  3.   

    PB中:
    For i:=1 to 11
      rate:=dw_1.GetItemDecimal(i+1,'money')/dw_1.GetItemDecimal(i,'money')
    next即可,多简单啊
      

  4.   

    用Tquery.
     
     with queryX do
          begin
           close;
           sql.clear;
           sql.add('select rowname from  table1 where colname')
           sql.open;
          end.
      

  5.   

    可以在QUery中的 字段中的Cheng中写入
      

  6.   

    yang0102() :这是什么呀,Delphi的基本知识我还是懂的
    当然是用TQuery拉,这还用说吗,你上面的代码不能解决什么问题啊
      

  7.   

    数据库本身的机制就不推荐使用行号来定位,这样非常不易于管理,不过你一定要使用可以使用ADODataSet的RecNo来实现
      

  8.   

    用一个全局变量:
    var
     priorValue:double;OnCalcField:
    if DataSet.RecNo <> 1 then
      Dataset['Rate'] := priorValue / DataSet['Value'];
    priorValue := DataSet['Value'];