有一个多表查询   select a,b,c,d from abb,bcc,... where ...这个结果放在Dbgrideh1里,现在我想在Dbgrideh1里再加一列,然后可以在里填数据,之后再把填了数据的所有行读出来写进一张表里.怎样才能实现.重点2个
1.怎么才能在Dbgrideh1里再加一列?
2.怎么才能把Dbgrideh1里填了数据的行读出来?
请高手帮忙!

解决方案 »

  1.   

    原来有一个报表是动态添加注释使用的与之类似。
    1.实际上无论如何显示,与Dbgrideh无关,不知你新添加的列存在哪里?我的是存储在表中的。
    2.添加内容的时候,弹出新的画面,使用update语句更新相关表即可,如果不希望存储内容,那么可以放在临时表中。
    3.画面刷新时,直接重新查询即可。
    问题的解决方法:
    1.直接关联查询
    2.使用查询读出
      

  2.   

    楼主做法的问题在于,grid是DB的,即使你动态创建了一列,如果不关联字段也是无法写入数据的,所以可以考虑在数据表中增加一列,作为填写数据的列,用完清空再有就是可以使用非DB的grid,当然同时需要逐条添加记录到grid,增加了代码量,但是控制方便,不容易出错
      

  3.   

    不知道你增加的列与查询出来的表数据类型等是否一致,如果一样,可以考虑加个空行,然后edit编辑.一般这样的都用stringgrid来实现比较容易,对于绑定了数据的比较麻烦.
      

  4.   

    Dbgrideh1里的内容不能读出来吗?还有stringgrid没用过,不知阿三能不能弄个例子.如表select a,b,c,d from ... where ...中的a,b,c,d怎样才能放在stringgrid里.
      

  5.   

    不是不能读出来,如果你是db的grid,在没有关联字段的情况下,就不能直接在单元格中写数据
      

  6.   

    不是不能读出来,如果你是db的grid,在没有关联字段的情况下,就不能直接在单元格中写数据
    这个如果解决了,那我又怎么读grid中的数据呢
      

  7.   

    数据集写到stringgrid表格中:
    procedure SetGridInfo(StrGrid:TStringGrid;sOraQuery:TOraQuery);
    var
      i,j:integer;
    begin
      StrGrid.RowCount:=2;
      i:=1;
      while not sOraQuery.eof do
      begin
        StrGrid.Cells[0,i]:=inttostr(i);
        for j:=1 to sOraQuery.FieldCount do
        begin
          StrGrid.Cells[j,i]:=sOraQuery.Fields[j-1].AsString;
        end;
        i:=i+1;
        StrGrid.RowCount:=StrGrid.RowCount+1;
        sOraQuery.Next;
      end;
    end;
      

  8.   

    增加的列可以这样实现,例
     select a,b,c,b,decode(a,a,0) e from ... where ...
    但是怎么把我输入的e也就是e不为0的行读出来呢?
      

  9.   

    dbgrideh1.RowCount出来的是8可我只有7行啊 
      

  10.   

      dbgrideh2.Columns[1].DisplayText:=dbgrideh1.Columns[0].DisplayText;
    为什么报错.怎样才能把dbgrideh1的内容付给dbgrideh2呢?(除了用临时表)
      

  11.   

    :) 单独用ehlib的grid 绑定数据源比较难做哦。你可以用ehlib的一个 memory table的 控件 来达到你的要求。那个控件时需要单独安装的~
    推荐使用advstringgrid 。 比较简单的实现。
      

  12.   

    算了,我第二张表 dbgrideh2改用stringgrid 吧,dbgrideh1是反复使用,然后把他们的数据都放到stringgrid 里