例如
table1  车间
table2  考核项目
table3  车间编号
        考核项目编号
        考核得分
最好的编辑界面类似
       车间1  车间2  车间3 
项目1  20      30     40
项目2
项目3




怎么实现编辑界面???

解决方案 »

  1.   

    查询已经挺复杂了,编辑吗dbgrid肯定不行。除非你在stringgrid中输入,然后用sql语句更新回数据库
      

  2.   

    With ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select distinct 车间 from table1');
      SQL.open;
    end;
    With ADOQuery2 do
    begin
      close;
      SQL.Clear;
      SQL.ADD('select distinct 考核项目 );
      While Not ADOQUery1.EOF do
      begin
        SQL.ADd(',(select sum(考核得分) from table3 where 考核项目编号=table2.考核项目 ');
        SQL.ADD(format('and 车间编号=''%s'')as %s',[ADOQuery1.Fields[0].Asstring,ADOQuery1.Fields[0].Asstring]));
        ADOQuery1.Next;
      end;
      SQL.SaveToFile('1.sql');//调试用
      Open;
    end;
      

  3.   

    对不起,上面的代码少了点东西,用这个吧
    With ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select distinct 车间 from table1');
      SQL.open;
    end;
    With ADOQuery2 do
    begin
      close;
      SQL.Clear;
      SQL.ADD('select distinct 考核项目 );
      While Not ADOQUery1.EOF do
      begin
        SQL.ADd(',(select sum(考核得分) from table3 where 考核项目编号=table2.考核项目 ');
        SQL.ADD(format('and 车间编号=''%s'')as %s',[ADOQuery1.Fields[0].Asstring,ADOQuery1.Fields[0].Asstring]));
        ADOQuery1.Next;
      end;
      SQL.add('from table2');
      SQL.SaveToFile('1.sql');//调试用
      Open;
    end;
      

  4.   

    我的想法最好有个控件可以利用,作报表是有控件的,而且据说powerbuilder里面实现也容易,grid方式编辑最友好
      

  5.   

    你的问题不是第一个遇到的,我在这两个月里至少看到了三个帖子,都是这种问题,我没看到特别好的方法。把查询的结果放到Query里其他操作就好说了
      

  6.   

    pb里面有数据窗口,有几种风格当然比较容易,在delphi中,如果就是
    打印出这种效果也容易啊
      

  7.   

    你查询的结果是从三个表里取的,怎么编辑?结果只是在内存里,如果要修改必须改table1--table3的内容。
      

  8.   

    只修改交叉点的数据,可以实现的,用grid自己完全可以写一个,然后用代码更新数据库,控制一下数据类型即可实现的,不是很难的。
      

  9.   

    如果你写好了,发给我一个
    [email protected]
      

  10.   

    给我也发一个
    [email protected]
      

  11.   

    //jiaclassmate(jia),你可以帮我看看这个问题
    //先谢谢了!!!
    数据库为Access,表格名和表格的字段见下面:表source
    --------------------------------------------------------------------
    时间    车号    货物名称    货物净重    用户单位  ...
    02-10-1  111   一级灰       2000       本厂
    02-10-1  222   二级灰       3000       二厂
    02-10-2  333   灰渣         4000       二厂
    ...
    02-11-1  444   二级灰       66666      一厂
    02-11-1  555   一级灰       44444      本厂
    ...
    -------------------------------------------------------------------
    表employee  //此表用来修改本厂的司机
    -------------------------------------------------------------------
    车号    司机    单位 ...
    555     张三    本厂
    111     李四    本厂
    ...
    -------------------------------------------------------------------
    表users  //此表用来修改外厂的车号
    -------------------------------------------------------------------
    车号    用户单位  ...
    222     二厂
    333     二厂
    444     一厂
    ...
    -------------------------------------------------------------------我要做这么样的一个月报表:
    -------------------------------------------------------------------
                        数                 量                          
    用户单位  |------------------------------------------|  统计总数量  |
                    本     厂      |     自    装                       
    -------------------------------------------------------------------
    一厂      |    56000000        |     1000000000000   | 10056000000 |
    -------------------------------------------------------------------
    二厂      |    22200000        |     8000000000000   | 80022200000 |
    -------------------------------------------------------------------
    三厂      |    33300000        |     4000000000000   | 40033300000 |
    -------------------------------------------------------------------
    四厂      |    45400000        |     5000000000000   | 50045400000 |
    -------------------------------------------------------------------
    ...       |    ...                     ...               ...
    -------------------------------------------------------------------
    合计      |  234242424200000   |   56757575500000    |3453242342000|
    -------------------------------------------------------------------//本厂指本厂司机所运送的货物量,自装为外厂自己装的货物量,统计总数量为两和。
      

  12.   

    这个问题类似的有很多了
    一般来说写入临时表是比较好的方法,以前的一个问题,贴出来给你看一下!gg_spbm表: 
    > prod_no(商品编号,主键) old_type(原型号) new_type(新型号) 
    > 100008/2.5-05 100008/2.5 618/2.5 
    >kc_kc2表: 
    > prod_no whouse_no(库房编号) amt(数量) 
    >100008/2.5-05 库房1 300 
    >100008/2.5-05 库房2 20 
    >100008/2.5-05 库房9 20 
    >要求对以上两个表做联接,查询出如下结果: 
    > prod_no old_type new_type 库房1 库房2 库房9 
    >100008/2.5-05 100008/2.5 618/2.5 300 20 20 
    解决方法1,建临时表temp_table(prod_no,old_type,new_type,amt_1,amt_2,....,amt_9) 
    若还有其他库房则增加相应子段amt_x 
    2, 在临时表中为每种商品建立一条记录(注意先清空临时表) 
    即将gg_spbm拷贝到temp_table 
    3,为temp_table中每个amt_x子段设定相应值 
    update temp_table 
    set amt_x = -----此处amt_x为实际子段如amt_2 
    (select amt from kc_kc2 
    where temp_table.prod_no = kc_kc2.prod_no 
    and whouse_no = '库房x')---x为实际值如2 
    4,将3重复若干次 注意,次钟方法是没办法的办法,以后要注意将表设计好一点 
    以免遇上此类问题 
     
      

  13.   

    QDZZQ 的意思是問如何像Excel那樣編輯表:
     table3  车间编号
             考核项目编号
             考核得分
     ? 而不是問如何得到table3的數據(sql用join,group by).
     常規編輯是:
       |考核项目编号|车间编号|考核得分|     项目1       车间1    20
         项目1       车间2    30
          .           .       .
          .           .       .
         项目2       车间1    22
         项目2       车间2    32
          .           .       .
          .           .       .如果以"车间1  车间2  车间3 "作為DBGrid字段,
    則要動態生成字段名表"考核得分,车间1,车间2,车间3 "
    然後加到sql語句中,產生臨時表,再幫定到DBGrid.
    然後預先填寫(Append):     项目1
         项目2
         项目3
         项目4
          .
          .
       ----不確定數量的記錄.
       注意:字段"考核得分"的值集合是:
       {"项目1","项目2","项目3"...}
       這讓,得到一個中國人習慣的表格,西方人不會習慣這讓填表:
       -------------------------------------------------
       |考核得分|车间1|车间2|车间3|车间4|车间5|车间6|...    
       | 项目 1 | 20  | 30 |     |     |    |     |
       | 项目 2 | 22  | 32 |     |     |    |     |
       | 项目 3 |     |    |     |     |    |     |
       
       難點:動態SQL語句,自己想去...
           
      

  14.   

    zhangqiufk(真言) 理解分析的很透彻,我想用grid和四个ADOQuery写一个控件去实现该功能,一个连接字段表,一个连接项目表,一个连接关系表,另一个动态SQL语句修改和获得关系数据,并提交给grid
      

  15.   

    zhangqiufk(真言)  理解分析的很透彻,我想用grid和三个ADOQuery写一个控件去实现该功能,一个连接字段表,一个连接项目表,另一个动态SQL语句修改和获得关系数据,并提交给grid 现在存在一个问题,如何建立动态内存数据表??
      

  16.   

    我建议获取编辑数据时:
    用 {Table1-->ADOQuery1,Table2-->ADOQuery2]}-->Create TTable,Table3-->[ADOQuery3,(Read/Write)]-->[TTable]-->[TDBGrid] 结构。  
    编辑数据存回Table3时:
    用[TDBGrid]-->[TTable]-->[ADOQuery3,(Read/Write)]-->Table3结构。
    以[TTable]作内存临时表。
    用TTable创建PARADOX表:
    type
      TForm1 = class(TForm)
        Table1: TTable;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        ADOQuery2: TADOQuery;
        ADOQuery3: TADOQuery;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;procedure TForm1.FormCreate(Sender: TObject);
    var 
        aStrX:String; 
    begin
    with talbe1 do
    begin
      DatabaseName = '.\';
      TableName = ‘TempTableName’;
      tabletype = ttparadox;
      with fielddefs do
      begin
        add('考核得分'{字段名}, ftstring{字段类型,看帮助}, 25{长度}, 0);    if AdoQuery1.RecordCount>0 then
        begin
          AdoQuery1.First; 
          while AdoQuery1.Not Eof do
          begin
            aStrX:=AdoQuery1.FieldByName('车间').AsString;        add(aStrX{字段名}, ftstring{字段类型,看帮助}, 25{长度}, 0);
            
            AdoQuery1.Next;
          end;
        end;
      end;
      indexdefs.add('考核得分'...{建立索引,看帮助})
      CreateTable;
      CachedUpdates:=True;{临时存于内存}end;
    end;
    //预置编辑数据:
    procedure TForm1.FormShow(Sender: TObject);
    begin
      //将ADOQuery2内容写进Table1;
      {To Do ....}
      //将ADOQuery3(即Table3)内容写进Table1;
      {To Do ....}  //
      DataSource1.DataSet:=Table1;
      DBGrid1.DataSource:=DataSource1;
      DBGrid1.Refresh;
    end;  用完Table1后磁盘中实际上有‘TempTableName’表,程式结束(Form On Destroy)时执行:
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
       table1.CancelUpdates;
       table1.DeleteTable;
    end;如果用StringGrid做编辑界面,可用数组作为存贮缓冲,再由数组写数据到ADOQuery3,然后提交到数据表Table3,但要复印杂些。